我想允许用户仅在需要时启动 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/