下载已经上传的Lambda函数


Answers:


290

是!

导航至lambda函数设置,然后在右上角会有一个名为“ Actions” 的按钮。在下拉菜单中选择“ export”,然后在弹出窗口中单击“下载部署包”,该功能将下载到一个.zip文件中。


2
点击功能。在功能管理页面中,单击操作。
Bubble Hacker

1
@kit是的!在命令的输出中,您应该code在那里找到location。这是一个预签名的URL,可用于下载该功能。该网址的有效期为10分钟。
Bubble Hacker

@kit您是否找到了使用CLI下载zip的方法?我没有wget甚至卷发的运气
Vineeth

2
@ Vineeth-是的,您可以使用以下命令:AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3:// my-images / dev。--recursive
套件

1
为我工作。请注意,我下载的文件没有.zip扩展名,因此在Windows中只是一个普通文件。解决方法是在下载后手动将扩展名添加到文件名中。
未知的开发

27

更新:添加了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

完整指南在这里


aws lambda get-function返回该功能的JSON描述。要获取实际的zip,您需要将Code.Location属性与curl或其他HTTP客户端一起使用。
jonseymour


2

如果要下载给定区域中的所有功能,这是我的解决方法。我创建了一个简单的节点脚本下载功能。安装所有必需的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());这行
KTM

它是对象解构,创建新变量getAllFunctionListResult并为其分配JSON.parse的Functions属性
Mayur Shingare
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.