アップロード済みのLambda関数をダウンロードする


156

「upload .zip」を使用してAWS(Python)でラムダ関数を作成しました。これらのファイルを失い、変更を加える必要があります。その.zipをダウンロードする方法はありますか?

回答:


291

はい!

ラムダ関数の設定に移動すると、右上に「Actions」というボタンがあります。ドロップダウンメニューで[]を選択exportし、ポップアップで[Download Deployment Package]をクリックすると、関数が.zipファイルにダウンロードされます。


2
関数をクリックします。機能管理ページで、アクションをクリックします。
バブルハッカー2017

1
@kitはい!コマンドの出力で、codeそこに表示されるはずlocationです。これは、関数のダウンロードに使用できる署名済みURLです。URLは10分間有効です。
バブルハッカー2017

@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によるスクリプトへのリンクが追加されました。タイプミスを修正し、コメントに基づいて回答とスクリプトを改善しました!

aws-cliを使用して、任意のラムダのzipをダウンロードできます。

最初にラムダ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

AWSアカウントからすべてのラムダ関数を並列ダウンロードする簡単なbashスクリプトを作成しました。あなたはここでそれを見ることができ ます :)

注:上記のコマンド(またはaws-cliコマンド)を使用する前に、aws-cliをセットアップする必要があります。 aws configure

ここで完全なガイド


aws lambda get-functionは、関数のJSON記述を返します。実際のzipを取得するには、curlまたはその他のHTTPクライアントでCode.Location属性を使用する必要があります。
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.