如何對狀態為「失敗」的 Image Builder 生命週期政策,或是已完成但依然有映像可用的政策進行疑難排解?
我的 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 主控台更新您的生命週期政策:
- 開啟 Image Builder console (Image Builder 主控台)。
- 選擇 Lifecycle policies (生命週期政策)。
- 選取您的政策。
- 選擇 Rules (規則),然後選取 Rule conditions (規則條件)。
- 若要讓 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 角色,以在目的地帳戶中執行生命週期動作。
相關內容
已提問 3 年前
已提問 2 年前
