
인스턴스를 시작하기 위해 설정한 람다 함수가 있습니다.
import boto3
ec2 = boto3.client('ec2')
response = ec2.start_instances(
InstanceIds=['i-xxx']
)
print(response)
응답이 좋아 보이며 중지됨에서 보류 중으로 표시됩니다.
START RequestId: 26c0cf5e-6d70-4701-b0bd-68276b06d30d Version: $LATEST
{
"StartingInstances": [
{
"CurrentState": {"Code": 0, "Name": "pending"},
"InstanceId": "i-xxxxxx",
"PreviousState": {"Code": 80, "Name": "stopped"},
}
],
"ResponseMetadata": {
"RequestId": "fdab5818-0536-457f-a19e-17fea60100f4",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"x-amzn-requestid": "fdab5818-0536-457f-a19e-17fea60100f4",
"content-type": "text/xml;charset=UTF-8",
"content-length": "579",
"date": "Wed, 16 Dec 2020 18:38:57 GMT",
"server": "AmazonEC2",
},
"RetryAttempts": 0,
},
}
END RequestId: f2ed2be9-e2f2-4beb-a69b-4cddee35bef4
REPORT RequestId: f2ed2be9-e2f2-4beb-a69b-4cddee35bef4 Duration: 1381.48 ms Billed Duration: 1382 ms Memory Size: 256 MB Max Memory Used: 97 MB Init Duration: 688.96 ms
그러나 콘솔을 보면 여전히 중지된 것으로 표시되고 시작되지 않습니다.
시작하지 못한 것 같습니다.
"StateReason": {
"Code": "Client.UserInitiatedShutdown",
"Message": "Client.UserInitiatedShutdown: User initiated shutdown",
},
실행 기반 정책:
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "xxxxxxx",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "xxxxxxFunction",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "xxxxxxxx"
}
}
}
]
}
본격적으로 시작해보진 못한 것 같습니다. 이 코드를 사용하여 다른 인스턴스를 시작했습니다. 권한 문제인지 궁금합니다만 오류는 없습니다. 람다 함수 실행 역할에는 EC2fullaccess가 있습니다.
또 다른 데이터 포인트를 참고하세요. ssm send 명령을 사용하여 실행 후(수동으로 시작한 후) 명령을 보내는 추가 코드를 시도했습니다. 실행 중에 시도하면 성공합니다.
답변1
EBS 볼륨은 KMS 키를 사용하여 암호화되며 Lambda 함수가 사용하는 IAM 역할에는 해당 KMS 키를 사용하여 암호를 해독할 권한이 없습니다. 이 경우 EC2 인스턴스가 시작되었다가 즉시 중지됩니다.
따라서 두 가지 가능한 해결책이 있습니다.
해결 방법 1: IAM 역할을 KMS 키의 "사용자"로 추가합니다. 이를 위해서는 KMS 키에 연결된 권한 정책을 편집하고 IAM 역할을 키의 "사용자"로 추가해야 합니다(암호화/해독).
해결 방법 2: kms:CreateGrant
Lambda의 IAM 역할에 추가합니다. IAM 역할에 대해 이를 통해 AWS는 EC2 인스턴스 시작을 허용합니다.