Nama Template
ACS-ECS-RescueUnreachableInstance-Linux
Deskripsi Template
Ketika menggunakan instance Elastic Compute Service (ECS), mungkin saja instance tersebut menjadi tidak tersedia karena beberapa alasan. Salah satu penyebab umum adalah kerusakan pada disk sistem, yang dapat terjadi jika instance dihentikan atau dimulai ulang secara paksa, atau mengalami kegagalan mendadak. Penyebab lainnya meliputi kegagalan memperbarui file /etc/fstab setelah melepas disk data dari instance, atau hilang atau rusaknya file /etc/fstab atau initrd. Meskipun instance tampak berstatus Running di konsol ECS, Anda mungkin menghadapi masalah seperti: kegagalan mengakses aplikasi pada instance, pemutusan jaringan dari instance, dan ketidakmampuan untuk terhubung ke instance menggunakan Workbench atau SSH. Jika Anda berhasil membuat koneksi Virtual Network Computing (VNC) ke instance di konsol ECS, Anda mungkin melihat pesan yang menunjukkan kegagalan startup sistem. Dalam situasi ini, Anda dapat menjalankan template ini untuk memperbaiki instance yang rusak. Proses perbaikan melibatkan pemasangan disk sistem dari instance yang rusak ke instance sementara. Skrip perbaikan kemudian dijalankan pada instance sementara. Terakhir, disk sistem yang telah diperbaiki dipasang kembali ke instance asli.
Tipe Template
Otomatis
Pemilik
Alibaba Cloud
Parameter Masukan
Parameter | Deskripsi | Tipe | Diperlukan | Nilai Default | Batasan |
unreachableInstanceId | ID instance ECS yang akan diperbaiki. | String | Ya | ||
credentialType | Tipe kredensial yang digunakan untuk masuk ke instance ECS. | String | Ya | ||
credentialValue | Kredensial yang digunakan untuk masuk ke instance ECS. | String | Ya | ||
imagePrefix | Awalan nama gambar yang digunakan untuk mencadangkan data instance ECS. | String | Tidak | OOSRescueBackup- | |
helperInstanceTypes | Tipe instance yang tersedia untuk instance ECS sementara yang digunakan untuk memperbaiki instance ECS yang rusak. | List | Tidak | ['ecs.t6-c4m1.large', 'ecs.t5-lc1m1.small', 'ecs.t5-lc1m2.small', 'ecs.s6-c1m1.small', 'ecs.s6-c1m2.small', 'ecs.n1.small', 'ecs.mn4.small', 'ecs.e3.small', 'ecs.e4.small', 'ecs.n2.small', 'ecs.n4.small', 'ecs.t5-lc1m2.large', 'ecs.c6.large', 'ecs.sn2ne.large'] | |
OOSAssumeRole | Peran Resource Access Management (RAM) yang diasumsikan oleh CloudOps Orchestration Service (OOS). | String | Tidak | "" |
Parameter Keluaran
Parameter | Deskripsi | Tipe |
diskId | String | |
imageId | String | |
rtCommandOutput | String | |
finalHelperInstanceType | String |
Kebijakan Izin yang Diperlukan untuk Menjalankan Template
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:AddTags",
"ecs:AttachDisk",
"ecs:CreateImage",
"ecs:DescribeAvailableResource",
"ecs:DescribeDisks",
"ecs:DescribeImages",
"ecs:DescribeInstances",
"ecs:DescribeInvocationResults",
"ecs:DescribeInvocations",
"ecs:DetachDisk",
"ecs:RunCommand",
"ecs:StartInstance",
"ecs:StopInstance"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ros:CreateStack",
"ros:DeleteStack",
"ros:GetStack"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Referensi
Untuk informasi lebih lanjut, lihat ACS-ECS-RescueUnreachableInstance-Linux.yml di GitHub.
Konten Template
FormatVersion: OOS-2019-06-01
Description:
en: 'Ketika menggunakan instance ECS, beberapa situasi dapat menyebabkan korupsi disk sistem, seperti instance yang dipaksa berhenti atau dimulai ulang, atau downtime mendadak, kegagalan memperbarui /etc/fstab ketika disk dilepas, atau bahkan hilang atau rusaknya file /etc/fstab atau initrd. Ketika instance tidak dapat diakses, status instance yang ditampilkan di konsol instance ECS mungkin masih Running, tetapi aplikasi di dalam instance tidak dapat diakses, jaringan di dalam instance tidak dapat dijangkau, dan koneksi tidak dapat dibuat melalui workbench atau SSH. Jika Anda dapat terhubung ke instance dari konsol dengan VNC, Anda mungkin akan melihat halaman yang menunjukkan kegagalan startup sistem. Pada titik ini, Anda dapat mempertimbangkan untuk menjalankan template ini untuk memperbaiki instance yang rusak. Proses perbaikan adalah bahwa disk sistem dari instance yang rusak akan dipasang ke instance sementara yang baru dibuat, lalu skrip perbaikan akan dijalankan di instance sementara, dan akhirnya disk sistem yang diperbaiki akan dipasang kembali ke instance asli.'
zh-cn: deskripsi dalam bahasa Cina
name-en: ACS-ECS-RescueUnreachableInstance-Linux
name-zh-cn: deskripsi dalam bahasa Cina
categories:
- diagnose
Parameters:
unreachableInstanceId:
Label:
en: UnreachableInstanceId
zh-cn: deskripsi dalam bahasa Cina
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceId
AssociationPropertyMetadata:
RegionId: '{{ ACS::RegionId }}'
credentialType:
Description:
en: 'Tipe Kredensial untuk instance ECS yang tidak dapat dijangkau setelah diselamatkan, baik KeyPairName maupun tipe Password dapat dipilih.'
zh-cn: deskripsi dalam bahasa Cina
Label:
en: CredentialType
zh-cn: deskripsi dalam bahasa Cina
Type: String
AllowedValues:
- KeyPairName
- Password
credentialValue:
Description:
en: 'Nilai kredensial untuk instance ECS yang tidak dapat dijangkau setelah diselamatkan, nilai dari KeyPairName atau Password.'
zh-cn: deskripsi dalam bahasa Cina
Type: String
Label:
en: Credential
zh-cn: deskripsi dalam bahasa Cina
imagePrefix:
Label:
en: ImagePrefix
zh-cn: deskripsi dalam bahasa Cina
Type: String
Default: OOSRescueBackup-
helperInstanceTypes:
Label:
en: HelperInstanceTypes
zh-cn: deskripsi dalam bahasa Cina
Type: List
Default:
- ecs.t6-c4m1.large
- ecs.t5-lc1m1.small
- ecs.t5-lc1m2.small
- ecs.s6-c1m1.small
- ecs.s6-c1m2.small
- ecs.n1.small
- ecs.mn4.small
- ecs.e3.small
- ecs.e4.small
- ecs.n2.small
- ecs.n4.small
- ecs.t5-lc1m2.large
- ecs.c6.large
- ecs.sn2ne.large
OOSAssumeRole:
Label:
en: OOSAssumeRole
zh-cn: deskripsi dalam bahasa Cina
Type: String
Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: checkInstanceReady
Action: 'ACS::CheckFor'
Description:
en: Memeriksa apakah instance ECS adalah os linux
zh-cn: deskripsi dalam bahasa Cina
OnError: ACS::END
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ unreachableInstanceId }}'
DesiredValues:
- linux
PropertySelector: 'Instances.Instance[].OSType'
Outputs:
status:
Type: String
ValueSelector: 'Instances.Instance[].Status'
vSwitchId:
Type: String
ValueSelector: 'Instances.Instance[].VpcAttributes.VSwitchId'
zoneId:
Type: String
ValueSelector: 'Instances.Instance[].ZoneId'
oSNameEn:
Type: String
ValueSelector: 'Instances.Instance[].OSNameEn'
oSName:
Type: String
ValueSelector: 'Instances.Instance[].OSName'
imageID:
Type: String
ValueSelector: 'Instances.Instance[].ImageId'
- Name: querySystemDisks
Action: 'ACS::CheckFor'
Description:
en: Memeriksa disk sistem dari instance ECS
zh-cn: deskripsi dalam bahasa Cina
OnError: ACS::END
Properties:
Service: ECS
API: DescribeDisks
Parameters:
InstanceId: '{{ unreachableInstanceId }}'
DiskType: system
DesiredValues:
- 'true'
PropertySelector: '.Disks.Disk[] as $disk|$disk.Category|startswith("cloud") and ($disk.Encrypted|not)|tostring'
Outputs:
diskId:
Type: String
ValueSelector: 'Disks.Disk[].DiskId'
category:
Type: String
ValueSelector: 'Disks.Disk[].Category'
encrypted:
Type: String
ValueSelector: 'Disks.Disk[].Encrypted'
- Name: whetherStopInstance
Action: 'ACS::Choice'
Description:
en: Pilih tugas berikutnya berdasarkan status Instance
zh-cn: deskripsi dalam bahasa Cina
Properties:
DefaultTask: stopInstance
Choices:
- When:
'Fn::Equals':
- Stopped
- '{{ checkInstanceReady.status }}'
NextTask: checkAvailableInstanceTypesExist
- Name: stopInstance
Action: 'ACS::ExecuteAPI'
Description:
en: Menghentikan instance ECS
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: StopInstance
Parameters:
InstanceId: '{{ unreachableInstanceId }}'
- Name: Sleep3Minutes
Description:
en: Tunggu instance Berhenti
zh-cn: deskripsi dalam bahasa Cina
Action: 'ACS::Sleep'
Properties:
Duration: PT3M
- Name: queryUnreachableInstanceStatus
Action: 'ACS::ExecuteAPI'
Description:
en: Meminta status instance yang tidak dapat dijangkau
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ unreachableInstanceId }}'
Outputs:
status:
Type: String
ValueSelector: 'Instances.Instance[].Status'
- Name: whetherForceStopInstance
Action: 'ACS::Choice'
Description:
en: Pilih tugas berikutnya berdasarkan status Instance
zh-cn: deskripsi dalam bahasa Cina
Properties:
DefaultTask: forceStopInstance
Choices:
- When:
'Fn::Equals':
- Stopped
- '{{ queryUnreachableInstanceStatus.status }}'
NextTask: checkAvailableInstanceTypesExist
- Name: forceStopInstance
Action: 'ACS::ExecuteAPI'
Description:
en: Menghentikan instance ECS secara paksa
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: StopInstance
Parameters:
InstanceId: '{{ unreachableInstanceId }}'
ForceStop: 'true'
- Name: untilStopUnreachableInstanceSuccess
Action: 'ACS::WaitFor'
Description:
en: Menunggu instance ECS masuk ke status berhenti
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ unreachableInstanceId }}'
DesiredValues:
- Stopped
PropertySelector: 'Instances.Instance[].Status'
- Name: checkAvailableInstanceTypesExist
Action: 'ACS::Template'
OnError: ACS::END
Description:
en: Meminta tipe instance yang tersedia saat ini untuk membuat instance pembantu di zona instance yang tidak dapat dijangkau
zh-cn: deskripsi dalam bahasa Cina
Properties:
TemplateName: 'ACS::ECS::CheckAvailableInstanceTypes'
Parameters:
zoneId: '{{ checkInstanceReady.zoneId }}'
instanceTypes: '{{ helperInstanceTypes }}'
Outputs:
availableInstanceType:
Type: String
ValueSelector: '.availableInstanceTypes[0]'
- Name: createImage
Action: 'ACS::ExecuteAPI'
Description:
en: Membuat gambar kustom
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: CreateImage
Parameters:
ImageName: '{{imagePrefix}}{{ ACS::ExecutionId }}'
InstanceId: '{{ unreachableInstanceId }}'
DetectionStrategy: Standard
Tag:
- Key: 'instance_to_rescue'
Value: '{{unreachableInstanceId}}'
- Key: 'oos_exec'
Value: '{{ ACS::ExecutionId }}'
Outputs:
imageId:
Type: String
ValueSelector: ImageId
- Name: createStack
Action: 'ACS::ExecuteAPI'
Description:
en: Buat tumpukan sumber daya Ros
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ROS
API: CreateStack
Parameters:
StackName: 'OOS-{{ACS::ExecutionId}}'
TimeoutInMinutes: 10
DisableRollback: false
Parameters:
- ParameterKey: helperInstanceType
ParameterValue: '{{checkAvailableInstanceTypesExist.availableInstanceType}}'
- ParameterKey: zoneId
ParameterValue: '{{ checkInstanceReady.zoneId }}'
- ParameterKey: resourcePrefix
ParameterValue: 'OOS-{{ACS::ExecutionId}}'
- ParameterKey: imageId
ParameterValue: 'centos_8_0_x64_20G_alibase_20191225.vhd'
- ParameterKey: instanceIdToRescue
ParameterValue: '{{unreachableInstanceId}}'
- ParameterKey: executionId
ParameterValue: '{{ ACS::ExecutionId }}'
TemplateURL: 'https://oos-debug.oss-cn-hangzhou.aliyuncs.com/ros_template.json'
Outputs:
StackId:
Type: String
ValueSelector: StackId
- Name: untilImageReady
Action: ACS::WaitFor
Description:
en: Tunggu gambar tersedia
zh-cn: deskripsi dalam bahasa Cina
OnError: deleteStack
Properties:
Service: ECS
API: DescribeImages
Parameters:
ImageId: '{{ createImage.imageId }}'
DesiredValues:
- Available
PropertySelector: Images.Image[].Status
Retries: 50
Delay: 36
DelayType: Constant
- Name: untilStackReady
Action: 'ACS::WaitFor'
OnError: queryStackStatusReason
OnSuccess: putRTToHelperInstance
Description:
en: Tunggu status tumpukan CREATE_COMPLETE.
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ROS
API: GetStack
Parameters:
StackId: '{{createStack.StackId}}'
DesiredValues:
- CREATE_COMPLETE
StopRetryValues:
- CREATE_FAILED
- CHECK_FAILED
- ROLLBACK_FAILED
- ROLLBACK_COMPLETE
- CREATE_ROLLBACK_COMPLETE
PropertySelector: Status
Outputs:
helperInstanceId:
Type: String
ValueSelector: 'Outputs[0].OutputValue'
statusReason:
Type: String
ValueSelector: 'StatusReason'
- Name: queryStackStatusReason
Action: ACS::ExecuteAPI
OnError: deleteStack
OnSuccess: deleteStack
Description:
en: Meminta alasan stack yang gagal dibuat.
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ROS
API: GetStack
Parameters:
StackId: '{{createStack.StackId}}'
Outputs:
statusReason:
Type: String
ValueSelector: 'StatusReason'
- Name: putRTToHelperInstance
Action: 'ACS::ECS::RunCommand'
OnError: deleteStack
Description:
en: Jalankan perintah asisten cloud pada instance ECS untuk mengunduh rt
zh-cn: deskripsi dalam bahasa Cina
Properties:
commandContent: 'cd /tmp ; wget https://oos-debug.oss-cn-hangzhou.aliyuncs.com/guestos-scripts-0.0.1.tar.gz; tar -zxvf guestos-scripts-0.0.1.tar.gz'
commandType: RunShellScript
instanceId: '{{ untilStackReady.helperInstanceId }}'
- Name: addTags
Action: ACS::ExecuteAPI
OnError: deleteStack
Description:
en: Tambahkan Tag disk sistem ke instance untuk diselamatkan
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: AddTags
Parameters:
ResourceType: instance
ResourceId: '{{ unreachableInstanceId }}'
Tag:
- Key: 'source_sys_disk'
Value: '{{ querySystemDisks.diskId }}'
- Name: detachDisk
Action: 'ACS::ECS::DetachDisk'
OnError: deleteStack
Description:
en: Melepaskan disk sistem dari instance yang tidak dapat dijangkau
zh-cn: deskripsi dalam bahasa Cina
Properties:
instanceId: '{{ unreachableInstanceId }}'
diskId: '{{ querySystemDisks.diskId }}'
- Name: attachAsDataDisk
Action: 'ACS::ECS::AttachDisk'
OnError: deleteStack
Description:
en: Memasang disk sistem ke instance pembantu sebagai disk data
zh-cn: deskripsi dalam bahasa Cina
Properties:
instanceId: '{{ untilStackReady.helperInstanceId }}'
diskId: '{{ querySystemDisks.diskId }}'
- Name: runCommand
Action: 'ACS::ECS::RunCommand'
OnError: deleteStack
Description:
en: Jalankan perintah asisten cloud untuk memperbaiki disk pada instance ECS
zh-cn: deskripsi dalam bahasa Cina
Properties:
commandContent: cd /tmp/guestos-scripts-0.0.1;./rescue_system_disk.sh
commandType: RunShellScript
instanceId: '{{ untilStackReady.helperInstanceId }}'
Outputs:
commandOutput:
Type: String
ValueSelector: invocationOutput
- Name: forceStopHelperInstance
Action: 'ACS::ExecuteAPI'
OnError: deleteStack
Description:
en: Menghentikan instance pembantu secara paksa
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: StopInstance
Parameters:
InstanceId: '{{ untilStackReady.helperInstanceId }}'
ForceStop: 'true'
- Name: untilforceStopHelperInstanceSuccess
Action: 'ACS::WaitFor'
OnError: deleteStack
Description:
en: Menunggu instance pembantu masuk ke status berhenti
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ untilStackReady.helperInstanceId }}'
DesiredValues:
- Stopped
PropertySelector: 'Instances.Instance[].Status'
- Name: detachHelperInstanceDataDisk
Action: 'ACS::ECS::DetachDisk'
OnError: deleteStack
Description:
en: Melepaskan disk data dari instance pembantu
zh-cn: deskripsi dalam bahasa Cina
Properties:
instanceId: '{{ untilStackReady.helperInstanceId }}'
diskId: '{{ querySystemDisks.diskId }}'
- Name: untilUnreachableInstanceSystemDiskAvailable
Action: 'ACS::WaitFor'
OnError: 'ACS::NEXT'
Description:
en: Menunggu disk dilepaskan
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: DescribeDisks
Parameters:
DiskIds:
- '{{ querySystemDisks.diskId }}'
DesiredValues:
- Available
PropertySelector: 'Disks.Disk[].Status'
- Name: deleteStack
Action: 'ACS::ExecuteApi'
OnError: 'ACS::NEXT'
Description:
en: Hapus tumpukan sumber daya ros
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ROS
API: DeleteStack
Parameters:
StackId: '{{createStack.StackId}}'
- Name: untilStackDeleted
Action: 'ACS::WaitFor'
OnError: 'ACS::NEXT'
Description:
en: Tunggu status tumpukan ros DELETE_COMPLETE
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ROS
API: GetStack
Parameters:
StackId: '{{createStack.StackId}}'
DesiredValues:
- DELETE_COMPLETE
StopRetryValues:
- DELETE_FAILED
- CHECK_FAILED
PropertySelector: Status
- Name: checkForUnreachableInstanceSystemDiskAvailable
Action: 'ACS::CheckFor'
OnError: 'ACS::END'
Description:
en: Periksa apakah disk telah dilepaskan
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: DescribeDisks
Parameters:
DiskIds:
- '{{ querySystemDisks.diskId }}'
DesiredValues:
- Available
PropertySelector: 'Disks.Disk[].Status'
- Name: whetherCredentialTypeIsKeyPairName
Action: 'ACS::Choice'
OnError: 'ACS::NEXT'
Description:
en: Pilih tugas berikutnya berdasarkan input tipe kredensial
zh-cn: deskripsi dalam bahasa Cina
Properties:
DefaultTask: attachAsSysDiskWithKeyPairName
Choices:
- When:
'Fn::Equals':
- Password
- '{{ credentialType }}'
NextTask: attachAsSysDisk
- Name: attachAsSysDiskWithKeyPairName
Action: 'ACS::ExecuteAPI'
OnSuccess: untilDiskAttached
OnError: 'ACS::NEXT'
Description:
en: Memasang disk sistem sumber ke instance yang tidak dapat dijangkau dan menetapkan tipe kredensial PairName untuk root
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: AttachDisk
Parameters:
DiskId: '{{ querySystemDisks.diskId }}'
InstanceId: '{{ unreachableInstanceId }}'
Bootable: 'true'
KeyPairName: '{{credentialValue}}'
- Name: attachAsSysDisk
Action: 'ACS::ExecuteAPI'
OnError: 'ACS::NEXT'
Description:
en: Memasang disk sistem sumber ke instance yang tidak dapat dijangkau dan menetapkan tipe kredensial Password untuk root
zh-cn: deskripsi dalam bahasa Cina
Properties:
Service: ECS
API: AttachDisk
Parameters:
DiskId: '{{ querySystemDisks.diskId }}'
InstanceId: '{{ unreachableInstanceId }}'
Bootable: 'true'
Password: '{{credentialValue}}'
- Name: untilDiskAttached
Action: 'ACS::WaitFor'
OnError: 'ACS::NEXT'
Description:
en: Menunggu disk sistem terpasang
zh-cn: deskripsi dalam bahasa Cina
Retries: 7
Properties:
Service: ECS
API: DescribeDisks
Parameters:
DiskIds:
- '{{ querySystemDisks.diskId }}'
DesiredValues:
- In_use
PropertySelector: 'Disks.Disk[].Status'
- Name: whetherStartUnreachableInstance
Action: 'ACS::Choice'
OnError: 'ACS::NEXT'
Description:
en: Pilih tugas berikutnya berdasarkan status instance asli
zh-cn: deskripsi dalam bahasa Cina
Properties:
DefaultTask: ACS::END
Choices:
- When:
'Fn::Equals':
- Running
- '{{ checkInstanceReady.status }}'
NextTask: startUnreachableInstance
- Name: startUnreachableInstance
Action: 'ACS::ECS::StartInstance'
Description:
en: Memulai instance yang tidak dapat dijangkau
zh-cn: deskripsi dalam bahasa Cina
Properties:
instanceId: '{{ unreachableInstanceId}}'
Outputs:
diskId:
Type: String
Value: '{{ querySystemDisks.diskId }}'
imageId:
Type: String
Value: '{{ createImage.imageId }}'
rtCommandOutput:
Type: String
Value: '{{ runcommand.commandOutput }}'
finalHelperInstanceType:
Type: String
Value: '{{checkAvailableInstanceTypesExist.availableInstanceType}}'
Metadata:
ALIYUN::OOS::Interface:
ParameterGroups:
- Parameters:
- credentialType
- credentialValue
- imagePrefix
- helperInstanceTypes
Label:
default:
zh-cn: deskripsi dalam bahasa Cina
en: Konfigurasikan Parameter
- Parameters:
- unreachableInstanceId
Label:
default:
zh-cn: deskripsi dalam bahasa Cina
en: Pilih Instance ECS
- Parameters:
- OOSAssumeRole
Label:
default:
zh-cn: deskripsi dalam bahasa Cina
en: Opsi Kontrol