我有一个非常简单的lambda函数,试图使用AWS SDK来调用opsworks.describeInstances。代码在本地执行正常,但是在lambda内部,它会超时而没有错误或反馈。
var AWS = require('aws-sdk');
var opsworks = new AWS.OpsWorks({
apiVersion: 'latest',
region: "us-east-1"
});
exports.handler = function(event, context, callback) {
var params = {
LayerId: 'idoflayer'
};
opsworks.describeInstances(params, function(err, data) {
if (err) {
return callback(err);
}
callback(null, data);
});
};
lambda政策是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"opsworks:CreateDeployment",
"opsworks:DescribeDeployments",
"opsworks:DescribeLayers",
"opsworks:DescribeInstances"
],
"Resource": [
"*"
]
}
]
}
我增加了内存和超时。日志仅显示正在调用函数,没有输出。 lambda函数的监视显示了Invocation错误,但我认为这只是由于超时。我在us-west-2中运行它,但我也尝试在us-east-1中运行它,结果相同。
有什么想法吗?我很乐意使用lambda来监控和管理OpsWorks。
答案 0 :(得分:0)
要解决这个问题,我刚刚删除了自定义VPC设置,因为该功能只是尝试访问AWS Opsworks API。在文档中也注意到了这一点:
启用VPC后,您的Lambda函数将失去默认的互联网访问权限。如果您的功能需要外部Internet访问,请确保您的安全组允许出站连接,并确保您的VPC具有NAT网关。
由于Lambda将SDK捆绑在功能内部并且访问权限由IAM策略决定,因此您仍需要外部访问互联网才能使用API,这有点令人困惑。