跳至内容

如何对失败的 Image Builder 生命周期策略或策略已完成但仍有可用映像的问题进行故障排除?

3 分钟阅读
0

我的 EC2 Image Builder 生命周期策略的状态为 FAILED。或者,生命周期策略已完成,但映像仍然可用。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

对状态为 FAILED 的生命周期策略进行故障排除

如果生命周期策略的状态为 FAILED,则运行以下 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 为资源添加标签

排查生命周期策略已完成但映像仍然可用的问题

即使生命周期策略完成,仍可能存在亚马逊机器映像 (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 资源名称 (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 控制台
  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 是否根据 AGECOUNT 筛选条件来保留映像。

在以下 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(范围)选项卡中的配方和标签必须与现有资源相匹配,生命周期策略才能对其产生影响。

如果标签和配方与任何资源都不匹配,则在运行 get-lifecycle-execution 命令时会收到以下输出:

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

如果hasImpactedResourcesfalse,则表示运行时 Amazon Elastic Compute Cloud (Amazon EC2) 实例未识别出任何要移除的映像资源。要解决此问题,请确保生命周期策略范围包含会影响可用映像资源的配方和标签。

检查您是否为 Image Builder 映像正确添加了标签

Image Builder 仅根据 Image Builder 映像资源的标签运行生命周期策略。您不能使用 AMI 或配方标签作为生命周期策略的范围。确保使用您在生命周期策略的范围选项卡中指定的标签为 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,将 Value1Value2 替换为标签,将 example-region 替换为您的区域。您必须使用 AWS CLI 为 Image Builder 映像资源添加标签。

检查您的跨账户配置

要允许 Image Builder 在另一个 AWS 账户中执行生命周期操作,请创建 IAM 角色以在目标账户中执行生命周期操作

AWS 官方已更新 1 年前