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?
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?
Réponses:
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 .zip
fichier.
code
que 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.
.zip
extension 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.
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
Vous pouvez utiliser le script shell disponible ici
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()
let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());
cette ligne