Unduh fungsi Lambda yang sudah diunggah

156

Saya membuat fungsi lambda di AWS (Python) menggunakan "upload .zip" Saya kehilangan file-file itu dan saya perlu membuat beberapa perubahan, apakah ada cara untuk mengunduh itu .zip?

Elheni Mokhles
sumber

Jawaban:

291

Iya!

Arahkan ke pengaturan fungsi lambda Anda dan di kanan atas Anda akan memiliki tombol yang disebut " Actions". Di menu tarik-turun pilih " export" dan di jendela sembulan, klik "Unduh paket penerapan" dan fungsinya akan diunduh dalam sebuah .zipfile.

Bubble Hacker
sumber
2
Klik pada fungsinya. Ketika Anda berada di halaman tindakan fungsi manajemen klik.
Bubble Hacker
1
@ ya ya! Dalam output dari perintah yang Anda harus lihat codedi sana Anda harus menemukan location. Ini adalah URL yang ditentukan yang dapat Anda gunakan untuk mengunduh fungsi. URL akan valid selama 10 menit.
Bubble Hacker
@kit Apakah Anda menemukan cara untuk mengunduh zip menggunakan CLI? Saya tidak beruntung dengan wget atau bahkan keriting
Vineeth
2
@ Vineeth- Ya, Anda dapat menggunakan perintah seperti: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --recursive
kit
1
Bekerja untukku. Hanya catatan bahwa file yang saya unduh tidak memiliki .zipekstensi jadi hanya file biasa di Windows. Solusinya adalah dengan menambahkan ekstensi secara manual ke nama file setelah mengunduh.
The Unknown Dev
27

Pembaruan: Menambahkan tautan ke skrip oleh sambhaji-sawant . Memperbaiki kesalahan ketik, meningkatkan jawaban dan skrip berdasarkan komentar!

Anda dapat menggunakan aws-cli untuk mengunduh zip dari lambda apa saja.

Pertama, Anda perlu mendapatkan URL ke pos lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Maka Anda perlu menggunakan wget / curl untuk mengunduh zip dari URL. $ wget -O myfunction.zip URL_from_step_1

Selain itu Anda dapat membuat daftar semua fungsi di akun AWS Anda menggunakan

$ aws lambda list-functions

Saya membuat skrip bash sederhana untuk mengunduh semua fungsi lambda secara paralel dari akun AWS Anda. Anda bisa melihatnya di sini :)

Catatan: Anda perlu mengatur aws-cli sebelum menggunakan perintah di atas (atau perintah aws-cli) menggunakan aws configure

Panduan lengkap di sini

Arjun Nemani
sumber
aws lambda get-function mengembalikan deskripsi JSON dari fungsi tersebut. Untuk mendapatkan kode pos yang sebenarnya, Anda perlu menggunakan atribut Code.Location dengan curl atau klien HTTP lainnya.
jonseymour
2

Anda dapat menggunakan skrip shell yang tersedia di sini

Sambhaji Sawant
sumber
2

Jika Anda ingin mengunduh semua fungsi di wilayah yang diberikan di sini adalah solusi saya. Saya telah membuat skrip simpul sederhana untuk mengunduh fungsi. Instal semua paket npm yang diperlukan dan setel AWS CLI Anda ke wilayah yang Anda inginkan sebelum menjalankan skrip.

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()
Mayur Shingare
sumber
Apa fungsi lakukan di let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());dalam baris ini
KTM
itu merusak objek menciptakan variabel baru getAllFunctionListResult dan menugaskan fungsi Function of JSON.parse it
Mayur Shingare