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