Baixe uma função Lambda já carregada

156

Criei uma função lambda na AWS (Python) usando "upload .zip". Perdi esses arquivos e preciso fazer algumas alterações. Existe alguma maneira de fazer o download desse .zip?

Elheni Mokhles
fonte

Respostas:

291

Sim!

Navegue até as configurações da função lambda e, no canto superior direito, você terá um botão chamado " Actions". No menu suspenso, selecione " export" e, no pop-up, clique em "Baixar pacote de implantação" e a função será baixada em um .ziparquivo.

Bubble Hacker
fonte
2
Clique na função Quando você estiver na página de gerenciamento de funções, clique em ações.
Bolha Hacker
1
@kit Sim! Na saída do comando, você deve ver codelá, você deve encontrar location. Este é um URL predefinido que você pode usar para baixar a função. O URL será válido por 10 minutos.
Bubble Hacker
@kit Você encontrou uma maneira de baixar o zip usando a CLI? Eu não tenho sorte com wget ou mesmo cacho
Vineeth
2
@ Vineeth- Sim, você pode usar comandos como: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --recursive
kit
1
Trabalhou para mim. Apenas uma observação de que o arquivo que baixei não tinha uma .zipextensão, portanto era apenas um arquivo simples no Windows. A solução é adicionar manualmente a extensão ao nome do arquivo após o download.
O Desconhecido Dev
27

Atualização: link adicionado ao script por sambhaji-sawant . Erros de digitação corrigidos, resposta e script aprimorados com base em comentários!

Você pode usar o aws-cli para baixar o zip de qualquer lambda.

Primeiro, você precisa obter o URL para o zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Então você precisa usar o wget / curl para baixar o zip do URL. $ wget -O myfunction.zip URL_from_step_1

Além disso, você pode listar todas as funções em sua conta da AWS usando

$ aws lambda list-functions

Criei um script bash simples para fazer o download paralelo de todas as funções lambda da sua conta da AWS. Você pode vê-lo aqui :)

Nota: Você precisará configurar o aws-cli antes de usar os comandos acima (ou qualquer comando aws-cli) usando aws configure

Guia completo aqui

Arjun Nemani
fonte
aws lambda get-function retorna uma descrição JSON da função. Para obter o zip real, você precisa usar o atributo Code.Location com curl ou algum outro cliente HTTP.
jonseymour
2

Você pode usar o shell script disponível aqui

Sambhaji Sawant
fonte
2

Se você deseja fazer o download de todas as funções na região especificada, aqui está minha solução alternativa. Eu criei um script de nó simples para baixar a função. Instale todos os pacotes npm necessários e defina sua CLI da AWS para a região desejada antes de executar o script.

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
fonte
O que as funções fazem let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());nesta linha
KTM
é a destruição do objeto criando a nova variável getAllFunctionListResult e atribuindo a propriedade Functions do JSON.parse a ele
Mayur Shingare