我在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) 我正在尝试使用连接到我的RDS数据库的Node.js编写Lambda函数.数据库正在运行,可从我的Elastic Beanstalk环境访问.当我运行该函数时,它返回一个超时错误.
尝试使用完全相同的结果将超时增加到5分钟.
我在经过一些研究后得出的结论是,这可能是一个安全问题,但无法在亚马逊的文档或这个答案中找到解决方案(这是我唯一可以找到的主题).
以下是安全细节:
我的代码是:
'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) 我们使用下面的脚本作为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) 我有一个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) 我试图通过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
我已经尝试了几天来获取从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时,我得到了
坏字符串
该函数是演练中的基本示例:
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脚本中使用它时它不起作用?
在postman中,我已将content-type设置为application/json
该脚本返回默认值:
{
"Hello": "user"
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在POSTMAN中添加参数名称和TestUser123时,这是它返回错误的时间.
好的,所以我将映射模板更改为我在另一个答案中找到的模板:
{ "name": "$input.params('name')" }
Run Code Online (Sandbox Code Playgroud)
结果是:
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试在CloudFormation模板中为Lambda函数创建一个S3触发器.S3存储桶已存在,正在创建Lambda函数.
这说,这是不可能的修改预先存在的基础设施(S3在这种情况下)与CFT,但是这似乎是说,水桶必须预先存在.
似乎无法使用CFT类型"AWS :: Lambda ..."创建触发器,并且源服务需要创建触发器.就我而言,这是一个s3存储桶的NotificationConfiguration-LambdaConfiguration.这一切都是正确的吗?
当我尝试将NotificationConfiguration添加到带有CFT的现有S3存储桶时,它表示我不能.有没有办法做到这一点?
我有这个简单的描述实例函数,我试图通过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)
任何人都知道可能是什么问题?
我很高兴看到 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函数的字段和文件?
我一直在网上寻找答案.
基本上,我们使用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
aws-lambda ×9
node.js ×6
amazon-s3 ×2
amazon-ec2 ×1
bash ×1
callback ×1
javascript ×1
json ×1
linux ×1
rds ×1
scripting ×1
shell ×1
timeout ×1