Deskripsi
Aksi ACS::Choice digunakan untuk menentukan tugas berikutnya yang akan dieksekusi berdasarkan kondisi tertentu. Sebagai contoh, sebelum me-restart sebuah instance, Anda dapat memeriksa status instance tersebut dan memilih tugas yang sesuai berdasarkan hasil pemeriksaan. Jika instance dalam status Running, tugas untuk me-restart instance akan dijalankan. Jika instance dalam status Stopped, tugas untuk memulai instance akan dijalankan. Jika instance dalam status lainnya, tugas untuk memeriksa status instance akan dijalankan.
Sintaksis
Tasks:
- Name: chooseNextTaskToRun # Nama dari tugas.
Action: ACS::Choice
Properties:
DefaultTask: task1 # Tugas default yang dijalankan jika tidak ada kondisi yang ditentukan oleh atribut Choices terpenuhi setelah tugas chooseNextTaskToRun dijalankan. Nama tugas task1 tidak boleh menjadi nama parameter. Harus berupa string yang menentukan nama tugas.
Choices:
- When: condition1 # Kondisi pertama untuk penilaian.
NextTask: task2 # Tugas yang dijalankan jika kondisi pertama terpenuhi setelah tugas chooseNextTaskToRun dijalankan. Nama tugas task2 tidak boleh menjadi nama parameter. Harus berupa string yang menentukan nama tugas.
- When: condition2 # Kondisi kedua untuk penilaian.
NextTask: task3 # Tugas yang dijalankan jika kondisi kedua terpenuhi setelah tugas chooseNextTaskToRun dijalankan. Nama tugas task3 tidak boleh menjadi nama parameter. Harus berupa string yang menentukan nama tugas.
# Jika perlu, Anda dapat menggunakan lebih banyak kondisi WHEN dalam atribut Choices.
#...{
"Tasks": [
{
"Name": "chooseNextTaskToRun",
"Action": "ACS::Choice",
"Properties": {
"DefaultTask": "task1",
"Choices": [
{
"When": "condition1",
"NextTask": "task2"
},
{
"When": "condition2",
"NextTask": "task3"
}
]
}
}
]
}Contoh
FormatVersion: OOS-2019-06-01
Description:
en: Melakukan restart massal pada instance ECS.
name-en: ACS-ECS-BulkyRebootInstances
Parameters:
targets:
Type: Json
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: 'ALIYUN::ECS::Instance::InstanceId'
OOSAssumeRole:
Description:
en: Peran RAM yang akan diasumsikan oleh OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: getInstance
Description:
en: Menampilkan instance ECS.
Action: 'ACS::SelectTargets'
Properties:
ResourceType: 'ALIYUN::ECS::Instance::InstanceId'
Filters:
- '{{ targets }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
status:
Type: String
ValueSelector: Instances.Instance[].Status
- Name: whetherStatusRunning
Action: 'ACS::Choice'
Description:
en: Memulai instance ECS
Properties:
DefaultTask: rebootInstance
Choices:
- When:
'Fn::Equals':
- Stopped
- '{{ describeInstances.status }}'
NextTask: startInstance
- Name: startInstance
Action: 'ACS::ECS::StartInstance'
Description:
en: Memulai instance ECS
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getInstance.instanceIds }}'
- Name: rebootInstance
Action: 'ACS::ECS::RebootInstance'
Description:
en: Me-restart instance ECS
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getInstance.instanceIds }}'{
"FormatVersion": "OOS-2019-06-01",
"Description": {
"en": "Melakukan restart massal pada instance ECS.",
"name-en": "ACS-ECS-BulkyRebootInstances",
},
"Parameters": {
"targets": {
"Type": "Json",
"AssociationProperty": "Targets",
"AssociationPropertyMetadata": {
"ResourceType": "ALIYUN::ECS::Instance"
}
},
"rateControl": {
"Description": {
"en": "Rasio konkurensi eksekusi tugas.",
},
"Type": "Json",
"AssociationProperty": "RateControl"
},
"OOSAssumeRole": {
"Description": {
"en": "Peran RAM yang akan diasumsikan oleh OOS.",
},
"Type": "String",
"Default": "OOSServiceRole"
}
},
"RamRole": "{{ OOSAssumeRole }}",
"Tasks": [
{
"Name": "getInstance",
"Description": {
"en": "Menampilkan instance ECS.",
},
"Action": "ACS::SelectTargets",
"Properties": {
"ResourceType": "ALIYUN::ECS::Instance",
"Filters": [
"{{ targets }}"
]
},
"Outputs": {
"instanceIds": {
"Type": "List",
"ValueSelector": "Instances.Instance[].InstanceId"
}
}
},
{
"Name": "describeInstances",
"Action": "ACS::ExecuteAPI",
"Description": "Menampilkan Status instance ECS.",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceIds": "{{ getInstance.instanceIds }}"
}
},
"Outputs": {
"status": {
"Type": "String",
"ValueSelector": "Instances.Instance[].Status"
}
}
},
{
"Name": "whetherStatusRunning",
"Action": "ACS::Choice",
"Properties": {
"DefaultTask": "describeInstancesFinally",
"Choices": [
{
"When": {
"Fn::Equals": [
"Running",
"{{ describeInstances.status }}"
]
},
"NextTask": "rebootInstance"
},
{
"When": {
"Fn::Equals": [
"Stopped",
"{{ describeInstances.status }}"
]
},
"NextTask": "startInstance"
}
]
}
},
{
"Name": "startInstance",
"Action": "ACS::ECS::StartInstance",
"Description": {
"en": "Memulai instance ECS.",
},
"Properties": {
"instanceId": "{{ ACS::TaskLoopItem }}"
},
"Loop": {
"RateControl": "{{ rateControl }}",
"Items": "{{ getInstance.instanceIds }}"
}
},
{
"Name": "rebootInstance",
"Action": "ACS::ECS::RebootInstance",
"Description": {
"en": "Me-restart instance ECS.",
},
"Properties": {
"instanceId": "{{ ACS::TaskLoopItem }}"
},
"Loop": {
"RateControl": "{{ rateControl }}",
"Items": "{{ getInstance.instanceIds }}"
}
},
{
"Name": "describeInstancesFinally",
"Action": "ACS::ExecuteAPI",
"Description": "Menampilkan Status instance ECS.",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceIds": "{{ getInstance.instanceIds }}"
}
},
"Outputs": {
"status": {
"Type": "String",
"ValueSelector": "Instances.Instance[].Status"
}
}
}
],
"Outputs": {
"instanceIds": {
"Type": "List",
"Value": "{{ getInstance.instanceIds }}"
}
}
}