我想允许用户仅在需要时启动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运行完全相同的代码,立即返回。
有什么想法吗?
答案 0 :(得分:3)
如果凭据是问题,那么您将无法获得超时。更可能的是,你正在使用一个小内存模型,而boto需要大量内存,即使是做简单的事情。尝试使用更大的内存模型或更长的超时运行。
如果这确实是问题,请考虑在类初始化代码中创建ec2资源或使用单例模式,以便后续调用可以使用相同的资源。但是,请确保设置函数超时,以便它有足够的时间进行初始化以及正常的职责,即使这似乎没有必要。如果您的函数出错,下一次运行可能包括类初始化时间。