AWS Lampa start_instances 給予待處理回應,但控制台仍然顯示已停止

AWS Lampa start_instances 給予待處理回應,但控制台仍然顯示已停止

我有一個 lambda 函數,我已將其設定為啟動實例:

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"
        }
      }
    }
  ]
}

看起來似乎並沒有真正嘗試開始。我已使用此程式碼來啟動其他實例。我懷疑是不是權限問題,但是沒有報錯。 lambda 函數執行角色具有 EC2fullaccess。

注意,另一個數據點。我嘗試了進一步的程式碼,使用 ssm send 命令在運行後(手動啟動後)發送命令。如果我在運行時嘗試它就會成功。

答案1

您的 EBS 磁碟區使用 KMS 金鑰進行加密,而您的 Lambda 函數正在使用的 IAM 角色無權使用該 KMS 金鑰進行解密。在這種情況下,EC2 執行個體啟動,但隨後立即停止。

所以有兩種可能的解決方案。

解決方案 1:將您的 IAM 角色新增為 KMS 金鑰的「使用者」。這需要您編輯附加到 KMS 金鑰的權限策略,並將您的 IAM 角色新增為金鑰的「使用者」(以加密/解密)。

解決方案 2:新增kms:CreateGrant到您的 Lambda 的 IAM 角色。透過您的 IAM 角色,AWS 將允許 EC2 執行個體啟動。

相關內容