2015-11-04 28 views
20

से कॉल aws-cli क्या AWS Lambda के अंदर aws-cli निष्पादित करने का कोई तरीका है? यह पूर्व-स्थापित प्रतीत नहीं होता है। (मैंने नोड.जेएस बाल प्रक्रिया के माध्यम से "जो aws" के साथ जांच की है, और यह अस्तित्व में नहीं था।)एडब्ल्यूएस लैम्ब्डा

+1

इस पर कोई प्रगति? मैं एक ही प्रश्न की तलाश में हूं, मुझे "aws opsworks रजिस्टर" कमांड का उपयोग करने की आवश्यकता है। यह बेकार है कि वे सभी लैम्ब्डा भाषाओं में यह क्षमता प्रदान नहीं करते हैं – Casper

उत्तर

8

जब तक नहीं आप इसे (और इसके निर्भरता के सभी) के हिस्से के रूप में शामिल हैं आपका परिनियोजन पैकेज। फिर भी आपको इसे अजगर के भीतर से कॉल करना होगा क्योंकि लैम्ब्डा आपको शेल कमांड निष्पादित करने की अनुमति नहीं देता है। n यदि आप वहां जाते हैं, तो मैं लैम्ब्डा फ़ंक्शन में सिंक करने की कोशिश करने की अनुशंसा नहीं करता क्योंकि आप निष्पादन समय के अधिकतम 5 मिनट तक सीमित हैं। इसके शीर्ष पर, अतिरिक्त स्पिन-अप समय कई मामलों में इसके लायक नहीं है क्योंकि आप प्रत्येक 100ms खंड के लिए भुगतान कर रहे हैं।

तो आप कर सकते हैं, लेकिन आपको शायद नहीं करना चाहिए।

संपादित करें: लैम्ब्डा आप खोल आदेशों

+2

aws-cli python को बंडल करने के तरीके पर एक अच्छा अवलोकन के लिए https://alestic.com/2016/11/aws-lambda-awscli/ देखें लैम्ब्डा में उपयोग के लिए पैकेज – Noah

4

आप एडब्ल्यूएस नोड.जेएस एसडीके का उपयोग कर सकते हैं जो इसे इंस्टॉल किए बिना लैम्ब्डा में उपलब्ध होना चाहिए।

var AWS = require('aws-sdk'); 
var lambda = new AWS.Lambda(); 
lambda.invoke({ 
    FunctionName: 'arn:aws:lambda:us-west-2:xxxx:function:FN_NAME', 
    Payload: {}, 
    }, 
    function(err, result) { 
    ... 
}); 

जहां तक ​​मेरा बता सकते हैं, सबसे मिल नहीं तो सब CLI कार्यक्षमता पूर्ण प्रलेखन यहाँ देखें:। http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

+1

धन्यवाद रयान, लेकिन मुझे कुछ फ़ंक्शन चाहिए जो node.js एसडीके में बाहर नहीं निकलें और aws-cli में मौजूद हों, क्योंकि यह aws-cli का उपयोग करना आसान लगता है कुछ मौकों में, जैसे कि बाल्टी में एस 3 सिंक। –

+0

आह, अब मैं देखता हूं। उस स्थिति में ऐसा लगता है कि आपको इसे हर रन पर स्थापित करने की आवश्यकता होगी जो दर्दनाक और अक्षम की तरह लगता है। – Ryan

+0

आप इसे स्थापित नहीं कर सकते हैं, yum और pip install nodejs वातावरण में उपलब्ध नहीं है – halil

1

मुझे लगता है कि आप कार्रवाई से आपके ट्रिगर तर्क बांट देना चाहिए निष्पादित करने के लिए अनुमति देता है। किसी अन्य ec2 पर aws cli के साथ एक कंटेनर रखें और इसे क्रिया में ट्रिगर करने के लिए aws lambda का उपयोग करें।

1

आप जावा या नोडजेस कोड लिख सकते हैं और फिर वहां से एडब्ल्यूएस फ़ंक्शन कॉल कर सकते हैं।

1

aws-cli एक पायथन पैकेज है। इसे एडब्ल्यूएस लैम्ब्डा फ़ंक्शन पर उपलब्ध कराने के लिए आपको इसे अपने फ़ंक्शन ज़िप फ़ाइल से पैक करने की आवश्यकता है।

1) 64-बिट अमेज़ॅन लिनक्स के साथ एक ईसी 2 उदाहरण शुरू करें;

mkdir ~/awscli_virtualenv 
virtualenv ~/awscli_virtualenv 

3 virtualenv) को सक्रिय करें:

2) एक अजगर virtualenv बनाएं

cd ~/awscli_virtualenv/bin 
source activate 

4) स्थापित करें एडब्ल्यूएस-CLI और pyyaml:

pip install awscli 
python -m easy_install pyyaml 
01 virtualenv

sed -i '1 s/^.*$/\#\!\/usr\/bin\/python/' aws 

6) को निष्क्रिय करें:

deactivate 

7) सभी फाइलों को आप की जरूरत के साथ एक निर्देशिका बनाने

5) एडब्ल्यूएस अजगर स्क्रिप्ट की पहली पंक्ति में बदलें lambda पर aws-cli चलाएं:

cd ~ 
mkdir awscli_lambda 
cd awscli_lambda 
cp ~/awscli_virtualenv/bin/aws . 
cp -r ~/awscli_virtualenv/lib/python2.7/dist-packages . 
cp -r ~/awscli_virtualenv/lib64/python2.7/dist-packages . 
इसके बाद के संस्करण कोड के साथ

var Q = require('q'); 
var path = require('path'); 
var spawn = require('child-process-promise').spawn;  

exports.handler = function(event, context) { 

    var folderpath = '/folder/to/sync'; 
    var s3uel = 's3://name-of-your-bucket/path/to/folder'; 

    var libpath = path.join(__dirname, 'lib'); 
    var env = Object.create(process.env); 
    env.LD_LIBRARY_PATH = libpath; 

    var command = path.join(__dirname, 'aws'); 
    var params = ['s3', 'sync', '.', s3url]; 
    var options = { cwd: folderpath }; 

    var spawnp = spawn(command, params, options); 

    spawnp.childProcess.stdout.on('data', function (data) { 
     console.log('[spawn] stdout: ', data.toString()); 
    }); 

    spawnp.childProcess.stderr.on('data', function (data) { 
     console.log('[spawn] stderr: ', data.toString()); 
    }); 

    return spawnp 
    .then(function(result) { 

     if (result['code'] != 0) throw new Error(["aws s3 sync exited with code", result['code']].join('')); 

     return result; 

    }); 

} 

index.js फ़ाइल बनाएँ (:

उदाहरण के लिए (NodeJS): 0

8) एक समारोह (अजगर या NodeJS) कि एडब्ल्यूएस-CLI फोन करेगा बनाएं या अपने कोड) पर ~/awscli_lambda/

9) index.js ज़िप सब कुछ (एडब्ल्यूएस-CLI फ़ाइलों और निर्भरता और अपने समारोह):

cd ~ 
zip -r awscli_lambda.zip awscli_lambda 
संबंधित मुद्दे