Tải xuống một chức năng Lambda đã tải lên


156

Tôi đã tạo một hàm lambda trong AWS (Python) bằng cách sử dụng "upload .zip" Tôi bị mất các tệp đó và tôi cần thực hiện một số thay đổi, có cách nào để tải xuống .zip đó không?

Câu trả lời:


291

Đúng!

Điều hướng đến các cài đặt chức năng lambda của bạn và ở phía trên bên phải, bạn sẽ có một nút gọi là " Actions". Trong menu thả xuống, chọn " export" và trong cửa sổ bật lên, nhấp vào "Tải xuống gói triển khai" và chức năng sẽ tải xuống trong một .ziptệp.


2
Bấm vào chức năng. Khi bạn đang ở trong trang quản lý chức năng bấm hành động.
Hacker bong bóng

1
@kit Có! Trong đầu ra của lệnh bạn sẽ thấy codetrong đó bạn sẽ tìm thấy location. Đây là một URL được chỉ định mà bạn có thể sử dụng để tải xuống chức năng. URL sẽ có hiệu lực trong 10 phút.
Bubble Hacker

@kit Bạn đã tìm được cách tải xuống zip bằng CLI chưa? Tôi không có may mắn với wget hoặc thậm chí curl
Vineeth

2
@ Vineeth- Có, bạn có thể sử dụng lệnh như: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-hình ảnh / dev. --recursive
bộ

1
Đã làm cho tôi. Chỉ cần lưu ý rằng tệp tôi đã tải xuống không có .zipphần mở rộng nên chỉ là một tệp đơn giản trong Windows. Giải pháp là tự thêm phần mở rộng vào tên tệp sau khi tải xuống.
The Dev không rõ

27

Cập nhật: Đã thêm liên kết đến tập lệnh bởi sambhaji-sawant . Đã sửa lỗi Typose, cải thiện câu trả lời và kịch bản dựa trên ý kiến!

Bạn có thể sử dụng aws-cli để tải xuống zip của bất kỳ lambda nào.

Trước tiên, bạn cần lấy URL tới zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Sau đó, bạn cần sử dụng wget / curl để tải xuống zip từ URL. $ wget -O myfunction.zip URL_from_step_1

Ngoài ra, bạn có thể liệt kê tất cả các chức năng trên tài khoản AWS của mình bằng cách sử dụng

$ aws lambda list-functions

Tôi đã tạo một tập lệnh bash đơn giản để tải xuống song song tất cả các hàm lambda từ tài khoản AWS của bạn. Bạn có thể thấy nó ở đây :)

Lưu ý: Bạn sẽ cần thiết lập aws-cli trước khi sử dụng các lệnh trên (hoặc bất kỳ lệnh aws-cli nào) bằng cách sử dụng aws configure

Hướng dẫn đầy đủ tại đây


Hàm getda lambda trả về một mô tả JSON của hàm. Để có được mã zip thực tế, bạn cần sử dụng thuộc tính Code.Location với curl hoặc một số máy khách HTTP khác.
jonseymour


2

Nếu bạn muốn tải xuống tất cả các chức năng trong khu vực nhất định ở đây là cách giải quyết của tôi. Tôi đã tạo một tập lệnh nút đơn giản để tải về chức năng. Cài đặt tất cả các gói npm cần thiết và đặt AWS CLI của bạn đến khu vực bạn muốn trước khi chạy tập lệnh.

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()

Những gì Chức năng làm trong let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());trong dòng này
KTM

đó là đối tượng phá hủy việc tạo biến mới getAllFunctionListResult và gán thuộc tính Hàm của JSON.parse cho nó
Mayur Shingare
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.