Descargue una función Lambda ya cargada

156

Creé una función lambda en AWS (Python) usando "upload .zip" Perdí esos archivos y necesito hacer algunos cambios, ¿hay alguna forma de descargar ese .zip?

Elheni Mokhles
fuente

Respuestas:

291

¡Si!

Navegue hasta la configuración de la 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.

Bubble Hacker
fuente
2
Haz clic en la función. Cuando esté en la página de administración de funciones, haga clic en acciones.
Bubble Hacker
1
@kit ¡Sí! En la salida del comando que debería ver codeallí debería encontrar location. Esta es una URL predeterminada que puede usar para descargar la función. La URL será válida por 10 minutos.
Bubble Hacker
@kit ¿Encontró una manera de descargar el zip usando CLI? No tengo suerte con wget o incluso curl
Vineeth
2
@ Vineeth- Sí, puede utilizar comandos como: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --recursivo
kit
1
Trabajó para mi. Solo una nota de que el archivo que descargué no tenía una .zipextensión, por lo que solo era un archivo simple en Windows. La solución es agregar manualmente la extensión al nombre del archivo después de la descarga.
The Unknown Dev
27

Actualización: Enlace agregado al script por sambhaji-sawant . Errores tipográficos, respuesta mejorada y script basado en comentarios!

Puede usar aws-cli para descargar el zip de cualquier lambda.

Primero debes obtener la URL del zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Luego debe 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 en su cuenta de AWS utilizando

$ aws lambda list-functions

Hice un script bash simple para descargar en paralelo todas las funciones lambda de su cuenta de AWS. Puedes verlo aquí :)

Nota: Deberá configurar aws-cli antes de usar los comandos anteriores (o cualquier comando aws-cli) usando aws configure

Guía completa aquí

Arjun Nemani
fuente
aws lambda get-function devuelve una descripción JSON de la función. Para obtener el zip real, debe usar el atributo Code.Location con curl o algún otro cliente HTTP.
jonseymour
2

Puede usar el script de shell disponible aquí

Sambhaji Sawant
fuente
2

Si desea descargar todas las funciones en la región dada 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
fuente
¿Qué funciones pueden hacer en let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());esta línea
KTM
es la desestructuración de objetos creando una nueva variable getAllFunctionListResult y asignando la propiedad Functions de JSON.parse a ella
Mayur Shingare