Загрузите уже загруженную лямбда-функцию

156

Я создал лямбда-функцию в AWS (Python), используя «upload .zip». Я потерял эти файлы, и мне нужно внести некоторые изменения, есть ли способ загрузить этот .zip?

Эльхени Мохлес
источник

Ответы:

293

Да!

Перейдите к настройкам лямбда-функции и в правом верхнем углу у вас будет кнопка « Actions». В выпадающем меню выберите « export» и во всплывающем окне нажмите «Загрузить пакет развертывания», и функция загрузится в .zipфайл.

Bubble Hacker
источник
2
Нажмите на функцию. Когда вы находитесь на странице управления функциями, щелкните действия.
Bubble Hacker
1
@kit Да! В выводе команды, которую вы должны увидеть, codeвы должны найти location. Это заранее заданный URL-адрес, который можно использовать для загрузки функции. URL будет действителен в течение 10 минут.
Bubble Hacker
@kit Вы нашли способ скачать ZIP с помощью CLI? Мне не повезло с 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-файла любой лямбды.

Для начала нужно получить URL лямбда-зипа $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Затем вам нужно использовать wget / curl, чтобы скачать zip с URL. $ wget -O myfunction.zip URL_from_step_1

Кроме того, вы можете перечислить все функции в вашем аккаунте AWS, используя

$ aws lambda list-functions

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

Примечание. Вам нужно будет настроить aws-cli перед использованием вышеуказанных команд (или любой команды aws-cli), используя aws configure

Полное руководство здесь

Арджун Немани
источник
aws лямбда-функция возвращает JSON-описание функции. Чтобы получить настоящий zip, вам нужно использовать атрибут Code.Location с curl или каким-либо другим HTTP-клиентом.
jonseymour
2

Вы можете использовать скрипт оболочки, доступный здесь

Самбхаджи Савант
источник
2

Если вы хотите загрузить все функции в данном регионе, вот мой обходной путь. Я создал простой скрипт для загрузки функции. Установите все необходимые пакеты npm и установите CLI AWS в нужном регионе, прежде чем запускать скрипт.

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