クラウドアシスタントイベントをサブスクライブして、自動化された運用保守 (O&M) の応答フローを構築します。たとえば、ソフトウェアのインストールや検査スクリプトの実行などの自動化タスクが失敗した場合に、即座にアラートを受け取ることができます。これにより、コストと遅延の大きい手動ポーリングが不要になります。
操作手順
以下の手順では、クラウドアシスタントのタスクステータスイベントのサブスクリプションを例として説明します。詳細については、「クラウドアシスタントのイベントの説明」をご参照ください。
EventBridge を使用したクラウドアシスタントイベントのサブスクライブ
開始する前に、EventBridge をアクティベートし、必要な権限を付与していることを確認してください。
EventBridge コンソールにログインします。左側のナビゲーションウィンドウで、[イベントバス] をクリックします。
上部のメニューバーで、リージョンを選択します。
[イベントバス] ページで、[default] をクリックします。
[EventBridge] ページで、左側のナビゲーションウィンドウの [イベントルール] をクリックし、次に [ルールの作成] をクリックします。
[基本情報の構成] タブで、[名前] テキストボックスに名前を入力し、[説明] テキストボックスに説明を入力します。次に、[次へ] をクリックします。
[イベントパターンの構成] タブで、以下のパラメーターを構成し、[次へ] をクリックします。
[イベントソース] ドロップダウンリストから [acs.ecs] を選択します。
[イベントタイプ] ドロップダウンリストから、サブスクライブしたいクラウドアシスタントのイベントタイプを選択します。
クラウドアシスタントのタスクステータスイベント:
ecs:CloudAssistant:TaskCompleted[イベントパターンのデバッグ] セクションで、サブスクライブしたイベントタイプのサンプルを表示します。
{ "id": "45ef4dewdwe1-7c35-447a-bd93-fab****", "source": "acs.ecs", "specversion": "1.0", "subject": "acs.ecs:cn-hangzhou:123456789098****:215672", "time": "2020-11-19T21:04:41+08:00", "type": "ecs:CloudAssistant:TaskCompleted", "aliyunaccountid": "123456789098****", "aliyunpublishtime": "2020-11-19T21:04:42Z", "aliyuneventbusname": "default", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.25.XX.XX", "data": { "commandId": "c-hz045**********", "commandName": "hello-linux.sh", "exitCode": "0", "finishTime": "2023-12-14T07:39:48Z", "instanceId": "i-bp114***************", "invocationStatus": "Success", "invokeId": "t-hz045**********", "ownerId": "158*************", "playerUid": "256***************", "repeatMode": "Once", "repeats": "1", "startTime": "2023-12-14T07:39:48Z", "errorCode": "0", "errorDesc": "" } }サンプルの下にある [テスト] をクリックして、イベントトリガーをシミュレートします。[一致しました。イベントをトリガーできます。] というメッセージが表示された場合、イベントは期待どおりにトリガーされるように構成されています。
イベントターゲットを構成します。[サービスタイプ] を選択し、プッシュシナリオを構成します。
詳細については、「プッシュシナリオの設定」をご参照ください。
Cloud Monitor を使用したクラウドアシスタントイベントのサブスクライブ
Cloud Monitor コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[サブスクリプションポリシー] タブで、[サブスクリプションポリシーの作成] をクリックします。
[サブスクリプションポリシーの作成] ページで、クラウドアシスタントイベントをサブスクライブするためのパラメーターを構成します。
この例では、クラウドアシスタントイベントに関連するパラメーターのみを示します。詳細については、「サブスクリプションポリシーのパラメーター」をご参照ください。
サブスクリプションタイプ:[システムイベント] を選択します。
サブスクリプションの範囲:
[プロダクト]:[Elastic Compute Service (ECS)] を選択します。
イベントタイプ:通知を選択します。
イベント名: [クラウドアシスタント タスクステータスイベント] を選択します。
構成が完了したら、[送信] をクリックします。
関連するイベントがトリガーされると、通知が届きます。また、DescribeSystemEventAttribute 操作を呼び出して、システムイベントの詳細をクエリすることもできます。
クラウドアシスタントのイベントの説明
クラウドアシスタントのタスクステータスイベント
イベントの説明
コマンドとスクリプトの実行には時間がかかります。クラウドアシスタントのタスクステータスイベントは、タスクの完了を追跡するのに役立ちます。これらのイベントは、以下の目的で使用できます:
クラウドアシスタントのタスクが失敗または完了したときに通知を受け取ります。この通知をアラートや後続の操作に利用できます。
ポーリングは API 呼び出しクォータを消費します。これを避けるために、イベントサブスクリプションを使用できます。
ロングポーリングプロセス中に発生する可能性のあるアプリケーションのリリースによる中断を防ぎます。イベントを使用することで、ワークフローが簡素化されます。
トリガー条件と制限
トリガー条件:RunCommand または InvokeCommand 操作を呼び出してタスクを実行すると、クラウドアシスタントはタスクのステータスを監視します。タスクが完了すると、タスクステータスイベントを送信します。
制限事項:
クラウドアシスタントのタスクステータスイベントは、ECS インスタンス上のタスクが以下の最終状態 (InvocationStatus) のいずれかに入った場合にのみ送信されます:
Aborted:タスクの送信に失敗しました。
Success:タスクは成功しました。
Failed:タスクは失敗しました。
Invalid:タスクの内容が無効です。
Timeout:タスクはタイムアウトしました。
Cancelled:タスクはキャンセルされました。
Terminated:タスクは終了されました。
DescribeInvocations および DescribeInvocationResults 操作は
array<object>フォーマットでデータを返します。しかし、タスクステータスイベントは、単一のインスタンス上の単一のタスクのステータスをレポートするものであり、複数のタスクではありません。
イベントフィールド
フィールド | 説明 | 例 |
instanceId | インスタンス ID。 | i-bp114*************** |
invokeId | コマンド実行 ID。 | t-hz045********** |
commandId | コマンド ID。 | c-hz045********** |
commandName | コマンド名。 | ACS-ECS-ResetPassword-for-linux.sh |
ownerUid | コマンドが実行されるインスタンスを所有するアカウント。 | 158************* |
playerUid | ロールを偽装してコマンドを実行するアカウントの ID。 | 256*************** |
repeatMode | コマンドの実行モード。`InstanceId` も指定されている場合、このパラメーターは無視されます。有効な値:
| Once |
repeats | インスタンス上でコマンドが実行された回数。
| 0 |
invocationStatus | コマンドの実行ステータス。
| Success |
exitCode | コマンドプロセスの終了コード。 | 0 |
startTime | タスクの開始時刻。 | 2023-12-20T06:15:55Z |
finishTime | タスクの終了時刻。 | 2023-12-20T06:15:59Z |
errorCode | コマンドの送信または実行に失敗した場合に返されるエラーコード。 | 0 |
errorDesc | コマンドの送信または実行の失敗の詳細。 | - |
クラウドアシスタントの初回ハートビートイベント
イベントの説明
クラウドアシスタントのハートビートは、インスタンスのオペレーティングシステムのステータスを判断する方法の 1 つです。初回のハートビートは、オペレーティングシステムが起動したタイミングを示します。この情報を使用して、インスタンスのヘルスチェックを行ったり、クラウドアシスタントのコマンドを送信するタイミングを決定したりできます。
初回ハートビートイベントを使用することで、DescribeCloudAssistantStatus 操作をポーリングする代わりに、以下の問題を解決できます:
ステータスが `true` に変わったかを確認するために DescribeCloudAssistantStatus をポーリングするのは複雑です。不適切なポーリング間隔は、過剰なリクエストを生成し、速度制限をトリガーしたり、システムに負荷をかけたりする可能性があります。
インスタンスのオペレーティングシステムの起動時間は大きく異なる場合があります。一部の Windows インスタンスは起動に最大 5 分かかることがあり、総ポーリング時間を制御するのが困難になります。
DescribeCloudAssistantStatus によって返されるステータスには遅延がある場合があります。ハートビートが停止してからステータスが変更されるまでに 2 分の遅延があります。これにより、DescribeCloudAssistantStatus がインスタンスの再起動を検出するのが困難になります。
トリガー条件と制限
トリガー条件:クラウドアシスタントがハートビートをレポートする際、クラウドアシスタントクライアントの起動後、これが最初のハートビートであることを検出した場合に、初回ハートビートイベントを送信します。
クラウドアシスタントのバージョンの制限:
Windows インスタンス:クラウドアシスタントエージェントのバージョンは 1.0.0.149 より新しい必要があります。
Linux インスタンス:クラウドアシスタントエージェントのバージョンは 1.0.2.569 より新しい必要があります。
古いバージョンのクラウドアシスタントは、毎分ハートビートをレポートしないか、インデックスフィールドをレポートしません。その結果、起動後の最初のハートビートを正確に識別できません。これらの古いバージョンはサポートされていません。
イベントフィールド
フィールド | 説明 | 例 |
bizEventId | イベント ID。 | ea33c3e2-aaf0-****-****-5d49b1ecce99 |
vmName | イベントに関連付けられたインスタンスの ID。 | i-bp19**************** |
extensions | 追加のビジネス情報。 | - |
azone | ゾーン。 | cn-shenzhen-e |
region | リージョン。 | cn-shenzhen |
agentVersion | クラウドアシスタントエージェントのバージョン。 | 2.2.3.529 |
uptime | オペレーティングシステムが実行されている時間 (ミリ秒単位)。 | 19000 |
クラウドアシスタントのタスク実行出力配信結果イベント
イベントの説明
コマンドを実行すると、コマンド出力の最大 24 KB が保持されます。この制限を超える出力は切り捨てられます。
完全な出力を取得したり、出力を永続化したりしたい場合は、コマンド実行が最終状態に達したときに、出力が OSS パスに配信されるように構成できます。
このイベントは、以下の目的で使用できます:
出力配信に関する通知と詳細を受け取ります。成功通知を受け取ったら、対応する OSS バケットから出力ファイルをダウンロードできます。これにより、結果を取得するために DescribeInvocations 操作をポーリングする必要がなくなり、効率が向上します。
配信が失敗した場合、イベントから失敗の詳細な理由を取得できます。
トリガー条件と制限
トリガー条件:RunCommand または InvokeCommand を使用してタスクを実行し、有効な OssOutputDelivery パラメーターを指定すると、タスクが最終状態に達したときにこのイベントが送信されます。
制限事項:
イベントは、インスタンス上のタスクが以下の最終状態 (InvocationStatus) のいずれかに入った場合にのみ送信されます:
Aborted:タスクの送信に失敗しました。
Success:タスクは成功しました。
Failed:タスクは失敗しました。
Invalid:タスクの内容が無効です。
Timeout:タスクはタイムアウトしました。
Cancelled:タスクはキャンセルされました。
Terminated:タスクは終了されました。
クラウドアシスタントのバージョンの制限:
Windows インスタンス:クラウドアシスタントエージェントのバージョンは 2.1.4.1007 より新しい必要があります。
Linux インスタンス:クラウドアシスタントエージェントのバージョンは 2.2.4.1007 より新しい必要があります。
イベントフィールド
フィールド | 説明 |
instanceId | インスタンス ID。 |
invokeId | コマンド実行 ID。 |
ownerUid | コマンドが実行されるインスタンスを所有するアカウント。 |
playerUid | ロールを偽装してコマンドを実行するアカウントの ID。 |
repeatMode | コマンドの実行モード。有効な値:
|
repeats | インスタンス上でコマンドが実行された回数。
|
ossOutputDelivery | コマンド出力配信のための OSS 構成。 |
ossOutputUri | コマンド出力が配信される OSS ファイルの URI。 |
status | 配信ステータス。
|
statusCode | 配信ステータスコード。このパラメーターは、ステータスが `Failed` の場合にのみ返されます。 |
errorCode | 配信失敗のエラーコード。このパラメーターは、ステータスが `Failed` の場合にのみ返されます。考えられる値:
|
errorInfo | 配信失敗のエラー詳細。このパラメーターは、ステータスが `Failed` の場合にのみ返されます。 |
本番環境に関する推奨事項
べき等性:イベントシステムは、ネットワークの問題やリトライにより、同じイベントを複数回配信することがあります。処理ロジックはべき等性を持つ必要があります。これは、同じイベントを複数回処理しても、一度だけ処理した場合と同じ結果になることを意味します。イベントの
idまたはdata.bizEventIdを一意の識別子として使用できます。イベントを処理する前に、この ID がすでに処理済みかどうかを確認してください。リトライとデッドレターキュー:EventBridge のイベントターゲットを構成する際には、リトライポリシーとデッドレターキューを構成することを強く推奨します。処理関数が一時的に失敗した場合、EventBridge は自動的にリトライします。リトライが失敗した場合、イベントは MNS キューなどのデッドレターキューに送信されます。その後、手動で調査してイベントを回復し、データ損失を防ぐことができます。
モニタリングとアラート:イベント処理関数自体をモニターします。その実行成功率、持続時間、エラーログをモニターし、アラートを設定します。これにより、処理ロジックが一貫して失敗した場合に即座に介入できます。
よくある質問
EventBridge を使用してクラウドアシスタントイベントをサブスクライブした後、イベント通知が届かないのはなぜですか?
前提条件の確認:クラウドアシスタントエージェントのバージョンが要件を満たしていることを確認します。
EventBridge ルールの確認:
EventBridge コンソールにログインします。ルールのイベントパターンが正しいことを確認します。
sourceはacs.ecsであり、typeは正しいイベントタイプである必要があります。イベントパターンのデバッグ機能を使用して、ルールが実際のイベント JSON サンプルと一致するかどうかをテストします。
イベントターゲットの健全性の確認:
EventBridge コンソールのイベントルール詳細ページで、イベントターゲットの呼び出しレコードとエラーログを表示します。
Function Compute や Webhook などのターゲットサービスが正常に実行されており、ネットワーク経由で到達可能であることを確認します。