Завантажте вже завантажену функцію лямбда


156

Я створив лямбда-функцію в AWS (Python) за допомогою "upload .zip". Я втратив ці файли, і мені потрібно внести деякі зміни, чи є спосіб завантажити цей .zip?

Відповіді:


291

Так!

Перейдіть до налаштувань функції лямбда, і вгорі праворуч у вас з'явиться кнопка під назвою " Actions". У спадному меню виберіть " export", а у спливаючому меню натисніть "Завантажити пакет розгортання", і функція завантажиться у .zipфайл.


2
Натисніть на функцію. Коли ви перебуваєте на сторінці управління функціями, натисніть дії.
Bubble Hacker

1
@kit Так! У висновку команди, яку ви повинні побачити, codeтам ви повинні знайти location. Це призначена URL-адреса, яку ви можете використовувати для завантаження функції. URL-адреса буде дійсною 10 хвилин.
Хакер міхура

@kit Ви знайшли спосіб завантажити zip за допомогою CLI? Мені не пощастило з wget або навіть curl
Vineeth

2
@ Vineeth- Так, ви можете скористатися командою типу: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --рекурсивний
комплект

1
Працювали для мене. Лише зауважте, що завантажений у мене файл не мав .zipрозширення, тому це був просто звичайний файл у Windows. Рішення полягає в тому, щоб вручну додати розширення до імені файлу після завантаження.
Невідомий Dev

27

Оновлення: Додано посилання на скрипт самбхаджі-піант . Виправлені помилки, вдосконалена відповідь та сценарій на основі коментарів!

Ви можете використовувати aws-cli, щоб завантажити блискавку будь-якої лямбда.

Спочатку потрібно отримати URL-адресу на лямбда-поштовий індекс $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Тоді вам потрібно використовувати wget / curl для завантаження поштового індексу з URL-адреси. $ wget -O myfunction.zip URL_from_step_1

Крім того, ви можете перелічити всі функції вашого акаунта AWS за допомогою

$ aws lambda list-functions

Я створив простий скрипт bash для паралельного завантаження всіх лямбда-функцій зі свого акаунта AWS. Ви можете побачити його тут :)

Примітка: Вам потрібно буде встановити aws-cli перед тим, як використовувати вищевказані команди (або будь-яку команду aws-cli), використовуючи aws configure

Повний довідник тут


aws lambda get-function повертає JSON опис функції. Щоб отримати фактичний поштовий індекс, вам потрібно використовувати атрибут 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
Mayur Shingare
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.