全部产品
Search
文档中心

CloudOps Orchestration Service:ACS::Choice

更新时间:Jun 28, 2025

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 }}"
        }
    }
}