すべてのプロダクト
Search
ドキュメントセンター

CloudOps Orchestration Service:ACS-ECS-RepairImage

最終更新日:Dec 21, 2025

テンプレート名

ACS-ECS-RepairImage - イメージの修復

今すぐ実行

テンプレートの説明

イメージチェックの結果に基づき、イメージをオフラインで修復します。イメージチェックの詳細については、https://www.alibabacloud.com/help/ja/ecs/user-guide/overview-18 をご参照ください。修復プロセスでは、Alibaba Cloud Linux イメージに基づいて Elastic Compute Service (ECS) インスタンスが作成されます。修復対象のイメージのスナップショットが作成されます。スナップショットからディスクが作成され、ECS インスタンスにアタッチされます。データディスクはオフラインで修復され、修復されたデータディスクを使用して新しいイメージが作成されます。修復対象のイメージが Ubuntu 22.04 64 ビットなどのパブリックイメージの場合、修復されたデータディスクを使用して生成されるイメージは、ubuntu_64-bit のようなカスタムイメージになります。

テンプレートタイプ

自動

所有者

Alibaba Cloud

入力パラメーター

パラメーター

説明

タイプ

必須

デフォルト値

制限

zoneId

vSwitch ゾーン

String

はい

repairImageId

修復するイメージの ID。

String

はい

baseImageId

ベースイメージ

String

はい

instanceType

ECS インスタンスのインスタンスタイプ。

String

はい

securityGroupId

セキュリティグループ ID。

String

はい

vSwitchId

vSwitch

String

はい

regionId

リージョン ID。

String

いいえ

{{ ACS::RegionId }}

systemDiskCategory

システムディスクのカテゴリ。

String

いいえ

cloud_essd

repairItems

修復する項目。

List

いいえ

['assist', 'cloudinit', 'virtio', 'nvme', 'fstab', 'grub', 'dhcp', 'growpart']

出力パラメーター

パラメーター

説明

タイプ

imageId

String

テンプレートを実行するために必要な権限ポリシー

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:CreateImage",
                "ecs:CreateSnapshot",
                "ecs:DeleteInstance",
                "ecs:DeleteSnapshot",
                "ecs:DescribeDisks",
                "ecs:DescribeImages",
                "ecs:DescribeInstances",
                "ecs:DescribeInvocationResults",
                "ecs:DescribeInvocations",
                "ecs:DescribeSnapshots",
                "ecs:InvokeCommand",
                "ecs:RebootInstance",
                "ecs:RunCommand",
                "ecs:RunInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

詳細

詳細については、GitHub の ACS-ECS-RepairImage.yml をご参照ください。

テンプレートコンテンツ

FormatVersion: OOS-2019-06-01
Description:
  en: このテンプレートは、イメージチェックの結果に基づいてイメージをオフラインで修復します。イメージチェックの詳細については、https://www.alibabacloud.com/help/ja/ecs/user-guide/overview-18 をご参照ください。修復プロセスでは、Alibaba Cloud Linux イメージから修復インスタンスが作成されます。次に、ご利用のイメージのスナップショットからディスクを作成し、そのディスクを修復インスタンスにアタッチします。データディスクがオフラインで修復された後、修復されたデータディスクから新しいイメージが作成されます。
  name-en: ACS-ECS-RepairImage
  categories:
    - image_manage
Parameters:
  regionId:
    Type: String
    Label:
      en: リージョン ID
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  zoneId:
    Type: String
    Label:
      en: vSwitch ゾーン
    AssociationProperty: ALIYUN::ECS::ZoneId
    AssociationPropertyMetadata:
      RegionId: regionId
  repairImageId:
    Type: String
    Label:
      en: 修復するイメージの ID
    AssociationProperty: ALIYUN::ECS::Image::ImageId
    AssociationPropertyMetadata:
      RegionId: regionId
      SupportedImageOwnerAlias:
        - self
      OSType: linux
  baseImageId:
    Type: String
    Label:
      en: ベースイメージ
    Description:
      en: '<font color=''red''>ベースイメージは、修復インスタンスの作成に使用されます。ターゲットイメージと同じアーキテクチャを持つベースイメージを選択してください。たとえば、修復するカスタムイメージが x86_64 イメージの場合は、aliyun_3_x64 イメージを選択します。</font>'
    AllowedValues:
      - aliyun_3_x64_20G_alibase_20250629.vhd
      - aliyun_3_arm64_20G_alibase_20250629.vhd
  instanceType:
    Label:
      en: インスタンスタイプ
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      RegionId: regionId
      ZoneId: zoneId
  securityGroupId:
    Label:
      en: セキュリティグループ ID
    Type: String
    AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
    AssociationPropertyMetadata:
      RegionId: regionId
  vSwitchId:
    Label:
      en: vSwitch ID
    Type: String
    AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      RegionId: regionId
      ZoneId: zoneId
      Filters:
        - SecurityGroupId: securityGroupId
  systemDiskCategory:
    Label:
      en: システムディスクのカテゴリ
    Type: String
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      RegionId: regionId
      InstanceType: instanceType
    Default: cloud_essd
  repairItems:
    Label:
      en: 修復する項目
    Type: List
    AllowedValues:
      - all
      - assist
      - aegis
      - growpart
      - virtio
      - selinux
      - dhcp
      - grub
      - fstab
      - nvme
      - cloudinit
    Default:
      - assist
      - cloudinit
      - virtio
      - nvme
      - fstab
      - grub
      - dhcp
      - growpart
Tasks:
  - Name: checkImage
    Action: ACS::CheckFor
    Description:
      en: イメージが修復可能かどうかをチェックします。
    Properties:
      Service: ECS
      API: DescribeImages
      PropertySelector: Images.Image[0].DetectionOptions.Items.Item[]? | select(.Name == "SystemImage") | .Value
      DesiredValues: []
      Parameters:
        RegionId: '{{ regionId }}'
        ImageId: '{{ repairImageId }}'
      NotDesiredValues:
        - Invalid
    Outputs:
      architecture:
        Type: String
        ValueSelector: Images.Image[0].Architecture
      snapshotId:
        Type: String
        ValueSelector: Images.Image[0].DiskDeviceMappings.DiskDeviceMapping[0].SnapshotId
      imageName:
        Type: String
        ValueSelector: Images.Image[0].ImageName
      osType:
        Type: String
        ValueSelector: Images.Image[0].OSType
      platform:
        Type: String
        ValueSelector: Images.Image[0].Platform
      bootMode:
        Type: String
        ValueSelector: Images.Image[0].BootMode
  - Name: checkImageArchitecture
    Action: ACS::Choice
    Description:
      en: イメージのアーキテクチャが x86_64 または arm64 であるかを確認します。
    Properties:
      DefaultTask: ACS::END
      Choices:
        - When:
            Fn::Or:
              - Fn::Equals:
                  - x86_64
                  - '{{checkImage.architecture}}'
              - Fn::Equals:
                  - arm64
                  - '{{checkImage.architecture}}'
          NextTask: runInstances
  - Name: runInstances
    Action: ACS::ExecuteAPI
    Description:
      en: ECS インスタンスを作成します。
    Properties:
      Service: ECS
      API: RunInstances
      Parameters:
        RegionId: '{{ regionId }}'
        Amount: 1
        ImageId: '{{ baseImageId }}'
        InstanceType: '{{ instanceType }}'
        InstanceName: image_repair_please_no_delete
        SecurityGroupId: '{{ securityGroupId }}'
        VSwitchId: '{{ vSwitchId }}'
        InternetMaxBandwidthIn: 200
        InternetMaxBandwidthOut: 0
        SystemDiskCategory: '{{ systemDiskCategory }}'
        DataDisk:
          - SnapshotId: '{{ checkImage.snapshotId }}'
            DiskName: image_repair_{{ checkImage.snapshotId }}
            Category: '{{ systemDiskCategory }}'
        InstanceChargeType: PostPaid
    Outputs:
      instanceId:
        Type: String
        ValueSelector: InstanceIdSets.InstanceIdSet[0]
  - Name: untilInstanceReady
    Action: ACS::WaitFor
    Description:
      en: インスタンスが実行中状態になるのを待ちます。
    Properties:
      Service: ECS
      API: DescribeInstances
      PropertySelector: Instances.Instance[0].Status
      DesiredValues:
        - Running
      NotDesiredValues: []
      StopRetryValues: []
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceIds:
          - '{{ runInstances.instanceId }}'
    Retries: 10
    DelayType: Exponential
    Delay: 2
    BackOff: 2
  - Name: checkForCreatedDiskReady
    Action: ACS::CheckFor
    Description:
      en: ディスクが In_use 状態であるかを確認します。
    OnError: stopInstances
    Properties:
      Service: ECS
      API: DescribeDisks
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceId: '{{ runInstances.instanceId }}'
      DesiredValues:
        - In_use
      PropertySelector: Disks.Disk[0].Status
    Outputs:
      diskSN:
        Type: String
        ValueSelector: Disks.Disk[0].SerialNumber
      diskId:
        Type: String
        ValueSelector: Disks.Disk[0].DiskId
  - Name: runCommandOpenselinux
    Action: ACS::ECS::RunCommand
    Description:
      en: インスタンスでコマンドを実行します。
    OnError: stopInstances
    Properties:
      regionId: '{{ regionId }}'
      commandContent: sed -i s/^SELINUX=.*/SELINUX=permissive/g /etc/selinux/config
      commandType: RunShellScript
      instanceId: '{{ runInstances.instanceId }}'
    Outputs:
      invocationOutput:
        Type: String
        ValueSelector: invocationOutput
  - Name: rebootInstance
    Action: ACS::ECS::RebootInstance
    Description:
      en: インスタンスを再起動します。
    OnError: stopInstances
    Properties:
      regionId: '{{ regionId }}'
      instanceId: '{{ runInstances.instanceId }}'
  - Name: runCommand
    Action: ACS::ECS::InvokeCommand
    Description:
      en: インスタンスでコマンドを実行します。
    OnError: stopInstances
    Properties:
      regionId: '{{ regionId }}'
      commandId: ACS-ECS-ImageRepair-for-linux.sh
      parameters:
        Fn::Join:
          - ''
          - - '{"repairitems":'
            - '"'
            - Fn::Join:
                - ' '
                - '{{repairItems}}'
            - '"'
            - ',"disk_serial":"'
            - '{{checkForCreatedDiskReady.diskSN}}'
            - '"}'
      instanceId: '{{ runInstances.instanceId }}'
    Outputs:
      invocationOutput:
        Type: String
        ValueSelector: invocationOutput
  - Name: waitDiskFlush
    Action: ACS::Sleep
    Description:
      en: I/O 操作がディスクに書き込まれるのを待ちます。
    Properties:
      Duration: 1M
  - Name: createSnapshot
    Action: ACS::ECS::CreateSnapshot
    Description:
      en: ディスクのスナップショットを作成します。
    OnError: deleteInstance
    Properties:
      regionId: '{{ regionId }}'
      snapshotName: image_repair_{{ checkForCreatedDiskReady.diskId }}
      diskId: '{{ checkForCreatedDiskReady.diskId }}'
      retentionDays: 1
    Outputs:
      snapshotId:
        Type: String
        ValueSelector: snapshotId
  - Name: createImage
    Action: ACS::ExecuteAPI
    Description:
      en: スナップショットからイメージを作成します。
    OnError: deleteSnapshot
    OnSuccess: deleteInstance
    Properties:
      Service: ECS
      API: CreateImage
      Parameters:
        RegionId: '{{ regionId }}'
        SnapshotId: '{{ createSnapshot.snapshotId }}'
        ImageName:
          Fn::Join:
            - _
            - - repaired
              - '{{ checkImage.imageName }}'
              - Fn::FormatUTCTime:
                  - '{{ACS::CurrentUTCTime}}'
                  - '%Y%m%d%H%M%S'
        DetectionStrategy: Standard
        Platform:
          Fn::Select:
            - '{{ checkImage.platform }}'
            - Aliyun: Aliyun
              Anolis: Anolis
              CentOS: CentOS
              Ubuntu: Ubuntu
              SUSE: SUSE
              Debian: Debian
              OpenSUSE: OpenSUSE
              Red Hat: RedHat
              Kylin: Kylin
              UOS: UOS
              Fedora: Fedora
              CentOS Stream: CentOS Stream
              AlmaLinux: AlmaLinux
              Rocky Linux: Rocky Linux
              Customized Linux: Customized Linux
              Others Linux: Others Linux
        BootMode: '{{ checkImage.bootMode }}'
        Architecture: '{{ checkImage.architecture }}'
    Outputs:
      imageId:
        Type: String
        ValueSelector: ImageId
  - Name: deleteSnapshot
    Action: ACS::ExecuteAPI
    Description:
      en: スナップショットをリリースします。
    OnError: deleteInstance
    Properties:
      Service: ECS
      API: DeleteSnapshot
      Parameters:
        RegionId: '{{ regionId }}'
        SnapshotId: '{{ createSnapshot.snapshotId }}'
        Force: true
  - Name: stopInstances
    Action: ACS::Sleep
    Description:
      en: インスタンス保護の有効期限が切れるのを待ちます。
    Properties:
      Duration: 1M
  - Name: deleteInstance
    Action: ACS::ExecuteAPI
    Description:
      en: ECS インスタンスをリリースします。
    Properties:
      Service: ECS
      API: DeleteInstance
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceId: '{{ runInstances.instanceId }}'
        Force: true
Outputs:
  imageId:
    Type: String
    Value: '{{ createImage.imageId }}'
Metadata:
  ALIYUN::OOS::Interface:
    ParameterGroups:
      - Parameters:
          - regionId
          - repairImageId
          - baseImageId
        Label:
          default:
            en: イメージの選択
      - Parameters:
          - zoneId
          - instanceType
          - securityGroupId
          - vSwitchId
          - systemDiskCategory
        Label:
          default:
            en: インスタンス設定
      - Parameters:
          - repairItems
        Label:
          default:
            en: コマンドの実行