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

时间:2016-04-26 13:43:53

标签: 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时,我会超时。

BTW 在相同的VPC和相同权限内从EC2运行完全相同的代码,立即返回。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果凭据是问题,那么您将无法获得超时。更可能的是,你正在使用一个小内存模型,而boto需要大量内存,即使是做简单的事情。尝试使用更大的内存模型或更长的超时运行。

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