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

CloudOps Orchestration Service:ACS::Approve

最終更新日:Aug 22, 2026

ACS::Approve アクションは、タスクを承認するために使用します。

説明

自動運用保守 (O&M) では、重要なリソースの削除や高コストのインスタンスの購入など、慎重に実行する必要がある操作があります。これらの操作を自動的に実行すると、リソースを制御できなくなったり、予算の上限を超えたりする可能性があります。しかし、これらの操作を自動化しない場合は、手動または自動化されていない他の方法で実行する必要があります。ACS::Approve アクションは、自動実行と特別な注意が必要な操作との間でバランスを取るのに役立ちます。

テンプレートで ACS::Approve アクションが実行されると、CloudOps Orchestration Service (OOS) の実行エンジンは後続の操作の実行を一時停止し、実行ステータスを Waiting に設定してから、管理者に通知を送信します。管理者として通知を受け取った後、ビジネス要件に基づいて操作を承認するか拒否するかを決定できます。操作が承認されると、OOS 実行エンジンは後続の操作の実行を続けます。操作が拒否されると、OOS 実行エンジンは実行を停止し、実行ステータスを Canceled に設定します。

Webhook の構文

Webhook を設定して、DingTalk などのクライアントに通知を送信できます。

  • YAML 形式

Tasks:
  - Name: approvalTask
    Action: ACS::Approve
    Properties:
      AppendExecutionLink: 'true' # 実行リンクを追加するかどうかを指定します。有効な値: true および false。デフォルト値: true。
      Approvers: ["user1", "user2", "user3"] # 承認者として機能する RAM ユーザーの名前。
      MinRequiredApprovals: 2 # タスクの承認に必要な承認者の最小数。
      NotifyType: WebHook
      WebHook:
        URI: url # 必須。Webhook URL。例: https://oapi.dingtalk.com/robot/send?access_token=xxxxxx。
        Headers: # オプション。HTTP リクエストのヘッダー。例: Content-Type。
          Content-Type: 'application/json; charset=utf-8'
        Content: # 必須。Webhook 通知のコンテンツ。Webhook の要件に基づいて値を設定します。DingTalk Webhook のコンテンツについては、「https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1」をご参照ください。
          msgtype: text
          text:
            content: 'the approve notify to user' # 必須。承認通知のコンテンツ。
          at: # DingTalk グループで @メンションするユーザー。
            atMobiles: # オプション。DingTalk グループで @メンションするユーザー。DingTalk アカウントの作成に使用した携帯電話番号でユーザーを指定します。
                        - 138albb1234
                        - 130albb1234
            isAtAll: 'false' # オプション。DingTalk グループの全ユーザーに @メンションするかどうかを指定します。有効な値: true および false。デフォルト値: false。
  • JSON 形式 (詳細については、YAML 形式の属性の説明をご参照ください。)

{
  "Tasks": [
    {
      "Name": "approvalTask",
      "Action": "ACS::Approve",
      "Properties": {
        "AppendExecutionLink": "true",
        "Approvers": [
          "user1",
          "user2",
          "user3"
        ],
        "MinRequiredApprovals": 2,
        "NotifyType": "WebHook",
        "WebHook": {
          "URI": "url",
          "Headers": {
            "Content-Type": "application/json; charset=utf-8"
          },
          "Content": {
            "msgtype": "text",
            "text": {
              "content": "the approve notify to user"
            },
            "at": {
              "atMobiles": [
                "138albb1234",
                "130albb1234"
              ],
              "isAtAll": "false"
            }
          }
        }
      }
    }
  ]
}

Webhook の例

以下のテンプレートは、承認後に Elastic Compute Service (ECS) インスタンスを再起動するために使用します。

  • YAML 形式

---
FormatVersion: OOS-2019-06-01
Description:
  en: Bulky restarts the ECS instances with Approval.
  name-en: BulkyRebootInstancesWithApproval
Parameters:
  targets:
    Type: Json
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
  rateControl:
    Description:
      en: Concurrency ratio of task execution. # タスク実行の同時実行率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 100%
  webHookUrl:
    Description:
      en: >-
        The webHook url of dingtalk group assistant,
        e.g.https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414. # DingTalk グループアシスタントの Webhook URL (例: https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414)。
    Type: String
  atMobiles:
    Description:
      en: >-
        The telephone numbers of member in dingtalk group assistant @, when
        notify comes. # 通知の送信時に、DingTalk グループアシスタントで @メンションするメンバーの電話番号。
    Type: List
    Default:
      - '1390000****'
  atAll:
    Description:
      en: 'assistant @ all members in dingtalk group or not, when notify comes.' # 通知の送信時に、アシスタントが DingTalk グループの全メンバーに @メンションするかどうか。
    Type: String
    Default: 'false'
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS. # OOS によって引き受けられる RAM ロール。
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances. # ECS インスタンスを表示します。
    Action: 'ACS::SelectTargets'
    Properties:
      ResourceType: 'ALIYUN::ECS::Instance'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
      instanceNames:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceName'
  - Name: approveRestart
    Action: 'ACS::Approve'
    Properties:
      NotifyType: WebHook
      WebHook:
        URI: '{{webhookUrl}}'
        Headers:
          Content-Type: application/json
        Content:
          msgtype: text
          text:
            content: >-
              Notify: please approve instances restart, instance names to
              approve  are {{getInstance.instanceNames}}, sent by
              {{ACS::RegionId}} oos {{ACS::ExecutionId}}. # 通知: インスタンスの再起動を承認してください。承認するインスタンス名は {{getInstance.instanceNames}} です。{{ACS::RegionId}} OOS {{ACS::ExecutionId}} から送信されました。
          at:
            atMobiles: '{{atMobiles}}'
            isAtAll: '{{atAll}}'
  - Name: rebootInstance
    Action: 'ACS::ECS::RebootInstance'
    Description:
      en: Restarts the ECS instances. # ECS インスタンスを再起動します。
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getInstance.instanceIds }}'
Outputs:
  instanceIds:
    Type: List
    Value: '{{ getInstance.instanceIds }}'
  • JSON 形式

{
  "FormatVersion": "OOS-2019-06-01",
  "Description": {
    "en": "Bulky restarts the ECS instances with Approval.",
    "name-en": "BulkyRebootInstancesWithApproval"
  },
  "Parameters": {
    "targets": {
      "Type": "Json",
      "AssociationProperty": "Targets",
      "AssociationPropertyMetadata": {
        "ResourceType": "ALIYUN::ECS::Instance"
      }
    },
    "rateControl": {
      "Description": {
        "en": "Concurrency ratio of task execution." // タスク実行の同時実行率。
      },
      "Type": "Json",
      "AssociationProperty": "RateControl",
      "Default": {
        "Mode": "Concurrency",
        "MaxErrors": 0,
        "Concurrency": "100%"
      }
    },
    "webHookUrl": {
      "Description": {
        "en": "The webHook url of dingtalk group assistant, e.g.https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414." // DingTalk グループアシスタントの Webhook URL (例: https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414)。
      },
      "Type": "String"
    },
    "atMobiles": {
      "Description": {
        "en": "The telephone numbers of member in dingtalk group assistant @, when notify comes." // 通知の送信時に、DingTalk グループアシスタントで @メンションするメンバーの電話番号。
      },
      "Type": "List",
      "Default": [
        "1390000****"
      ]
    },
    "atAll": {
      "Description": {
        "en": "assistant @ all members in dingtalk group or not, when notify comes." // 通知の送信時に、アシスタントが DingTalk グループの全メンバーに @メンションするかどうか。
      },
      "Type": "String",
      "Default": "false"
    },
    "OOSAssumeRole": {
      "Description": {
        "en": "The RAM role to be assumed by OOS." // OOS によって引き受けられる RAM ロール。
      },
      "Type": "String",
      "Default": "OOSServiceRole"
    }
  },
  "RamRole": "{{ OOSAssumeRole }}",
  "Tasks": [
    {
      "Name": "getInstance",
      "Description": {
        "en": "Views the ECS instances." // ECS インスタンスを表示します。
      },
      "Action": "ACS::SelectTargets",
      "Properties": {
        "ResourceType": "ALIYUN::ECS::Instance",
        "Filters": [
          "{{ targets }}"
        ]
      },
      "Outputs": {
        "instanceIds": {
          "Type": "List",
          "ValueSelector": "Instances.Instance[].InstanceId"
        },
        "instanceNames": {
          "Type": "List",
          "ValueSelector": "Instances.Instance[].InstanceName"
        }
      }
    },
    {
      "Name": "approveRestart",
      "Action": "ACS::Approve",
      "Properties": {
        "NotifyType": "WebHook",
        "WebHook": {
          "URI": "{{webhookUrl}}",
          "Headers": {
            "Content-Type": "application/json"
          },
          "Content": {
            "msgtype": "text",
            "text": {
              "content": "Notify: please approve instances restart, instance names to approve  are {{getInstance.instanceNames}}, sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}." // 通知: インスタンスの再起動を承認してください。承認するインスタンス名は {{getInstance.instanceNames}} です。{{ACS::RegionId}} OOS {{ACS::ExecutionId}} から送信されました。
            },
            "at": {
              "atMobiles": "{{atMobiles}}",
              "isAtAll": "{{atAll}}"
            }
          }
        }
      }
    },
    {
      "Name": "rebootInstance",
      "Action": "ACS::ECS::RebootInstance",
      "Description": {
        "en": "Restarts the ECS instances." // ECS インスタンスを再起動します。
      },
      "Properties": {
        "instanceId": "{{ ACS::TaskLoopItem }}"
      },
      "Loop": {
        "RateControl": "{{ rateControl }}",
        "Items": "{{ getInstance.instanceIds }}"
      }
    }
  ],
  "Outputs": {
    "instanceIds": {
      "Type": "List",
      "Value": "{{ getInstance.instanceIds }}"
    }
  }
}

メールの構文

  • YAML 形式

Tasks:
  - Action: ACS::Approve
    Name: ApproveByMail
    Properties:
      NotifyType: Mail
      Mail:
      	Host: SMTPHostAddress # Simple Mail Transfer Protocol (SMTP) サーバーのアドレス。例: smtp.example1.com。
        Port: SMTPPort # SMTP サーバーのポート番号。例: 465。
        Username: sender  # 通知の送信に使用するメールアカウント。例: usr001@example1.com。
        Password: senderPassword # メールアカウントのパスワードではなく、Internet Message Access Protocol (IMAP) または SMTP サービスの認証コード。
        Subject: mailSubject # メール通知の件名。例: hello world。
        Body: mailBody # メール通知の本文。例: hello world ! ! !。
        From: senderAddress # 送信者のメールアドレス。例: usr001@example1.com。
        To: # 受信者のメールアドレスのリスト。
        	- usr123@example2.com
          - usr1234@example2.com
  • JSON 形式 (詳細については、YAML 形式の属性の説明をご参照ください。)

{
  "Tasks": [
    {
      "Action": "ACS::Approve",
      "Name": "ApproveByMail",
      "Properties": {
        "NotifyType": "Mail",
        "Mail": {
          "Host": "SMTPHostAddress",
          "Port": "SMTPPort",
          "Username": "sender",
          "Password": "senderPassword",
          "Subject": "mailSubject",
          "Body": "mailBody",
          "From": "senderAddress",
          "To": [
            "usr123@example2.com",
            "usr1234@example2.com"
          ]
        }
      }
    }
  ]
}