Descargue una función Lambda ya cargada
Creé una función lambda en AWS (Python) usando "cargar .zip". Perdí esos archivos y necesito hacer algunos cambios, ¿hay alguna forma de descargar ese .zip?
¡Sí!
Navegue hasta la configuración de su función lambda y en la parte superior derecha tendrá un botón llamado " Actions
". En el menú desplegable, seleccione " export
" y en la ventana emergente haga clic en "Descargar paquete de implementación" y la función se descargará en un .zip
archivo.
Botón de acción en la parte superior derecha
Una ventana emergente de la CTA anterior (toque "Descargar paquete de implementación" aquí)
Actualización: enlace agregado al script de sambhaji-sawant . ¡Errores tipográficos corregidos, respuesta mejorada y guión basado en comentarios!
Puede utilizar aws-cli para descargar el zip de cualquier lambda.
Primero necesitas obtener la URL del zip lambda.
$ aws lambda get-function --function-name $functionName --query 'Code.Location'
Luego necesitas usar wget/curl para descargar el zip desde la URL.
$ wget -O myfunction.zip URL_from_step_1
Además, puede enumerar todas las funciones de su cuenta de AWS utilizando
$ aws lambda list-functions
Hice un script bash simple para descargar en paralelo todas las funciones lambda desde su cuenta de AWS. Puedes verlo aqui :)
Nota: Necesitará configurar aws-cli antes de usar los comandos anteriores (o cualquier comando aws-cli) usandoaws configure
guía completa aquí
Aquí hay un script bash que utilicé, descarga todas las funciones en la región predeterminada:
download_code () {
local OUTPUT=$1
OUTPUT=`sed -e 's/,$//' -e 's/^"//' -e 's/"$//g' <<<"$OUTPUT"`
url=$(aws lambda get-function --function-name get-marvel-movies-from-opensearch --query 'Code.Location' )
wget $url -O $OUTPUT.zip
}
FUNCTION_LIST=$(aws lambda list-functions --query Functions[*].FunctionName)
for run in $FUNCTION_LIST
do
download_code $run
done
echo "Finished!!!!"
Si desea descargar todas las funciones en la región determinada, aquí está mi solución. He creado un script de nodo simple para descargar la función. Instale todos los paquetes npm necesarios y configure su AWS CLI en la región que desee antes de ejecutar el script.
let download = require('download-file');
let extract = require('extract-zip');
let cmd = require('node-cmd');
let downloadFile = async function (dir, filename, url) {
let options = {
directory: dir,
filename: filename
}
return new Promise((success, failure) => {
download(url, options, function (err) {
if (err) {
failure(err)
} else {
success('done');
}
})
})
}
let extractZip = async function (source, target) {
return new Promise((success, failure) => {
extract(source, { dir: target }, function (err) {
if (err) {
failure(err)
} else {
success('done');
}
})
})
}
let getAllFunctionList = async function () {
return new Promise((success, failure) => {
cmd.get(
'aws lambda list-functions',
function (err, data, stderr) {
if (err || stderr) {
failure(err || stderr)
} else {
success(data)
}
}
);
})
}
let getFunctionDescription = async function (name) {
return new Promise((success, failure) => {
cmd.get(
`aws lambda get-function --function-name ${name}`,
function (err, data, stderr) {
if (err || stderr) {
failure(err || stderr)
} else {
success(data)
}
}
);
})
}
let init = async function () {
try {
let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());
let getFunctionDescriptionResult, downloadFileResult, extractZipResult;
getAllFunctionListResult.map(async (f) => {
var { Code: { Location: getFunctionDescriptionResult } } = JSON.parse(await getFunctionDescription(f.FunctionName));
downloadFileResult = await downloadFile('./functions', `${f.FunctionName}.zip`, getFunctionDescriptionResult)
extractZipResult = await extractZip(`./functions/${f.FunctionName}.zip`, `/Users/malhar/Desktop/get-lambda-functions/final/${f.FunctionName}`)
console.log('done', f.FunctionName);
})
} catch (e) {
console.log('error', e);
}
}
init()
Puede encontrar un script de Python para descargar todas las funciones lambda aquí .
import os
import sys
from urllib.request import urlopen
import zipfile
from io import BytesIO
import boto3
def get_lambda_functions_code_url():
client = boto3.client("lambda")
lambda_functions = [n["FunctionName"] for n in client.list_functions()["Functions"]]
functions_code_url = []
for fn_name in lambda_functions:
fn_code = client.get_function(FunctionName=fn_name)["Code"]
fn_code["FunctionName"] = fn_name
functions_code_url.append(fn_code)
return functions_code_url
def download_lambda_function_code(fn_name, fn_code_link, dir_path):
function_path = os.path.join(dir_path, fn_name)
if not os.path.exists(function_path):
os.mkdir(function_path)
with urlopen(fn_code_link) as lambda_extract:
with zipfile.ZipFile(BytesIO(lambda_extract.read())) as zfile:
zfile.extractall(function_path)
if __name__ == "__main__":
inp = sys.argv[1:]
print("Destination folder {}".format(inp))
if inp and os.path.exists(inp[0]):
dest = os.path.abspath(inp[0])
fc = get_lambda_functions_code_url()
print("There are {} lambda functions".format(len(fc)))
for i, f in enumerate(fc):
print("Downloading Lambda function {} {}".format(i+1, f["FunctionName"]))
download_lambda_function_code(f["FunctionName"], f["Location"], dest)
else:
print("Destination folder doesn't exist")