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

Mic*_*ael 5 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()
Run Code Online (Sandbox Code Playgroud)

我还添加了以下IAM权限:

    {
        "Effect": "Allow",
        "Action": [
            "ec2:StartInstances"
        ],
        "Resource": "arn:aws:ec2:*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "ec2:DescribeInstances"
        ],
        "Resource": "*"
    }
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行Lambda时,我会超时.

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

任何的想法?

Jef*_*man 3

如果凭证是问题所在,您将不会遇到超时。更有可能的是,您使用的是小内存模型,而 boto 需要大量内存,即使是做简单的事情。尝试使用更大的内存模型或更长的超时来运行。

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