aWS Lambda内でaws-cliを実行する方法はありますか?プリインストールされていないようです。 (Node.jsの子プロセスを介して「which aws」で確認しましたが、存在しませんでした。)
これで、Lambda内でレイヤーを使用できます。 aws-cliを使用したBashレイヤーは https://github.com/gkrizek/bash-lambda-layer で入手できます
handler () {
set -e
# Event Data is sent as the first parameter
EVENT_DATA=$1
# This is the Event Data
echo $EVENT_DATA
# Example of command usage
EVENT_JSON=$(echo $EVENT_DATA | jq .)
# Example of AWS command that's output will show up in CloudWatch Logs
aws s3 ls
# This is the return value because it's being sent to stderr (>&2)
echo "{\"success\": true}" >&2
}
展開パッケージの一部として(およびそのすべての依存関係)を含めない限り。それでも、Lambdaではシェルコマンドを実行できないため、python内から呼び出す必要があります。そこに到達しても、Lambdaで同期を実行することはお勧めしません。最大5分の実行時間に制限されているため、機能します。さらに、多くの場合、追加のスピンアップ時間は、100ミリ秒のチャンクごとに支払うため、価値がありません。
canですが、おそらくそうすべきではありません。
編集:Lambda doesシェルコマンドの実行を許可します
aws-cliはpythonパッケージです。AWSLambda関数で使用できるようにするには、関数のZipファイルでパックする必要があります。
1)64ビットAmazon LinuxでEC2インスタンスを起動します;
2)python virtualenv:を作成
mkdir ~/awscli_virtualenv
virtualenv ~/awscli_virtualenv
)virtualenvをアクティブ化:
cd ~/awscli_virtualenv/bin
source activate
4)aws-cliとpyyamlをインストールします:
pip install awscli
python -m easy_install pyyaml
5)awsの最初の行を変更python script:
sed -i '1 s/^.*$/\#\!\/usr\/bin\/python/' aws
6)virtualenvの非アクティブ化:
deactivate
7)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 .
8)aws-cli:を呼び出す関数(pythonまたはnodejs)を作成します
例(nodejs):
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;
});
}
〜/ awscli_lambda/index.jsにindex.jsファイルを(上記のコードまたはコードを使用して)作成します
9)すべてを圧縮します(aws-cliファイルと依存関係、および関数):
cd ~
Zip -r awscli_lambda.Zip awscli_lambda
Lambdaでインストールせずに利用できるはずのAWS node.js SDKを使用できます。
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