Télécharger une fonction Lambda déjà téléchargée

156

J'ai créé une fonction lambda dans AWS (Python) en utilisant "upload .zip" J'ai perdu ces fichiers et je dois apporter quelques modifications, existe-t-il un moyen de télécharger ce .zip?

Elheni Mokhles
la source

Réponses:

293

Oui!

Accédez à vos paramètres de fonction lambda et en haut à droite, vous aurez un bouton appelé " Actions". Dans le menu déroulant, sélectionnez " export" et dans la fenêtre contextuelle, cliquez sur "Télécharger le package de déploiement" et la fonction sera téléchargée dans un .zipfichier.

Bubble Hacker
la source
2
Cliquez sur la fonction. Lorsque vous êtes dans la page de gestion des fonctions, cliquez sur actions.
Bubble Hacker
1
@kit Oui! Dans la sortie de la commande, vous devriez y voir codeque vous devriez trouver location. Il s'agit d'une URL prédéfinie que vous pouvez utiliser pour télécharger la fonction. L'URL sera valide pendant 10 minutes.
Bubble Hacker
@kit Avez-vous trouvé un moyen de télécharger le zip à l'aide de la CLI? Je n'ai pas de chance avec wget ou même curl
Vineeth
2
@ Vineeth- Oui, vous pouvez utiliser une commande telle que: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // my-images / dev. --recursive
kit
1
A travaillé pour moi. Juste une note que le fichier que j'ai téléchargé n'avait pas d' .zipextension donc était juste un fichier simple dans Windows. La solution consiste à ajouter manuellement l'extension au nom du fichier après le téléchargement.
The Unknown Dev
27

Mise à jour: Ajout d'un lien vers le script par sambhaji-sawant . Correction des fautes de frappe, réponse améliorée et script basé sur les commentaires!

Vous pouvez utiliser aws-cli pour télécharger le zip de n'importe quel lambda.

Vous devez d'abord obtenir l'URL du zip lambda $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Ensuite, vous devez utiliser wget / curl pour télécharger le zip à partir de l'URL. $ wget -O myfunction.zip URL_from_step_1

De plus, vous pouvez répertorier toutes les fonctions de votre compte AWS en utilisant

$ aws lambda list-functions

J'ai créé un simple script bash pour télécharger en parallèle toutes les fonctions lambda à partir de votre compte AWS. Vous pouvez le voir ici :)

Remarque: vous devrez configurer aws-cli avant d'utiliser les commandes ci-dessus (ou toute commande aws-cli) en utilisant aws configure

Guide complet ici

Arjun Nemani
la source
aws lambda get-function renvoie une description JSON de la fonction. Pour obtenir le zip réel, vous devez utiliser l'attribut Code.Location avec curl ou un autre client HTTP.
jonseymour
2

Vous pouvez utiliser le script shell disponible ici

Sambhaji Sawant
la source
2

Si vous souhaitez télécharger toutes les fonctions de la région donnée, voici ma solution de contournement. J'ai créé un script de nœud simple pour télécharger la fonction. Installez tous les packages npm requis et définissez votre AWS CLI sur la région souhaitée avant d'exécuter le 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
la source
Qu'est-ce que les fonctions font de let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());cette ligne
KTM
c'est la déstructuration d'objet en créant une nouvelle variable getAllFunctionListResult et en lui assignant la propriété Functions de JSON.parse
Mayur Shingare