我已经按照以下教程按照ID启动/停止实例。
我没有为stopEC2Instances
或startEC2Instance
函数提供VPC信息。
问题:虽然它在停止实例时工作正常,但startEC2Instances
函数不能完成它的工作。
我想知道boto3
在编写教程后是否发生了某种变化?我检查了boto3
API以确定,但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操作,包括AttachVolume
、DetachVolume
、DescribeVolumes
等。
但最终起作用的操作是KMS操作CreateGrant
,其中资源设置为加密卷的密钥的key ID
。
对我来说,我在KMS密钥策略中添加了附加到Lambda函数的角色,作为密钥管理员和密钥用户。