首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从AWS Lambda呼叫aws-cli

从AWS Lambda呼叫aws-cli
EN

Stack Overflow用户
提问于 2015-11-04 04:17:36
回答 8查看 36.1K关注 0票数 58

有没有办法在AWS Lambda里面执行AWS?它似乎不是预先安装的。(我已经通过Node.js子进程检查了“哪个aws”,但它并不存在。)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-02-07 09:47:25

现在我们可以使用Lambda内部的层。使用aws的Bash层可在https://github.com/gkrizek/bash-lambda-layer上使用

代码语言:javascript
复制
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
}
票数 22
EN

Stack Overflow用户

发布于 2015-11-04 15:00:53

除非您将它(以及它的所有依赖项)作为部署包的一部分。即使这样,您也必须从python内部调用它,因为Lambda不允许您执行shell命令。即使您到了那里,我也不建议尝试在Lambda函数中进行同步,因为您的执行时间限制在5分钟以内。更重要的是,在很多情况下,额外的分拆时间并不值得,因为你要为每100毫秒的分期付款。

所以你可以,但你可能不该。

编辑: Lambda允许您执行shell命令。

票数 14
EN

Stack Overflow用户

发布于 2017-10-06 18:36:10

aws是一个python包。要使它在AWS Lambda函数上可用,您需要将它与函数zip文件一起打包。

1)使用64位Amazon启动EC2实例;

2)创建python:

代码语言:javascript
复制
mkdir ~/awscli_virtualenv
virtualenv ~/awscli_virtualenv

3)激活虚拟主机:

代码语言:javascript
复制
cd ~/awscli_virtualenv/bin
source activate

4)安装aws和pyyaml:

代码语言:javascript
复制
pip install awscli
python -m easy_install pyyaml

5)更改aws脚本的第一行:

代码语言:javascript
复制
sed -i '1 s/^.*$/\#\!\/usr\/bin\/python/' aws

6)禁用虚拟主机:

代码语言:javascript
复制
deactivate

( 7)使用在lambda:上运行aws所需的所有文件生成dir。

代码语言:javascript
复制
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):

代码语言:javascript
复制
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文件和依赖项以及函数):

代码语言:javascript
复制
cd ~
zip -r awscli_lambda.zip awscli_lambda
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33513604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档