如何在AWS Lambda中运行AWS开发工具包Opsworks命令?

时间:2016-09-08 20:52:20

标签: amazon-web-services aws-sdk aws-lambda aws-opsworks

我有一个非常简单的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。

1 个答案:

答案 0 :(得分:0)

要解决这个问题,我刚刚删除了自定义VPC设置,因为该功能只是尝试访问AWS Opsworks API。在文档中也注意到了这一点:

  

启用VPC后,您的Lambda函数将失去默认的互联网访问权限。如果您的功能需要外部Internet访问,请确保您的安全组允许出站连接,并确保您的VPC具有NAT网关。

由于Lambda将SDK捆绑在功能内部并且访问权限由IAM策略决定,因此您仍需要外部访问互联网才能使用API​​,这有点令人困惑。