Önceden yüklenmiş bir Lambda işlevini indirin


156

AWS'de (Python) "upload .zip" dosyasını kullanarak bir lambda işlevi oluşturdum. Bu dosyaları kaybettim ve bazı değişiklikler yapmam gerekiyor, bu .zip'i indirmenin herhangi bir yolu var mı?

Yanıtlar:


292

Evet!

Lambda işlevi ayarlarınıza gidin ve sağ üst köşede " Actions" adında bir düğme bulunur . Açılır menüden " export" öğesini seçin ve açılır pencerede "Dağıtım paketini indir" i tıklayın, işlev bir .zipdosyaya yüklenecektir .


2
İşlevi tıklayın. İşlev yönetimi sayfasındayken eylemleri tıklatın.
Bubble Hacker

1
@kit Evet! Komutun çıktısında codeorada görmelisiniz location. Bu, işlevi indirmek için kullanabileceğiniz önceden belirlenmiş bir URL'dir. URL 10 dakika boyunca geçerli olacak.
Bubble Hacker

@kit Zip'i CLI kullanarak indirmenin bir yolunu buldunuz mu? Wget ve hatta curl ile hiç şansım yok
Vineeth

2
@ Vineeth- Evet, aşağıdaki gibi komutları kullanabilirsiniz: AWS_ACCESS_KEY_ID = XXX AWS_SECRET_ACCESS_KEY = XXX aws s3 cp s3: // resimlerim / dev. --recursive
kit

1
Benim için çalıştı. İndirdiğim dosyanın bir .zipuzantısı olmadığını, bu nedenle Windows'ta sadece düz bir dosya olduğunu unutmayın. Çözüm, indirdikten sonra uzantıyı manuel olarak dosya adına eklemektir.
Bilinmeyen Dev

27

Güncelleme: sambhaji-sawant tarafından script'e bağlantı eklendi . Düzeltmeler yazım hataları, yorumlara dayalı geliştirilmiş cevap ve komut dosyası!

Herhangi bir lambda'nın zip dosyasını indirmek için aws-cli kullanabilirsiniz .

Öncelikle lambda zip'in URL'sini almanız gerekiyor $ aws lambda get-function --function-name $functionName --query 'Code.Location'

Ardından, zip'i URL'den indirmek için wget / curl kullanmanız gerekir. $ wget -O myfunction.zip URL_from_step_1

Ayrıca, AWS hesabınızdaki tüm işlevleri aşağıdakileri kullanarak listeleyebilirsiniz:

$ aws lambda list-functions

AWS hesabınızdan tüm lambda işlevlerini paralel olarak indirmek için basit bir bash betiği yaptım. Burada görebilirsiniz :)

Not: Yukarıdaki komutları (veya herhangi bir aws-cli komutunu) kullanmadan önce aws-cli ayarlamanız gerekir. aws configure

Tam rehber burada


aws lambda get-function, işlevin bir JSON açıklamasını döndürür. Gerçek zip'i almak için Code.Location özniteliğini curl veya başka bir HTTP istemcisi ile kullanmanız gerekir.
jonseymour


2

Eğer verilen bölgedeki tüm fonksiyonları indirmek istiyorsanız benim geçici çözümüm. Ben fonksiyonu indirmek için basit bir düğüm komut dosyası oluşturduk. Gerekli tüm npm paketlerini kurun ve komut dosyasını çalıştırmadan önce AWS CLI'nızı istediğiniz bölgeye ayarlayın.

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()

Ne yapmak Fonksiyonlar yapmak let { Functions: getAllFunctionListResult } = JSON.parse(await getAllFunctionList());bu satırda
KTM

nesne değişkeni getAllFunctionListResult yeni değişken oluşturma ve JSON.parse işlevlerini atama
Mayur Shingare
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.