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运行完全相同的代码,立即返回.
任何的想法?
如果凭证是问题所在,您将不会遇到超时。更有可能的是,您使用的是小内存模型,而 boto 需要大量内存,即使是做简单的事情。尝试使用更大的内存模型或更长的超时来运行。
如果这确实是问题所在,请考虑在类初始化代码中创建 ec2 资源或使用单例模式,以便后续调用可以使用相同的资源。但是,请务必设置函数超时,以便它有足够的时间进行初始化及其正常职责,即使这似乎没有必要。如果您的函数出现错误,则下次运行可能包括类初始化时间。
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |