Nama Template
ACS-ECS-RepairImage – Memperbaiki sebuah citra
Deskripsi Template
Memperbaiki citra secara offline berdasarkan hasil pemeriksaan citra. Untuk informasi selengkapnya mengenai pemeriksaan citra, kunjungi https://www.alibabacloud.com/help/en/ecs/user-guide/overview-18. Selama proses perbaikan, sebuah instance Elastic Compute Service (ECS) dibuat berdasarkan citra Alibaba Cloud Linux. Snapshot dibuat untuk citra yang akan diperbaiki, lalu disk dibuat dari snapshot tersebut dan disambungkan ke instance ECS. Disk data diperbaiki secara offline, kemudian citra baru dibuat menggunakan disk data yang telah diperbaiki. Jika citra yang akan diperbaiki merupakan citra publik seperti Ubuntu 22.04 64-bit, citra yang dihasilkan dari disk data yang telah diperbaiki akan menjadi custom image, misalnya ubuntu_64-bit.
Tipe Template
Otomatis
Pemilik
Alibaba Cloud
Parameter input
Parameter | Deskripsi | Tipe | Diperlukan | Nilai default | Batasan |
zoneId | vSwitch Zone | String | Ya | ||
repairImageId | ID gambar yang akan diperbaiki. | String | Ya | ||
baseImageId | Base image | String | Ya | ||
instanceType | Tipe instance dari instance ECS. | String | Ya | ||
securityGroupId | ID grup keamanan. | String | Ya | ||
vSwitchId | vSwitch | String | Ya | ||
regionId | ID wilayah. | String | Tidak | {{ ACS::RegionId }} | |
systemDiskCategory | Kategori disk sistem. | String | Tidak | cloud_essd | |
repairItems | Item-item yang akan diperbaiki. | List | Tidak | ['assist', 'cloudinit', 'virtio', 'nvme', 'fstab', 'grub', 'dhcp', 'growpart'] |
Parameter Output
Parameter | Deskripsi | Tipe |
imageId | String |
Kebijakan Izin yang Dibutuhkan untuk Menjalankan Template
{
"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"
}
]
}
Detail
Untuk informasi lebih lanjut, lihat ACS-ECS-RepairImage.yml di GitHub.
Konten Template
FormatVersion: OOS-2019-06-01
Description:
zh-cn: This template repairs an image offline based on image check results. For more information about image checks, see https://www.alibabacloud.com/help/zh/ecs/user-guide/overview-18. The repair process first creates a repair instance from an Alibaba Cloud Linux image. It then creates a disk from a snapshot of your image and attaches the disk to the repair instance. After the data disk is repaired offline, a new image is created from the repaired data disk. Limitation: If the source image is a public image, such as Ubuntu 22.04 64-bit, the repaired image is a custom image, such as ubuntu_64-bit.
en: This template repairs an image offline based on image check results. For more information about image checks, see https://www.alibabacloud.com/help/en/ecs/user-guide/overview-18. The repair process creates a repair instance from an Alibaba Cloud Linux image. It then creates a disk from a snapshot of your image and attaches it to the repair instance. After the data disk is repaired offline, a new image is created from the repaired data disk.
name-en: ACS-ECS-RepairImage
name-zh-cn: Repair Image
categories:
- image_manage
Parameters:
regionId:
Type: String
Label:
en: Region ID
zh-cn: Region ID
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
zoneId:
Type: String
Label:
en: vSwitch Zone
zh-cn: vSwitch Zone
AssociationProperty: ALIYUN::ECS::ZoneId
AssociationPropertyMetadata:
RegionId: regionId
repairImageId:
Type: String
Label:
en: ID of Image to Repair
zh-cn: ID of Image to Repair
AssociationProperty: ALIYUN::ECS::Image::ImageId
AssociationPropertyMetadata:
RegionId: regionId
SupportedImageOwnerAlias:
- self
OSType: linux
baseImageId:
Type: String
Label:
en: Base Image
zh-cn: Base Image
Description:
en: '<font color=''red''>The base image is used to create the repair instance. Select a base image that has the same architecture as the target image. For example, if the custom image to repair is an x86_64 image, select an aliyun_3_x64 image.</font>'
zh-cn: <font color='red'>The base image is used to create the repair instance. Select a base image that has the same architecture as the target image. For example, if the custom image to repair is an x86_64 image, select an aliyun_3_x64 image.</font>
AllowedValues:
- aliyun_3_x64_20G_alibase_20250629.vhd
- aliyun_3_arm64_20G_alibase_20250629.vhd
instanceType:
Label:
en: Instance Type
zh-cn: Instance Type
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
RegionId: regionId
ZoneId: zoneId
securityGroupId:
Label:
en: Security Group ID
zh-cn: Security Group ID
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
RegionId: regionId
vSwitchId:
Label:
en: vSwitch ID
zh-cn: vSwitch ID
Type: String
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
RegionId: regionId
ZoneId: zoneId
Filters:
- SecurityGroupId: securityGroupId
systemDiskCategory:
Label:
en: System Disk Category
zh-cn: System Disk Category
Type: String
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
RegionId: regionId
InstanceType: instanceType
Default: cloud_essd
repairItems:
Label:
en: Items to Repair
zh-cn: Items to Repair
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: Checks if the image can be repaired.
zh-cn: Memeriksa apakah citra dapat diperbaiki.
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: Checks if the image architecture is x86_64 or arm64.
zh-cn: Memeriksa apakah arsitektur citra adalah x86_64 atau 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: Creates an ECS instance.
zh-cn: Membuat instance 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: Waits for the instance to enter the Running state.
zh-cn: Menunggu hingga instance memasuki status Running.
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: Checks if the disk is in the In_use state.
zh-cn: Memeriksa apakah disk berada dalam status 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: Runs a command on the instance.
zh-cn: Menjalankan perintah pada instance.
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: Reboots the instance.
zh-cn: Melakukan reboot instance.
OnError: stopInstances
Properties:
regionId: '{{ regionId }}'
instanceId: '{{ runInstances.instanceId }}'
- Name: runCommand
Action: ACS::ECS::InvokeCommand
Description:
en: Runs a command on the instance.
zh-cn: Menjalankan perintah pada instance.
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: Waits for I/O operations to be written to the disk.
zh-cn: Menunggu operasi I/O dituliskan ke disk.
Properties:
Duration: 1M
- Name: createSnapshot
Action: ACS::ECS::CreateSnapshot
Description:
en: Creates a snapshot for the disk.
zh-cn: Membuat snapshot untuk disk.
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: Creates an image from the snapshot.
zh-cn: Membuat citra dari snapshot.
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: Releases the snapshot.
zh-cn: Menghapus snapshot.
OnError: deleteInstance
Properties:
Service: ECS
API: DeleteSnapshot
Parameters:
RegionId: '{{ regionId }}'
SnapshotId: '{{ createSnapshot.snapshotId }}'
Force: true
- Name: stopInstances
Action: ACS::Sleep
Description:
en: Waits for the instance protection to expire.
zh-cn: Menunggu masa perlindungan instance berakhir.
Properties:
Duration: 1M
- Name: deleteInstance
Action: ACS::ExecuteAPI
Description:
en: Releases the ECS instance.
zh-cn: Menghapus instance 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:
zh-cn: Pilih Citra
en: Select Image
- Parameters:
- zoneId
- instanceType
- securityGroupId
- vSwitchId
- systemDiskCategory
Label:
default:
zh-cn: Konfigurasi Instance
en: Instance Configurations
- Parameters:
- repairItems
Label:
default:
zh-cn: Jalankan Perintah
en: Run Command