我使用“ upload .zip”在AWS(Python)中创建了一个lambda函数,丢失了这些文件,我需要进行一些更改,是否可以下载该.zip?
我使用“ upload .zip”在AWS(Python)中创建了一个lambda函数,丢失了这些文件,我需要进行一些更改,是否可以下载该.zip?
Answers:
是!
导航至lambda函数设置,然后在右上角会有一个名为“ Actions
” 的按钮。在下拉菜单中选择“ export
”,然后在弹出窗口中单击“下载部署包”,该功能将下载到一个.zip
文件中。
code
在那里找到location
。这是一个预签名的URL,可用于下载该功能。该网址的有效期为10分钟。
.zip
扩展名,因此在Windows中只是一个普通文件。解决方法是在下载后手动将扩展名添加到文件名中。
更新:添加了sambhaji-sawant的脚本链接。修复了Typos,改进的答案和基于注释的脚本!
您可以使用aws-cli下载任何lambda的zip文件。
首先,您需要获取lambda zip的URL
$ aws lambda get-function --function-name $functionName --query 'Code.Location'
然后,您需要使用wget / curl从URL下载zip。
$ wget -O myfunction.zip URL_from_step_1
此外,您可以使用以下命令列出您的AWS账户上的所有功能
$ aws lambda list-functions
我制作了一个简单的bash脚本,以从您的AWS账户并行下载所有lambda函数。你可以在这里看到 :)
注意:在使用上述命令(或任何aws-cli命令)之前,您需要先设置aws-cli aws configure
您可以使用此处提供的shell脚本
如果要下载给定区域中的所有功能,这是我的解决方法。我创建了一个简单的节点脚本下载功能。安装所有必需的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());
这行