自動O&M中は、一部の操作は注意して実行する必要があります。 これらの操作には、重要なリソースの削除や高コストのインスタンスの購入が含まれます。 これらの操作が自動的に実行されると、リソースの制御を失い、リスクが発生する可能性があります。 ただし、これらの操作を自動化しない場合は、手動またはその他の自動化されていない方法で実行する必要があります。 ACS::Approve アクションは、自動実行と特別な注意が必要な操作のバランスを見つけるのに役立ちます。
前提条件
アラート通知を受信するために使用される DingTalk グループが作成されています。 DingTalk グループに設定する DingTalk チャットボットの Webhook URL が取得されています。 詳細については、「DingTalk チャットボットの Webhook URL を取得する」をご参照ください。
ソリューション
テンプレートで ACS::Approve アクションが実行され、タスクが承認される場合、CloudOps Orchestration Service (OOS) は後続の操作を一時停止します。 実行は待機状態に変わり、承認リンクを含む通知が管理者に送信されます。 管理者は通知を受信した後、ビジネス要件に基づいてタスクを承認するかどうかを決定できます。 タスクが承認されると、OOS は後続の操作を続行します。 タスクが拒否されると、OOS は実行を停止し、実行はキャンセル状態に変わります。
手順
CloudOps Orchestration Service コンソールにログオンします。
左側のナビゲーションウィンドウで、 を選択します。 [カスタムテンプレート] ページで、[テンプレートの作成] をクリックします。 [サンプルテンプレートの選択] ステップで、パラメーターを設定し、[次へ] をクリックします。

[テンプレートの作成] ステップで、[YAML] タブをクリックします。 このトピックの「付録 1:ECS インスタンスの再起動を承認するためのテンプレート」セクションのテンプレートの内容をコピーし、コードエディタに貼り付けます。 [テンプレートの作成] をクリックします。 [テンプレートの基本情報] ダイアログボックスで、[テンプレート名] パラメーターを設定し、[OK] をクリックします。

左側のナビゲーションウィンドウで、 を選択します。 [カスタムテンプレート] ページで、作成したテンプレートを見つけ、[操作] 列の [実行の作成] をクリックします。
[タスクの作成] ページで、[基本情報] ステップで必須パラメーターを設定し、[次のステップ:パラメーター設定] をクリックします。
[パラメーター設定] ステップで、次のパラメーターを設定します。
targets:必須。 再起動する Elastic Compute Service (ECS) インスタンス。
webHookUrl:必須。 承認リンクを含む承認通知を受信するための DingTalk チャットボットの Webhook URL。 Webhook URL の取得方法の詳細については、「DingTalk チャットボットの Webhook URL を取得する」トピックを参照してください。
rateControl:オプション。 並行性とエラーしきい値。
atMobiles:オプション。 指定された DingTalk グループに承認通知が送信されたときに通知されるユーザー。
atAll:オプション。 指定された DingTalk グループに承認通知が送信されたときに、すべてのグループメンバーに通知するかどうかを指定します。
OOSAssumeRole:オプション。 OOS によって引き受けられる Resource Access Management (RAM) ロール。 デフォルトでは、OOS は現在のアカウントに付与された権限を使用します。 RAM ロールが指定されている場合、OOS はこのロールを引き受けて O&M タスクを実行します。

[次のステップ:OK] をクリックします。 次に、[作成] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。 [タスク実行管理] ページで、作成された実行を表示します。 実行が待機状態の場合、電話番号が指定されているユーザーは DingTalk グループで通知されます。 ユーザーは承認通知の承認リンクをクリックして、ビジネス要件に基づいて O&M タスクを承認または拒否できます。
付録 1:ECS インスタンスの再起動を承認するためのテンプレート
テンプレートは、次のタスクを順番に実行します。
再起動する ECS インスタンスに関する情報をクエリします。
承認リンクを含む通知を送信して、指定されたユーザーに ECS インスタンスの再起動の承認を通知します。
再起動リクエストが承認された場合、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. zh-cn: >- 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. zh-cn: >- 通知が届いたときに DingTalk グループアシスタントで @メンションするメンバーの電話番号。 Type: List Default: - '1390000****' atAll: Description: en: 'assistant @ all members in dingtalk group or not, when notify comes.' zh-cn: 通知が届いたときに、DingTalk グループのすべてのメンバーをアシスタントが @メンションするかどうか。 Type: String Default: 'false' OOSAssumeRole: Description: en: The RAM role to be assumed by OOS. zh-cn: OOS によって引き受けられる RAM ロール。 Type: String Default: OOSServiceRole RamRole: '{{ OOSAssumeRole }}' Tasks: - Name: getInstance Description: en: Views the ECS instances. zh-cn: 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: >- 通知:インスタンスの再起動を承認してください。承認するインスタンス名は {{getInstance.instanceNames}} です。{{ACS::RegionId}} oos {{ACS::ExecutionId}} から送信されました。 at: atMobiles: '{{atMobiles}}' isAtAll: '{{atAll}}' - Name: rebootInstance Action: 'ACS::ECS::RebootInstance' Description: en: Restarts the ECS instances. zh-cn: ECS インスタンスを再起動します。 Properties: instanceId: '{{ ACS::TaskLoopItem }}' Loop: RateControl: '{{ rateControl }}' Items: '{{ getInstance.instanceIds }}' Outputs: instanceIds: Type: List Value: '{{ getInstance.instanceIds }}'