Descargue una función Lambda ya cargada

Resuelto Elheni Mokhles asked hace 54 años • 6 respuestas

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?

Elheni Mokhles avatar Jan 01 '70 08:01 Elheni Mokhles
Aceptado

¡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 .ziparchivo.

Botón de acción en la parte superior derecha

Paso 1

Una ventana emergente de la CTA anterior (toque "Descargar paquete de implementación" aquí)

Paso 2

Bubble Hacker avatar Dec 18 '2016 06:12 Bubble Hacker

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í

Arjun Nemani avatar Dec 10 '2018 07:12 Arjun Nemani

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!!!!"
kumarahul avatar Nov 21 '2021 08:11 kumarahul

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()
Mayur Shingare avatar Oct 26 '2019 14:10 Mayur Shingare

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")
rAm avatar Apr 03 '2021 12:04 rAm