Pobierz już załadowaną funkcję Lambda

156

Utworzyłem funkcję lambda w AWS (Python) za pomocą „upload .zip”. Zgubiłem te pliki i muszę dokonać pewnych zmian, czy jest jakiś sposób, aby pobrać ten plik .zip?

Elheni Mokhles
źródło

Odpowiedzi:

291

Tak!

Przejdź do ustawień funkcji lambda, aw prawym górnym rogu zobaczysz przycisk o nazwie „ Actions”. W rozwijanym menu wybierz „ export” iw wyskakującym okienku kliknij „Pobierz pakiet wdrożeniowy”, a funkcja zostanie pobrana w .zippliku.

Bubble Hacker
źródło
2
Kliknij funkcję. Gdy jesteś na stronie zarządzania funkcjami, kliknij akcje.
Bubble Hacker
1
@kit Yes! Na wyjściu polecenia, które powinieneś zobaczyć code, powinieneś znaleźć location. To jest wstępnie zdefiniowany adres URL, którego można użyć do pobrania funkcji. Adres URL będzie ważny przez 10 minut.
Bubble Hacker
@kit Czy znalazłeś sposób na pobranie pliku ZIP za pomocą CLI? Nie mam szczęścia z wgetem ani nawet z curl
Vineeth
2
@ Vineeth- Tak, możesz użyć polecenia takiego jak: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --recursive
zestaw
1
Pracował dla mnie. Tylko uwaga, że ​​pobrany plik nie miał .ziprozszerzenia, więc był zwykłym plikiem w systemie Windows. Rozwiązaniem jest ręczne dodanie rozszerzenia do nazwy pliku po pobraniu.
The Unknown Dev
27

Aktualizacja: Dodano link do skryptu autorstwa sambhaji-sawant . Poprawione literówki, ulepszona odpowiedź i skrypt oparty na komentarzach!

Możesz użyć aws-cli, aby pobrać plik ZIP dowolnej lambdy.

Najpierw musisz uzyskać adres URL do zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Następnie musisz użyć wget / curl, aby pobrać plik zip z adresu URL. $ wget -O myfunction.zip URL_from_step_1

Dodatkowo możesz wyświetlić listę wszystkich funkcji na swoim koncie AWS za pomocą

$ aws lambda list-functions

Zrobiłem prosty skrypt bash, aby równolegle pobierać wszystkie funkcje lambda z konta AWS. Możesz to zobaczyć tutaj :)

Uwaga: Musisz skonfigurować aws-cli przed użyciem powyższych poleceń (lub dowolnego polecenia aws-cli) za pomocą aws configure

Pełny przewodnik tutaj

Arjun Nemani
źródło
aws lambda funkcja get zwraca opis funkcji w formacie JSON. Aby uzyskać rzeczywisty plik ZIP, musisz użyć atrybutu Code.Location z curl lub innym klientem HTTP.
jonseymour
2

Możesz użyć skryptu powłoki dostępnego tutaj

Sambhaji Sawant
źródło
2

Jeśli chcesz pobrać wszystkie funkcje w danym regionie, oto moje obejście. Stworzyłem prosty skrypt węzła do pobierania funkcji. Zainstaluj wszystkie wymagane pakiety npm i ustaw swój AWS CLI na żądany region przed uruchomieniem skryptu.

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
źródło
Co Funkcje zrobić w let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());tej linii
KTM
to destrukturyzacja obiektów, tworzenie nowej zmiennej getAllFunctionListResult i przypisanie jej właściwości Functions JSON.parse
Mayur Shingare