跳至內容

如何對狀態為「失敗」的 Image Builder 生命週期政策,或是已完成但依然有映像可用的政策進行疑難排解?

3 分的閱讀內容
0

我的 EC2 Image Builder 生命週期政策狀態為「失敗」。或者,生命週期政策已完成,但映像仍然可用。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。

對狀態為「失敗」的生命週期政策進行疑難排解

如果生命週期政策的狀態為失敗,請執行以下 get-lifecycle-execution AWS CLI 命令來查看原因:

aws imagebuilder get-lifecycle-execution --example-lifecycle-execution-id --region example-region

**注意:**請將 example-lifecycle-execution-id 替換為生命週期政策的執行 ID,並將 example-region 替換為您的 AWS 區域。

範例輸出:

{        "state": {
            "status": "FAILED",
            "reason": "Lifecycle execution failed. Reason: One or more resources failed."
        }

若要允許 Image Builder 執行生命週期政策,您必須使用預設的 EC2ImageBuilderLifecycleExecutionRole 角色。或者,為 Image Builder 生命週期管理建立自訂 AWS Identity and Access Management (IAM) 角色。如果您使用的角色沒有必要的組態,生命週期政策會失敗。

如果您使用 Amazon Elastic Container Registry (Amazon ECR) 容器映像,則必須將 LifecycleExecutionAccess: EC2 Image Builder 標籤新增至 Amazon ECR 儲存庫。否則,您會在 get-lifecycle-execution 命令輸出中收到以下原因:

「ImageBuilder is not authorized to perform: ecr:BatchGetImage on resource」

若要標記 Amazon ECR 容器映像,請參閱從 AWS CLI 標記資源。

對生命週期政策已完成但映像仍可用的問題進行疑難排解

即使生命週期政策完成後,仍可能有 Amazon Machine Image (AMI)、Amazon Elastic Block Store (Amazon EBS) 快照或容器映像可用。

若要疑難排解此問題,請執行以下 get-lifecycle-policy 命令來檢查政策詳細資訊:

aws imagebuilder get-lifecycle-policy --lifecycle-policy-arn example-policy-arn --region example-region

**注意:**請將 example-policy-arn 替換為生命週期政策的 Amazon Resource Name (ARN),並將 example-region 替換為您的區域。

接著,檢查以下組態。

檢查生命週期政策規則條件

您必須設定 Image Builder,使其在生命週期政策完成後刪除資源。否則,Image Builder 會保留映像。

若要檢查生命週期政策會刪除的資源,請檢查 get-lifecycle-policy 命令輸出中的 policyDetails 區段:

"policyDetails": [
            {
                "action": {
                    "type": "DELETE",
                    "includeResources": {
                        "amis": false,
                        "snapshots": false
                    }

檢查 IncludeResources 欄位,找出生命週期政策標記為刪除或保留的 AMI、快照和容器映像。如果這些資源標記為 false,則 Image Builder 會在執行生命週期政策後保留資源。

若要更新 Image Builder 刪除的資源,請更新您的生命週期政策,然後執行以下 update-lifecycle-policy 命令:

aws imagebuilder update-lifecycle-policy --lifecycle-policy-arn example-policy-arn

**注意:**請將 example-policy-arn 替換為已更新生命週期政策的 ARN。

或者,完成以下步驟,使用 Image Builder 主控台更新您的生命週期政策:

  1. 開啟 Image Builder console (Image Builder 主控台)。
  2. 選擇 Lifecycle policies (生命週期政策)。
  3. 選取您的政策。
  4. 選擇 Rules (規則),然後選取 Rule conditions (規則條件)。
  5. 若要讓 Image Builder 在生命週期政策完成後刪除所有資源,請選取 Deregister associated AMIs and delete their snapshots (取消註冊相關聯的 AMI 並刪除其快照) 和 Delete associated ECR container images (刪除相關聯的 ECR 容器映像)。

檢查生命週期政策規則是否保留映像

對於 Delete rules (刪除規則) 生命週期政策,您可以選取 By age (依存留期) 或 By count (依數量),為規則影響的配方保留映像。

如果您選取 By age (依存留期),則會根據映像的存留期保留映像。或者,您可以使用 Retain at least one image per recipe (每個配方至少保留一個映像),只保留最新的可用映像。如果您選取 By Count (依數量),則可以使用 Retain a specific number of images per recipe (每個配方保留指定數量的映像) 來指定要保留的映像數量。

檢查 Image Builder 是否根據存留期和數量篩選條件保留映像。

在以下 get-lifecycle-policy 範例輸出中,Image Builder 只會在 3 年後才刪除映像:

"filter": {
    "type": "AGE",
    "value": 3,
    "unit": "YEARS",
    "retainAtLeast": 1
}

在以下 get-lifecycle-policy 範例輸出中,Image Builder 會保留 4 個映像:

"filter": {
    "type": "COUNT",
    "value": 4
}

如有需要,請更新生命週期政策的「依存留期」或「依數量」篩選條件。

您也可以使用排除規則,根據標籤保留映像。檢查 Image Builder 是否根據您的排除規則保留映像。

在以下 get-lifecycle-policy 範例輸出中,Image Builder 會保留具有 example-tag 標籤的映像:

"exclusionRules": {
    "tagMap": {
        "RetainImageTag": "example-tag"
    }
}

若要透過生命週期政策刪除映像,請從 AMI、快照或容器映像中移除標籤,也就是 RetainImageTag 中列出的標籤。

檢查生命週期政策範圍

Scope tab (範圍索引標籤) 中的配方和標籤必須符合現有資源,生命週期政策才會影響這些資源。

如果標籤和配方不符合任何資源,則您執行 get-lifecycle-execution 命令時會收到以下輸出:

{    "lifecycleExecution": {
        "lifecycleExecutionId": "lce-#",
        "resourcesImpactedSummary": {
            "hasImpactedResources": false
        }

如果 hasImpactedResources 為 false,表示執行時期 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體未識別任何要移除的映像資源。若要解決此問題,請確認生命週期政策範圍包含會影響可用映像資源的配方和標籤。

檢查您是否已正確標記 Image Builder 映像

Image Builder 只會根據 Image Builder 映像資源的標籤執行生命週期政策。您無法將 AMI 或配方標籤用於生命週期政策的範圍。請確認您已使用生命週期政策 Scope tab (範圍索引標籤) 中指定的標籤,正確標記 Image Builder 資源。

若要標記現有映像,請執行以下 tag-resource 命令:

aws imagebuilder tag-resource --resource-arn example-image-resource-arn --tags KeyName1=Value1,KeyName2=Value2 --region example-region

**注意:**請將 example-image-resource-arn 替換為映像 ARN,將 Value1 和 Value2 替換為標籤,並將 example-region 替換為您的區域。您必須使用 AWS CLI 標記 Image Builder 映像資源。

檢查您的跨帳戶組態

若要允許 Image Builder 在另一個 AWS 帳戶中執行生命週期動作,請建立 IAM 角色,以在目的地帳戶中執行生命週期動作。

AWS 官方已更新 1 年前