Я створив лямбда-функцію в AWS (Python) за допомогою "upload .zip". Я втратив ці файли, і мені потрібно внести деякі зміни, чи є спосіб завантажити цей .zip?
Я створив лямбда-функцію в AWS (Python) за допомогою "upload .zip". Я втратив ці файли, і мені потрібно внести деякі зміни, чи є спосіб завантажити цей .zip?
Відповіді:
Так!
Перейдіть до налаштувань функції лямбда, і вгорі праворуч у вас з'явиться кнопка під назвою " Actions
". У спадному меню виберіть " export
", а у спливаючому меню натисніть "Завантажити пакет розгортання", і функція завантажиться у .zip
файл.
code
там ви повинні знайти location
. Це призначена URL-адреса, яку ви можете використовувати для завантаження функції. URL-адреса буде дійсною 10 хвилин.
.zip
розширення, тому це був просто звичайний файл у Windows. Рішення полягає в тому, щоб вручну додати розширення до імені файлу після завантаження.
Оновлення: Додано посилання на скрипт самбхаджі-піант . Виправлені помилки, вдосконалена відповідь та сценарій на основі коментарів!
Ви можете використовувати aws-cli, щоб завантажити блискавку будь-якої лямбда.
Спочатку потрібно отримати URL-адресу на лямбда-поштовий індекс
$ aws lambda get-function --function-name $functionName --query 'Code.Location'
Тоді вам потрібно використовувати wget / curl для завантаження поштового індексу з URL-адреси.
$ wget -O myfunction.zip URL_from_step_1
Крім того, ви можете перелічити всі функції вашого акаунта AWS за допомогою
$ aws lambda list-functions
Я створив простий скрипт bash для паралельного завантаження всіх лямбда-функцій зі свого акаунта AWS. Ви можете побачити його тут :)
Примітка: Вам потрібно буде встановити aws-cli перед тим, як використовувати вищевказані команди (або будь-яку команду aws-cli), використовуючи aws configure
Ви можете використовувати скрипт оболонки, доступний тут
Якщо ви хочете завантажити всі функції в даному регіоні, ось моє вирішення. Я створив простий сценарій вузла для завантаження функції. Встановіть усі необхідні пакети npm та встановіть свій AWS CLI у потрібний регіон перед запуском сценарію.
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());
цій лінії