无法通过 lambda 在 VPC 中启动 EC2 实例



我已经按照以下教程按照ID启动/停止实例。

我没有为stopEC2InstancesstartEC2Instance函数提供VPC信息。

问题:虽然它在停止实例时工作正常,但startEC2Instances函数不能完成它的工作。

我想知道boto3在编写教程后是否发生了某种变化?我检查了boto3API以确定,但start_instances仍然是相同的函数。

除了上面链接的文章之外,我没有更改任何代码。

更新

最近成功运行startEC2Instances函数的CloudWatch日志(它没有按预期工作,仍然没有启动实例(

START RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800 Version: $LATEST
started your instances: REDACTED
END RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800
REPORT RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800  Duration: 1055.49 ms    Billed Duration: 1100 ms Memory Size: 512 MB    Max Memory Used: 56 MB  
START RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724 Version: $LATEST
started your instances: REDACTED
END RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724
REPORT RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724  Duration: 420.79 ms Billed Duration: 500 ms Memory Size: 512 MB Max Memory Used: 56 MB  

UPDATE 2我正在复制上面文档中的策略文档和代码,我没有做任何更改。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}

startEC2Instance代码:

import boto3
# Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g.; 'us-east-1'
region = 'us-east-1'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
instances = ['REDACTED']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)

问题似乎是连接到我的实例的加密卷。此卷被设置为在启动时启动,因此导致了问题。我尝试使用不同的IAM EBS操作,包括AttachVolumeDetachVolumeDescribeVolumes等。

但最终起作用的操作是KMS操作CreateGrant,其中资源设置为加密卷的密钥的key ID

对我来说,我在KMS密钥策略中添加了附加到Lambda函数的角色,作为密钥管理员和密钥用户。

最新更新