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?
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?
Odpowiedzi:
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 .zip
pliku.
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.
.zip
rozszerzenia, więc był zwykłym plikiem w systemie Windows. Rozwiązaniem jest ręczne dodanie rozszerzenia do nazwy pliku po pobraniu.
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
Możesz użyć skryptu powłoki dostępnego tutaj
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()
let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());
tej linii