有没有办法在AWS Lambda里面执行AWS?它似乎不是预先安装的。(我已经通过Node.js子进程检查了“哪个aws”,但它并不存在。)
发布于 2019-02-07 09:47:25
现在我们可以使用Lambda内部的层。使用aws的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
}发布于 2015-11-04 15:00:53
除非您将它(以及它的所有依赖项)作为部署包的一部分。即使这样,您也必须从python内部调用它,因为Lambda不允许您执行shell命令。即使您到了那里,我也不建议尝试在Lambda函数中进行同步,因为您的执行时间限制在5分钟以内。更重要的是,在很多情况下,额外的分拆时间并不值得,因为你要为每100毫秒的分期付款。
所以你可以,但你可能不该。
编辑: Lambda允许您执行shell命令。
发布于 2017-10-06 18:36:10
aws是一个python包。要使它在AWS Lambda函数上可用,您需要将它与函数zip文件一起打包。
1)使用64位Amazon启动EC2实例;
2)创建python:
mkdir ~/awscli_virtualenv
virtualenv ~/awscli_virtualenv3)激活虚拟主机:
cd ~/awscli_virtualenv/bin
source activate4)安装aws和pyyaml:
pip install awscli
python -m easy_install pyyaml5)更改aws脚本的第一行:
sed -i '1 s/^.*$/\#\!\/usr\/bin\/python/' aws6)禁用虚拟主机:
deactivate( 7)使用在lambda:上运行aws所需的所有文件生成dir。
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)创建一个函数(python或nodejs),该函数将调用aws:。
例如(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) Zip (aws文件和依赖项以及函数):
cd ~
zip -r awscli_lambda.zip awscli_lambdahttps://stackoverflow.com/questions/33513604
复制相似问题