複数の ECS インスタンスでコマンドをバッチ実行します。
背景情報
複数の Elastic Compute Service (ECS) インスタンスでコマンドをリモート実行できます。これは、最も一般的な運用および保守 (O&M) 操作の 1 つです。たとえば、コマンドを実行して ECS インスタンスにソフトウェアをインストールまたはアンインストールしたり、プロセスを開始または停止したりできます。ほとんどの場合、複数の ECS インスタンスで同じコマンドを実行し、実行結果を集計する必要があります。
たとえば、この機能をビジネス アプリケーションに適用できます。ローリングアップデートを介してランタイム環境と顧客コードを更新するために必要なコマンドを実行できます。これにより、アプリケーション デプロイの信頼性が向上します。
Secure Shell (SSH) を使用して ECS インスタンスにリモート接続できます。ただし、インターネット経由で ECS インスタンスの SSH ポートへのアクセスを有効にすると、潜在的なリスクが生じる可能性があります。セキュリティの問題を解決するために、ジャンプサーバーを作成し、これらのジャンプサーバーを介して ECS インスタンスにアクセスできます。ただし、これにより、複雑さとコストが増加する可能性があります。
Ansible は、業界で人気のオープンソース O&M ツールです。リモートアクセスに Ansible を使用できます。ただし、認証方式は Alibaba Cloud アカウントシステムとは無関係です。その結果、Alibaba Cloud ツールを使用してアクセスを制御することはできません。さらに、Ansible の操作記録は Alibaba Cloud によって監査できません。
Windows ECS インスタンスを使用している場合は、PowerShell を使用してコマンドをリモート実行できます。ただし、これらの ECS インスタンスを構成または保守する際に、大きな課題が生じます。
前述の問題を解決するために、Alibaba Cloud OOS と Cloud Assistant を統合することをお勧めします。この統合により、複数の ECS インスタンスでコマンドをバッチ実行できます。Cloud Assistant は、ECS インスタンスでコマンドを実行するために使用される多数のアトミック機能を提供します。OOS は、さまざまな機能も提供します。これらの機能を使用すると、スケジュールされたイベント駆動型の O&M タスクを管理し、複数の O&M タスクを同時に処理し、O&M タスクのカスタムテンプレートを作成できます。この統合により、ECS インスタンスで O&M タスクを実行するための安全、簡単、かつ効率的な方法が提供されます。
準備
Alibaba Cloud Command Line Interface (CLI) V3.0.19 以後がインストールおよび構成されていることを確認します。 GitHub から Alibaba Cloud CLI のインストールパッケージをダウンロードするには、https://github.com/aliyun/aliyun-cli/releases にアクセスしてください。構成の詳細については、「インタラクティブ構成 (高速)」をご参照ください。
パブリックテンプレートを実行する
ローカルシェルを開き、次のコマンドを実行して、中国 (北京) リージョンにある i-id45678zxcvb および i-id45679zxcvb Linux ECS インスタンスで echo 123 コマンドをリモート実行します。
aliyun oos StartExecution --region cn-hangzhou --TemplateName ACS-ECS-BulkyRunCommand --Parameters '{"commandType":"RunShellScript", "commandContent":"echo 123", "targets":{"Type":"ResourceIds", "ResourceIds":["i-id45678zxcvb","i-id45679zxcvb"]}, "rateControl":{"maxErrors":0,"mode":"Concurrency"}, "OOSAssumeRole":"" }'
上記のコマンドでは、StartExecution 操作が呼び出され、ResourceIds パラメーターと commandContent パラメーターを含む ACS-ECS-BulkyRunCommand パブリックテンプレートが実行されます。JSON 形式の結果に "ExecutionId":"exec-xxxxx" が表示された場合は、コマンドが処理中であることを示します。ExecutionId パラメーターの値を記録し、次の ListExecutions コマンドで値を指定して、進捗状況と結果をクエリします。
aliyun oos ListExecutions --region cn-hangzhou --ExecutionId "exec-id123456zxcvb"
コマンドが処理中の場合、結果の Status パラメーターに Running に似た値が表示されます。TotalTasks パラメーターの値は、コマンドの総数を示します。SuccessTasks パラメーターの値は、成功したコマンドの数を示します。2 つの値の差は、保留中のコマンドの数を示します。
{
"Execution": {
"Outputs": {},
"TemplateName": "ACS-ECS-BulkyRunCommand",
"Parameters": {
"commandType": "RunShellScript",
"OOSAssumeRole": "",
"rateControl": {
"maxErrors": 0,
"mode": "Concurrency"
},
"targets": {
"ResourceIds": [
"i-id45678zxcvb","i-id45679zxcvb"
],
"Type": "ResourceIds"
},
"commandContent": "echo 123"
},
"Counters": {
"Failed": 0,
"Success": 0,
"Total": 0
},
"ExecutedBy": "aliyun-account1",
"LoopMode": "Automatic",
"Mode": "Automatic",
"TemplateId": "t-123456zxcvb",
"Status": "Running",
"TemplateVersion": "v2",
"SafetyCheck": "Skip",
"StartDate": "2019-10-15T07:22:03Z",
"ExecutionId": "exec-id123456zxcvb",
"CurrentTasks": []
},
"RequestId": "1A9B1817-0530-470C-8640-BADADADB220BD"
}
Outputs パラメーターの値に最終結果が表示されるまで、ListExecutions コマンドを複数回実行できます。次の図はこの例の最終結果を示しています。
カスタムテンプレートを作成する
必要なパラメーターが指定されたカスタムテンプレートを作成して実行できます。これにより、コマンドを実行するプロセスが簡素化されます。次のコードをカスタムテンプレートに追加します。ビジネス要件に基づいてテンプレートをカスタマイズできます。
aliyun oos CreateTemplate --region cn-hangzhou --TemplateName sample123 --Content '{
"FormatVersion": "OOS-2019-06-01",
"Tasks": [
{
"Name": "runCommand",
"Action": "ACS::ECS::RunCommand",
"Properties": {
"commandContent": "echo 1234",
"instanceId": "{{ ACS::TaskLoopItem }}",
"commandType": "RunShellScript"
},
"Loop": {
"Items": ["i-id45678zxcvb","i-id45679zxcvb"],
"Outputs": {
"commandOutputs": {
"AggregateType": "Fn::ListJoin",
"AggregateField": "commandOutput"
}
}
},
"Outputs": {
"commandOutput": {
"Type": "String",
"ValueSelector": "invocationOutput"
}
}
}
],
"Outputs": {
"commandOutputs": {
"Type": "List",
"Value": "{{ runCommand.commandOutputs }}"
}
}
}'
カスタムテンプレートを作成したら、次のコマンドを実行してテンプレートを実行します。
aliyun oos StartExecution --region cn-hangzhou --TemplateName sample123 --Parameters '{}'
この例では、StartExecution 操作が呼び出されて sample123 カスタムテンプレートが実行されます。追加のパラメーターを設定する必要はありません。前述の操作は、CLI でコマンドを実行することで実行されます。これらの操作は OOS コンソールでも実行できます。
詳細
Alibaba Cloud OOS は自動 O&M プラットフォームです。OOS を使用して、スケジュールされたイベント駆動型のクロスリージョン O&M タスクを管理できます。OOS を使用して、複数の O&M タスクを同時に処理することもできます。OOS を使用すると、ECS インスタンスでコマンドを実行できます。さらに、OOS を使用して必要な操作を実行できます。たとえば、ECS インスタンスの作成、リリース、開始、または停止、ECS インスタンスの構成の変更とネットワーク帯域幅のアップグレード、または ECS インスタンスへのディスクのアタッチを行うことができます。OOS の詳細については、DingTalk グループに参加して OOS カスタマーサービスにお問い合わせください。DingTalk グループ番号は 23330931 です。OOS は、グループ内でオンラインサポートを提供しています。
OOS コンソールにログインするには、https://oos.console.aliyun.com にアクセスしてください。