如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?

Posted

技术标签:

【中文标题】如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?【英文标题】:How to run AWS SDK Opsworks Commands in AWS Lambda? 【发布时间】:2017-01-16 22:08:15 【问题描述】:

我有一个非常简单的 lambda 函数,试图使用 AWS 开发工具包调用 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函数的监控显示调用错误,但我认为这只是由于超时。我在 us-west-2 中运行它,但我也尝试在 us-east-1 中运行它,结果相同。

有什么想法吗?我很想使用 lambda 来监控和管理 OpsWorks。

【问题讨论】:

此类超时最常见的原因是将 Lambda 函数放置在没有 NAT 网关的 VPC 中。具有 VPC 访问权限的 Lambda 函数不会获得公共 IP 地址,因此如果您希望 Lambda 函数访问 VPC 之外的任何内容(例如 AWS Opsworks API),则需要拥有 NAT 网关。 感谢 Mark B,是的,我在 VPC 中运行,这是个问题。 【参考方案1】:

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

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

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

【讨论】:

您不需要“外部访问互联网”来使用 AWS API,您需要外部访问不属于您的 VPC 的任何内容。文档中的措辞可能更清楚。请注意,您可以通过 VPC 终端节点仅通过 VPC 访问来访问 S3。希望他们将来会添加更多的 VPC 服务端点。

以上是关于如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS Lambda 在 AWS EMR 上运行 PySpark

如何在 Docker 容器中运行 AWS Lambda 层?

如何从 AWS Lambda 函数运行 ECS 任务?

AWS CDK - 如何在本地运行 API 和 Lambda?

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

如何在 AWS lambda 中部署 selenium 测试套件