Scarica una funzione Lambda già caricata


156

Ho creato una funzione lambda in AWS (Python) usando "upload .zip" Ho perso quei file e ho bisogno di apportare alcune modifiche, c'è un modo per scaricare quel .zip?

Risposte:


293

Sì!

Passa alle impostazioni della tua funzione lambda e in alto a destra avrai un pulsante chiamato " Actions". Nel menu a discesa selezionare " export" e nel popup fare clic su "Scarica pacchetto di distribuzione" e la funzione verrà scaricata in un .zipfile.


2
Clicca sulla funzione Quando ci si trova nella pagina di gestione delle funzioni, fare clic su azioni.
Bubble Hacker,

1
@kit Sì! Nell'output del comando dovresti vedere codelì che dovresti trovare location. Questo è un URL assegnato che è possibile utilizzare per scaricare la funzione. L'URL sarà valido per 10 minuti.
Bubble Hacker,

@kit Hai trovato un modo per scaricare lo zip utilizzando l'interfaccia della riga di comando? Non ho fortuna con wget o addirittura con il ricciolo
Vineeth,

2
@ Vineeth- Sì, puoi usare un comando come: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev.
kit

1
Ha funzionato per me. Solo una nota che il file che ho scaricato non aveva .zipun'estensione, quindi era solo un semplice file in Windows. La soluzione è aggiungere manualmente l'estensione al nome del file dopo il download.
The Unknown Dev,

27

Aggiornamento: aggiunto il collegamento allo script di sambhaji-sawant . Risolto il problema con Typos, risposta migliorata e script basati sui commenti!

Puoi usare aws-cli per scaricare lo zip di qualsiasi lambda.

Per prima cosa devi ottenere l'URL della zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Quindi è necessario utilizzare wget / curl per scaricare lo zip dall'URL. $ wget -O myfunction.zip URL_from_step_1

Inoltre, puoi elencare tutte le funzioni sul tuo account AWS utilizzando

$ aws lambda list-functions

Ho creato un semplice script bash per scaricare in parallelo tutte le funzioni lambda dal tuo account AWS. Puoi vederlo qui :)

Nota: sarà necessario impostare aws-cli prima di usare i comandi sopra (o qualsiasi comando aws-cli) usando aws configure

Guida completa qui


aws lambda get-function restituisce una descrizione JSON della funzione. Per ottenere lo zip effettivo, è necessario utilizzare l'attributo Code.Location con curl o qualche altro client HTTP.
jonseymour,


2

Se vuoi scaricare tutte le funzioni in una determinata regione, ecco la mia soluzione alternativa. Ho creato un semplice script del nodo per scaricare la funzione. Installa tutti i pacchetti npm richiesti e imposta la CLI AWS sulla regione desiderata prima di eseguire lo 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()

Cosa Funzioni fare let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());in questa linea
KTM

è la distruzione degli oggetti creando una nuova variabile getAllFunctionListResult e assegnandogli la proprietà Functions di JSON.parse
Mayur Shingare
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.