小编Jed*_*edi的帖子

AWS Lambda - 下载文件,并在同一函数中使用它 - nodejs

我在s3(公共)上有一些证书文件,我将在我的代码中下载并使用这些文件.如果我在本地的nodejs中编写一个等效代码,它运行正常,但在AWS lambda中它只是崩溃了.

var apn = require('apn');
var https = require('https');
var fs = require('fs');

exports.handler = function(event, context) {
  console.log("Running aws apn push message function");
  console.log("==================================");
  console.log("event", event);

  var certPath = event.certPath;
  var keyPath = event.keyPath;
  var certFileName = event.certFileName;
  var keyFileName = event.keyFileName;
  var passphrase = event.passphrase;
  var apnId = event.apnId;
  var content = event.content;


var certfile = fs.createWriteStream(certFileName);
var certrequest = https.get(certPath, function(certresponse) {
  certresponse.pipe(certfile);
  console.log("downloaded the certificate");

  var keyfile = fs.createWriteStream(keyFileName);
  var keyrequest = https.get(keyPath, function(keyresponse) { …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services node.js aws-lambda

18
推荐指数
1
解决办法
1万
查看次数

AWS Lambda RDS连接超时

我正在尝试使用连接到我的RDS数据库的Node.js编写Lambda函数.数据库正在运行,可从我的Elastic Beanstalk环境访问.当我运行该函数时,它返回一个超时错误.

尝试使用完全相同的结果将超时增加到5分钟.

我在经过一些研究后得出的结论是,这可能是一个安全问题,但无法在亚马逊的文档或这个答案中找到解决方案(这是我唯一可以找到的主题).

以下是安全细节:

  • RDS和Lambda都在同一个安全组中.
  • RDS具有所有流量入站和出站规则.
  • Lambda的角色是AmazonVPCFullAccess策略.

我的代码是:

'use strict';
console.log("Loading getContacts function");

var AWS = require('aws-sdk');
var mysql = require('mysql');

exports.handler = (event, context, callback) => {

   var connection = mysql.createConnection({
        host     : '...',
        user     : '...',
        password : '...',
        port     : 3306,
        database: 'ebdb',
        debug    :  false
    });

    connection.connect(function(err) {
      if (err) callback(null, 'error ' +err);
      else callback(null, 'Success');
    });

};
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

"errorMessage": "2017-03-05T05:57:46.851Z 9ae64c49-0168-11e7-b49a-a1e77ae6f56c Task timed out after 10.00 seconds"
Run Code Online (Sandbox Code Playgroud)

rds amazon-web-services node.js aws-lambda

18
推荐指数
3
解决办法
2万
查看次数

bash中使用了什么-ex选项 #!/ bin/bash -ex mean

我们使用下面的脚本作为EC2实例的用户数据.我不明白什么是-ex选项用于?

#!/bin/bash -ex

yum update -y
yum groupinstall -y "Web Server" "MySQL Database" "PHP Support"
service httpd start
chkconfig httpd on
Run Code Online (Sandbox Code Playgroud)

linux bash shell scripting

17
推荐指数
2
解决办法
9553
查看次数

使用Lambda查询DynamoDB什么都不做

我有一个Lambda函数的以下代码:

console.log('Loading function');
var aws = require('aws-sdk');
var ddb = new aws.DynamoDB();

function getUser(userid) {
    var q = ddb.getItem({
        TableName: "Users",
        Key: {
            userID: { S: userid } }
        }, function(err, data) {
            if (err) {
                console.log(err);
                return err;
            }
            else {
                console.log(data);
            }
    });
    console.log(q);
}


exports.handler = function(event, context) {
    console.log('Received event');
    getUser('user1');
    console.log("called DynamoDB");
    context.succeed();
};
Run Code Online (Sandbox Code Playgroud)

我有一个[Users]表定义如下:

{
    "cognitoID": { "S": "token" },
    "email": { "S": "user1@domain.com" },
    "password": { "S": "somepassword" },
    "tos_aggreement": { "BOOL": true …
Run Code Online (Sandbox Code Playgroud)

javascript callback node.js amazon-dynamodb aws-lambda

16
推荐指数
2
解决办法
1万
查看次数

获取错误:AWS API请求后缺少身份验证令牌

我试图通过AWS API Gateway调用Lambda函数.

当我尝试IAM身份验证,API密钥身份验证以及没有身份验证时,我一直收到此错误. 在此输入图像描述

{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)

由于不存在端点,有些人遇到了同样的问题.但是,我直接从Lambda Function AWS控制台获取了我的端点. 在此输入图像描述

我一直在尝试在浏览器和邮递员中打开URL(使用和不使用标头身份验证:x-​​api-key:*****************). 在此输入图像描述

两者都回答了上述错误.

authentication amazon-web-services aws-lambda aws-api-gateway

16
推荐指数
3
解决办法
1万
查看次数

无法将请求主体解析为json:意外字符(\' - \'(代码45))AWS Lambda + API + Postman

我已经尝试了几天来获取从AWS API网关发送到Lambda函数的参数,但我没有成功.

我决定从头开始,所以我跟着他们的演练(http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda)

我已经检查了两次这次演练,我已经按照这些步骤进行了调查.

问题

当我从Postman或Swift测试API时,我收到错误:

{"message":"无法将请求体解析为json:意外字符(\' - \'(代码45))的数值:预期数字(0-9)跟随减号,表示有效数值\n at [来源:[B @ c036d15;第1行,第3列]"}

在postman中,当我将结果视为JSON时,我得到了

坏字符串

Lambda函数

该函数是演练中的基本示例:

console.log('Loading event');

exports.handler = function(event, context) {
  var name = (event.name === undefined ? 'No-Name' : event.name);
  console.log('"Hello":"' + name + '"');
  context.done(null, {"Hello":name}); // SUCCESS with message
};
Run Code Online (Sandbox Code Playgroud)

从Lambda控制台测试并使用测试数据时,我得到结果:

{
    "Hello": "TestUser123"
}
Run Code Online (Sandbox Code Playgroud)

从API网关测试中测试时,结果还是:

 {
    "Hello": "TestUser123"
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到为什么两个测试控制台都允许这项工作,但是当使用POSTMAN进行测试或在Swift脚本中使用它时它不起作用?

编辑1

在postman中,我已将content-type设置为application/json

该脚本返回默认值:

 {
    "Hello": "user"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在POSTMAN中添加参数名称TestUser123时,这是它返回错误的时间.

更新1

好的,所以我将映射模板更改为我在另一个答案中找到的模板:

{ "name": "$input.params('name')" }
Run Code Online (Sandbox Code Playgroud)

结果是:

{ …
Run Code Online (Sandbox Code Playgroud)

json amazon-web-services node.js aws-lambda

15
推荐指数
3
解决办法
2万
查看次数

使用CloudFormation在S3存储桶中创建Lambda通知

我正在尝试在CloudFormation模板中为Lambda函数创建一个S3触发器.S3存储桶已存在,正在创建Lambda函数.

说,这是不可能的修改预先存在的基础设施(S3在这种情况下)与CFT,但是似乎是说,水桶必须预先存在.

  1. 似乎无法使用CFT类型"AWS :: Lambda ..."创建触发器,并且源服务需要创建触发器.就我而言,这是一个s3存储桶的NotificationConfiguration-LambdaConfiguration.这一切都是正确的吗?

  2. 当我尝试将NotificationConfiguration添加到带有CFT的现有S3存储桶时,它表示我不能.有没有办法做到这一点?

amazon-s3 aws-cloudformation aws-lambda

15
推荐指数
1
解决办法
8212
查看次数

Aws lambda描述实例超时

我有这个简单的描述实例函数,我试图通过AWS Lambda在nodejs中运行:

var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';

exports.handler = function(event, context) {
    console.log("\n\nLoading handler\n\n");
    var ec2 = new AWS.EC2();
    ec2.describeInstances(function(err, data) {
        console.log("\nIn describe instances:\n");
      if (err) {
        console.log(err, err.stack); 
        context.done(null, 'Function Finished from error!');  // an error occurred
      }else {   
        console.log("\n\n" + data + "\n\n");
        context.done(null, 'Function Finished with data!');   // successful response 
      }
    });
};
Run Code Online (Sandbox Code Playgroud)

这不会给我带来任何错误,CloudWatch中唯一的输出是:

2016-03-21T17:01:59.085Z xxxxxxx-xx.... Task timed out after 3.00 seconds
Run Code Online (Sandbox Code Playgroud)

任何人都知道可能是什么问题?

timeout amazon-ec2 amazon-web-services node.js aws-lambda

13
推荐指数
2
解决办法
5162
查看次数

在AWS Lambda上将body中的multipart/form-data解析为字符串

我很高兴看到 AWS现在支持AWS Lambda上的multipart/form-data,但现在原始数据在我的lambda函数中,我该如何处理它?

我看到multiparty是Node中用于多部分处理的一个好的多部分库,但是它的构造函数需要一个请求,而不是一个原始字符串.

我在Lambda函数上接收的输入消息(在应用了主体映射模板之后)是:

{ "rawBody": "--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"Content-Type\"\r\n\r\nmultipart/mixed; boundary=\"------------020601070403020003080006\"\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"Date\"\r\n\r\nFri, 26 Apr 2013 11:50:29 -0700\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"From\"\r\n\r\nBob <bob@mg.mydomain.io>\r\n--ce0741b2-93d4-4865-a7d6-20ca51fe2689\r\nContent-Disposition: form-data; name=\"In-Reply-To\"\r... 
Run Code Online (Sandbox Code Playgroud)

等和一些文件数据.

我正在使用的身体映射模板是

{
  "rawBody" : "$util.escapeJavaScript($input.body).replaceAll("\\'", "'")"
}
Run Code Online (Sandbox Code Playgroud)

如何解析这些数据以查看发布到我的Lambda函数的字段和文件?

amazon-web-services node.js aws-lambda

12
推荐指数
2
解决办法
7871
查看次数

如何通过CloudFormation授予API Gateway调用lambda函数的权限?

我一直在网上寻找答案.

基本上,我们使用Swagger来启动一个API,它非常棒并且运行良好,但有一件事不起作用......当我们调用一个端点时,我们得到一个500错误(它不是500错误,我们提供的是AWS的一个.该错误指出"由于配置错误导致执行失败:对Lambda函数的权限无效"(https://youtu.be/H4LM_jw5zzs < - 这是来自其他用户的视频,我收到的错误).

我已经走了很多路,并找到了答案......它涉及使用AWS CLI,看起来有点像这样:

aws lambda add-permission \
--function-name FUNCTION_NAME \
--statement-id STATEMENT_ID \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/METHOD/ENDPOINT"
Run Code Online (Sandbox Code Playgroud)

这很棒,但我们正在使用CloudFormation来启动所有内容,我们希望这是自动化的.有没有更简单的方法来解决这个问题?CloudFormation中是否有某些内容可以为我们提供所需的资源政策?

我正在尝试这个问题,但是我今天已经开始工作了几个小时,这对我们的API版本来说有点阻碍,所以任何帮助都会非常感激.:)

amazon-web-services aws-cloudformation aws-lambda aws-api-gateway

12
推荐指数
3
解决办法
1万
查看次数