Laden Sie eine bereits hochgeladene Lambda-Funktion herunter

155

Ich habe eine Lambda-Funktion in AWS (Python) mit ".zip hochladen" erstellt. Ich habe diese Dateien verloren und muss einige Änderungen vornehmen. Gibt es eine Möglichkeit, diese .zip-Datei herunterzuladen?

Elheni Mokhles
quelle

Antworten:

290

Ja!

Navigieren Sie zu Ihren Lambda-Funktionseinstellungen und oben rechts befindet sich eine Schaltfläche mit dem Namen " Actions". exportWählen Sie im Dropdown-Menü " " und klicken Sie im Popup auf "Bereitstellungspaket herunterladen". Die Funktion wird in einer .zipDatei heruntergeladen .

Bubble Hacker
quelle
2
Klicken Sie auf die Funktion. Wenn Sie sich auf der Funktionsverwaltungsseite befinden, klicken Sie auf Aktionen.
Bubble Hacker
1
@ Kit Ja! In der Ausgabe des Befehls sollten Sie codedort sehen, was Sie finden sollten location. Dies ist eine vorgegebene URL, über die Sie die Funktion herunterladen können. Die URL ist 10 Minuten gültig.
Bubble Hacker
@kit Haben Sie eine Möglichkeit gefunden, die Zip-Datei über die CLI herunterzuladen? Ich habe kein Glück mit Wget oder sogar Curl
Vineeth
2
@ Vineeth- Ja, Sie können folgende Befehle verwenden: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --rekursiv
Kit
1
Hat für mich gearbeitet. Nur ein Hinweis, dass die von mir heruntergeladene Datei keine .zipErweiterung hatte, also nur eine einfache Datei in Windows. Die Lösung besteht darin, die Erweiterung nach dem Herunterladen manuell zum Dateinamen hinzuzufügen.
Der unbekannte
27

Update: Link zum Skript von Sambhaji-Sawant hinzugefügt . Tippfehler behoben, Antwort und Skript basierend auf Kommentaren verbessert!

Sie können aws-cli verwenden , um die Zip -Datei eines beliebigen Lambda herunterzuladen.

Zuerst müssen Sie die URL zur Lambda-Postleitzahl erhalten $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Dann müssen Sie wget / curl verwenden, um die Zip von der URL herunterzuladen. $ wget -O myfunction.zip URL_from_step_1

Zusätzlich können Sie mit alle Funktionen in Ihrem AWS-Konto auflisten

$ aws lambda list-functions

Ich habe ein einfaches Bash-Skript erstellt, um alle Lambda-Funktionen parallel von Ihrem AWS-Konto herunterzuladen. Sie können es hier sehen :)

Hinweis: Sie müssen aws-cli einrichten, bevor Sie die obigen Befehle (oder einen beliebigen aws-cli-Befehl) verwenden können aws configure

Vollständige Anleitung hier

Arjun Nemani
quelle
aws lambda get-function gibt eine JSON-Beschreibung der Funktion zurück. Um die eigentliche Zip-Datei zu erhalten, müssen Sie das Code.Location-Attribut mit curl oder einem anderen HTTP-Client verwenden.
Jonseymour
2

Sie können das hier verfügbare Shell-Skript verwenden

Sambhaji Sawant
quelle
2

Wenn Sie alle Funktionen in der angegebenen Region herunterladen möchten, ist dies meine Problemumgehung. Ich habe ein einfaches Knotenskript zum Herunterladen der Funktion erstellt. Installieren Sie alle erforderlichen npm-Pakete und stellen Sie Ihre AWS-CLI auf die gewünschte Region ein, bevor Sie das Skript ausführen.

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
quelle
Was Funktionen tun in let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());dieser Linie
KTM
Es ist eine Objektzerstörung, die eine neue Variable getAllFunctionListResult erstellt und ihr die Funktionseigenschaften von JSON.parse zuweist
Mayur Shingare