複数の Elastic Compute Service (ECS) インスタンスにまたがって、ソフトウェアのインストール、構成の更新、ログの収集などの反復的なタスクを手動で実行するのは非効率です。クラウドアシスタントは、複数のインスタンスにまたがってスクリプト (Shell や PowerShell など) を安全かつ確実に実行します。
手順
コンソール
ECS コンソール - ECS クラウドアシスタントに移動します。
上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。
[ECS Cloud Assistant] ページの右上隅にある [コマンドの作成/実行] をクリックします。
[コマンド情報] セクションで、次の設定を構成します:
[コマンド内容]: [パラメーターの使用] を有効にできます。
[実行して保存] を選択した場合、Base64 でエンコードされたコマンドのペイロードは 18 KB を超えることはできず、[実行] を選択した場合は 24 KB を超えることはできません。
カスタムパラメーター:
{{parameter}}形式でパラメーターを定義し、手動で値を割り当てることで、コマンドの再利用や動的な値の割り当てが可能になります。組み込みパラメーター: 組み込みパラメーターは、実行時に Cloud Assistant によって自動的に値が設定されます。例:
{{ACS::RegionId}}(リージョン ID) 、{{ACS::InstanceId}}(インスタンス ID) 。
#!/bin/bash # 例 # {{name}} は、値を割り当てる必要があるカスタムパラメーターです。 echo {{name}} # {{ACS::RegionId}} は、値を割り当てる必要がない組み込みパラメーターです。 echo {{ACS::RegionId}}[実行計画]:
[ドライランのみ実行]: コマンドは実行されません。リクエストパラメーター、インスタンス環境、Cloud Assistant エージェントのステータスなどの事前チェックのみが実行されます。
[スケジュールで実行]:
[固定間隔で実行]: レート式で定義された固定間隔でコマンドを実行します。
間隔は 60 秒から 7 日の間で、コマンドのタイムアウトよりも長くする必要があります。
[時刻ベースのスケジュールで実行]: 複雑なタスクを柔軟にスケジューリングするには、Cron 式を使用します。
[ユーザー名]: デフォルトは
root(Linux) またはSystem(Windows) です。セキュリティのため、最小権限の原則に従い、 root 以外のユーザーを使用することを推奨します。[実行パス]: スクリプトがインスタンス内で実行されるディレクトリです。デフォルトでは、Linux では
/root、Windows ではC:\Windows\system32です。スクリプトを意図したパスで確実に実行させるには、スクリプトの冒頭でcdコマンドを使用してください。[タイムアウト]: デフォルトは 60 秒です。タイムアウトは 10 秒から 86,400 秒 (24 時間) の間の値で設定できます。
[タスク停止範囲]:
[コマンドプロセス]: タスクが終了したときにスクリプトプロセスのみを停止します。
[コマンドプロセスツリー]: タスクが終了したときに、プロセスツリー全体 (スクリプトプロセスとそのすべての子プロセス) を停止します。
[インスタンスの選択] または [マネージドインスタンスの選択] セクションで、コマンドのターゲットインスタンスを選択します。
最大 100 個のインスタンスを選択できます。
タスクを開始するには、[実行して保存] または [実行] をクリックします。
CLI
準備
RunCommandAPI は、CommandContentパラメーターをプレーンテキストまたは Base64 でエンコードされたコンテンツとして受け入れます。Base64 でエンコードされたコンテンツを使用する場合は、ContentEncodingをBase64に設定する必要があります。以下のコマンドを使用して、スクリプトコンテンツを Base64 でエンコードします:Linux / macOS
# 文字列 "hello world" をエンコードします # 末尾の改行をエンコードしないように -n を使用します echo -n "hello world" | base64 # 出力: aGVsbG8gd29ybGQ=Windows (PowerShell)
# 文字列 "hello world" をエンコードします [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("hello world")) # 出力: aGVsbG8gd29ybGQ=コマンドの実行
コマンドを実行するには、
aliyun ecs RunCommandコマンドを使用します。パラメーターの詳細については、「RunCommand」をご参照ください。例 1: 単一のインスタンスでコマンドをすぐに実行する
# "yum -y update" の Base64 エンコード文字列は "eXVtIC15IHVwZGF0ZQ==" です aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \例 2: 複数のインスタンスでコマンドを実行する
# --InstanceId.N パラメーターを複数回使用して、複数のインスタンスを指定します aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \ --InstanceId.2 'i-bp1************de02' \ --InstanceId.3 'i-bp1************de03'例 3: cron スケジュールタスクを作成する
# Frequency パラメーターは cron 式とタイムゾーンを使用します # 例: Asia/Shanghai タイムゾーンで 2024 年の毎日 12:00 PM に実行 aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --RepeatMode 'Period' \ --Frequency '0 0 12 * * ? 2024 Asia/Shanghai' \ --InstanceId.1 'i-bp1************de01'
実行結果の照会
RunCommandはInvokeIdを返します。返されたInvokeIdを使用してaliyun ecs DescribeInvocationResultsコマンドで実行結果を照会します。パラメーターの詳細については、「DescribeInvocationResults」をご参照ください。# <invoke_id> を実際の InvokeId に置き換えてください aliyun ecs DescribeInvocationResults --RegionId 'cn-hangzhou' --InvokeId '<invoke_id>'レスポンスでは、
Outputフィールドにスクリプトの標準出力 (STDOUT) が含まれ、ErrorInfoまたはErrorMsgフィールドにエラーの詳細が含まれます。
制限事項
インスタンス数: 1 回の API 呼び出しでターゲットにできるインスタンスの最大数は 100 です。この制限を引き上げるには、「クォータの管理」をご参照ください。
コマンド保存数: デフォルトでは、1 つの Alibaba Cloud リージョンに最大 500 個の Cloud Assistant コマンドを保存できます。このクォータは、ECS の使用状況に基づいて増加する場合があります。この制限を引き上げるには、「クォータの管理」をご参照ください。
保存せずに即時実行するコマンドは、この保存数のクォータには含まれません。。
機能とクライアントバージョンの依存関係: 一部の高度な機能は、Cloud Assistant クライアントの特定のバージョンに依存します。詳細については、「機能とバージョン」をご参照ください。
本番環境での推奨事項
べき等性の確保
CLI または SDK を介して
RunCommandAPI を呼び出す場合、ClientTokenパラメーターを設定してべき等性を確保することを推奨します。これにより、ネットワークの再試行によるコマンドの重複実行を防ぐことができます。監視とアラート
クラウドアシスタントの実行ステータス、特に失敗したタスクを監視します。EventBridge または CloudMonitor を通じてクラウドアシスタントのイベントをサブスクライブして、コマンドの失敗に対するアラートを設定できます。これにより、問題を迅速に検出して解決できます。
よくある質問
Q: ECS インスタンス上の Cloud Assistant エージェントのバージョンを確認するにはどうすればよいですか?
A: コンソールから、またはインスタンスにログインしてバージョンを確認できます。詳細な手順については、「Cloud Assistant エージェントのインストール」をご参照ください。
Q: [固定間隔で実行] が設定されたスケジュールされたタスクは、作成直後に実行されますか、それとも最初の間隔が経過した後にのみ実行されますか?
A: すぐには実行されません。最初の実行は、指定された間隔が経過した後に行われます。スケジュールは固定間隔にのみ従います。たとえば、10:00 に 10 分間隔のタスクを作成した場合、10:10、10:20 のように実行されます。
Q: コマンドの実行に失敗しました。どうすればトラブルシューティングできますか?
A: 1. コンソールの実行結果ページで詳細な Output ログを表示して、エラーメッセージを分析します。
2. 実行ユーザーが関連するファイルとディレクトリに対する読み取り、書き込み、実行の権限を持っていることを確認します。
3. スクリプトの構文を検証し、手動で実行したときに正常に実行できることを確認します。
4. インスタンスが [実行中] 状態であり、ネットワーク接続が正常であることを確認します。
5. コマンドが ClientNeedUpgrade エラーを返す場合は、Cloud Assistant エージェントをアップグレードしてください。
詳細については、「実行結果の確認と一般的な問題のトラブルシューティング」をご参照ください。