amazon-ec2 - 使用 boto3 从 AWS Lambda 启动 EC2 实例时超时

标签 amazon-ec2 boto3 aws-lambda

我想允许用户仅在需要时启动 EC2 实例。

所以我创建了一个 Lambda 函数来做到这一点:

import boto3

def lambda_handler(event, context):
    ec2 = boto3.resource('ec2', region_name='eu-central-1')
    return ec2.instances.filter(InstanceIds=['i-abc123']).start()

我还添加了以下 IAM 权限:
    {
        "Effect": "Allow",
        "Action": [
            "ec2:StartInstances"
        ],
        "Resource": "arn:aws:ec2:*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "ec2:DescribeInstances"
        ],
        "Resource": "*"
    }

问题是当我执行 Lambda 时我超时了。

顺便说一句 在相同 VPC 和相同权限内从 EC2 运行完全相同的代码,立即返回。

任何的想法?

最佳答案

如果凭据是问题,则不会出现超时。更有可能的是,您使用的是小内存模型,而 boto 需要大量内存,即使是做简单的事情也是如此。尝试使用更大的内存模型或更长的超时时间运行。

如果这确实是问题所在,请考虑在类初始化代码中创建 ec2 资源或使用单例模式,以便后续调用可以使用相同的资源。但是,一定要设置函数超时,以便它有足够的时间进行初始化以及它的正常职责,即使这似乎没有必要。如果您的函数出错,则下一次运行可能包括类初始化时间。

关于amazon-ec2 - 使用 boto3 从 AWS Lambda 启动 EC2 实例时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36866769/

相关文章:

amazon-web-services - 在 Amazon ec2 实例上托管 redis 服务器的最佳实践?

hadoop - 无密码 SSH 未建立

ubuntu - 跟踪 aws 中的带宽使用情况

python - 对于 UpdateExpression 语法,在 DynamoDB 中放置/更新项目失败

python - 如何使用 Python 扫描 dynamoDB 表中的特定键?

java - 如何使用 AWS 运行在 localhost 中运行的 Java 应用程序

python-3.x - 使用带有 boto3 的访问点从 S3 存储桶读取和写入

amazon-web-services - 如何获取正在运行的EC2竞价型实例的价格?

node.js - 在本地测试 Elasticache 和无服务器 AWS Lambda

node.js - 如何将 DynamoDB Streams 对象映射到 Javascript 对象?