

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# AWS Systems Manager Run Command
<a name="run-command"></a>

AWS Systems Manager のツールである Run Command では、マネージドノードの設定を安全にリモートで管理することができます。マネージドノードは、Systems Manager のために設定された「[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)」環境内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは非 EC2 マシンのことです。Run Command を使用すると、一般的な管理タスクを自動化し、1 回限りの大規模な設定変更を実行できます。AWS マネジメントコンソール の Run Command、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、または AWS SDK から を使用できます。Run Command は追加料金なしで提供されています。Run Command の使用を開始するには、[Systems Manager コンソール](https://console.aws.amazon.com//systems-manager/run-command)を開きます。ナビゲーションペインで、**[Run Command]** を選択します。

管理者は、Run Command を使用することで、アプリケーションのインストールまたはブートストラップ、デプロイ パイプラインの構築、Auto Scaling グループからインスタンスが削除された時のログ ファイルのキャプチャ、インスタンスの Windows ドメインへの結合といったタスクを実行できます。

API をサポートしているシステムの分散特性により、Run Command API は結果整合性モデルに従います。つまり、リソースに影響を及ぼす、実行した API コマンドの結果は、その後に実行するすべてのコマンドにすぐには表示されない可能性があります。前の API コマンドの直後に API コマンドを実行する場合は、この点に留意する必要があります。

**開始方法**  
次の表には、Run Command の使用を開始するのに役立つ情報が含まれています。


****  

| Topic | Details | 
| --- | --- | 
|  [AWS Systems Manager のマネージドノードのセットアップ](systems-manager-setting-up-nodes.md)  |  [ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境で、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスと非 EC2 マシンのセットアップ要件を完了していることを確認します。  | 
|  [Systems Manager を利用したハイブリッド環境およびマルチクラウド環境でのノードの管理](systems-manager-hybrid-multicloud.md)  |  (オプション) オンプレミスサーバーと VM を AWS に登録し、Run Command で管理できるようにします。  | 
|  [Systems Manager を利用したエッジデバイスの管理](systems-manager-setting-up-edge-devices.md)  |  (オプション) Run Command を使ってエッジデバイスを管理できるように設定します。  | 
|  [マネージドノードでのコマンドの実行](running-commands.md)  |  AWS マネジメントコンソール を使用して、1 つ以上のマネージドノードを対象とするコマンドを実行する方法を学習します。  | 
|  [Run Command のチュートリアル](run-command-walkthroughs.md)  |  Tools for Windows PowerShell または AWS CLI を使用してコマンドを実行する方法について説明します。  | 

**EventBridge のサポート**  
この Systems Manager のツールは、Amazon EventBridge ルールで*イベント*タイプおよび*ターゲット*タイプとしてサポートされています。詳細については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」および「[リファレンス: Systems Manager 用の Amazon EventBridge イベントパターンとタイプ](reference-eventbridge-events.md)」を参照してください。

**詳細情報**  
+ [EC2 インスタンスでリモートに Run Command を実行する (10 分間のチュートリアル)](https://aws.amazon.com/getting-started/hands-on/remotely-run-commands-ec2-instance-systems-manager/)
+ 「*Amazon Web Services 全般のリファレンス*」の「[Systems Manager Service Quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)」
+ [AWS Systems Manager API リファレンス](https://docs.aws.amazon.com/systems-manager/latest/APIReference/) 

**Topics**
+ [Run Command を設定する](run-command-setting-up.md)
+ [マネージドノードでのコマンドの実行](running-commands.md)
+ [コマンドでの終了コードの使用](run-command-handle-exit-status.md)
+ [コマンドのステータスについて](monitor-commands.md)
+ [Run Command のチュートリアル](run-command-walkthroughs.md)
+ [Systems Manager Run Command のトラブルシューティング](troubleshooting-remote-commands.md)

# Run Command を設定する
<a name="run-command-setting-up"></a>

AWS Systems Manager のツールである Run Command を使用してノードを管理する前に、コマンドを実行するユーザーの AWS Identity and Access Management (IAM) ポリシーを設定する必要があります。IAM ポリシーで `SendCommand` アクションにグローバル条件キーを使用する場合は、`aws:ViaAWSService` 条件キーを対象に含め、かつブール値を `true` に設定する必要があります。以下に例を示します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/YourDocument"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": [
                        "vpce-1234567890abcdef0"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/YourDocument"
            ],
            "Condition": {
                "Bool": {
                    "aws:ViaAWSService": "true"
                }
            }
        }
    ]
}
```

------

また、Systems Manager 用のノードを設定する必要があります。詳細については、「[AWS Systems Manager のマネージドノードのセットアップ](systems-manager-setting-up-nodes.md)」を参照してください。

マネージドノードのセキュリティ体制や日常管理を最小限に抑えるために、以下のオプションのセットアップタスクを実行することを強くお勧めします。

Amazon EventBridge を使用してコマンドの実行をモニタリングする  
EventBridge を使用して、コマンド実行ステータスの変更を記録できます。状態の遷移があると実行されるルールや、関心のある 1 以上の遷移があると実行されるルールを作成できます。EventBridge イベントが発生した場合、ターゲットアクションとして Run Command を指定することもできます。詳細については、「[Systems Manager イベント用の EventBridge を設定する](monitoring-systems-manager-events.md)」を参照してください。

Amazon CloudWatch Logs を使用してコマンドの実行をモニタリングする  
すべてのコマンド出力とエラーログを Amazon CloudWatch Logs グループに定期的に送信するように Run Command を設定できます。これらの出力ログは、ほぼリアルタイムでモニタリングし、特定の語句、値、またはパターンを検索して、検索に基づいてアラームを作成できます。詳細については、「[Run Command の Amazon CloudWatch Logs の設定](sysman-rc-setting-up-cwlogs.md)」を参照してください。

特定のマネージドノードへの Run Command アクセスを制限  
AWS Identity and Access Management (IAM) を使用して、マネージドノードでコマンドを実行するユーザーの能力を制限することができます。具体的には、特定のタグ付けされたマネージドノードでのみユーザーがコマンドを実行できるようにする条件を含む IAM ポリシーを作成できます。詳細については、「[タグによる Run Command アクセスを制限](#tag-based-access)」を参照してください。

## タグによる Run Command アクセスを制限
<a name="tag-based-access"></a>

このセクションでは、IAM ポリシーでタグ条件を指定して、マネージドノードでコマンドを実行するユーザーの機能を制限する方法について説明します。マネージドノードには、Systems Manager に設定された[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境で Amazon EC2 インスタンスと非 EC2 ノードが含まれます。情報は明示されていませんが、マネージド AWS IoT Greengrass へコアデバイスのアクセスを制限することもできます。開始するには、AWS IoT Greengrass デバイスのタグ付けが必要です。詳細については、「*AWS IoT Greengrass Version 2 デベロッパーガイド*」の｢[AWS IoT Greengrass Version 2 リソースのタグ付け](https://docs.aws.amazon.com/greengrass/v2/developerguide/tag-resources.html)｣を参照してください。

ユーザーが特定のタグが付けられたノードでのみコマンドを実行できるようにする条件を含む IAM ポリシーを作成して、コマンドの実行を特定のマネージドノードに制限できます。次の例で、ユーザーは、任意のノード (`Resource: arn:aws:ec2:*:*:instance/*`) で任意の SSM ドキュメント (`Resource: arn:aws:ssm:*:*:document/*`) を使うことにより、そのノードが Finance WebServer (`ssm:resourceTag/Finance: WebServer`) であるという条件で、Run Command (`Effect: Allow, Action: ssm:SendCommand`) を使用できます。タグ付けされていないノードや、`Finance: WebServer` 以外のタグを持つノードにコマンドをユーザーが送信した場合、実行結果は `AccessDenied` と表示されます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":[
            "arn:aws:ssm:*:*:document/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":[
            "arn:aws:ec2:*:*:instance/*"
         ],
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/Finance":[
                  "WebServers"
               ]
            }
         }
      }
   ]
}
```

------

複数のタグ付けられたマネージドノードでユーザーがコマンドを実行できるよう許可する IAM ポリシーを作成できます。次のポリシーでは、ユーザーは 2 つのタグがあるマネージドノードでコマンドを実行できます。これらの両方のタグ付けされていていないノードにユーザーがコマンドを送信した場合、実行結果は `AccessDenied` と表示されます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":"*",
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/tag_key1":[
                  "tag_value1"
               ],
               "ssm:resourceTag/tag_key2":[
                  "tag_value2"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":[
            "arn:aws:ssm:us-west-1::document/AWS-*",
            "arn:aws:ssm:us-east-2::document/AWS-*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:UpdateInstanceInformation",
            "ssm:ListCommands",
            "ssm:ListCommandInvocations",
            "ssm:GetDocument"
         ],
         "Resource":"*"
      }
   ]
}
```

------

タグ付けられたマネージドノードの複数のグループでユーザーがコマンドを実行できるようにする IAM ポリシーを作成することもできます。次のサンプルポリシーでは、ユーザーはタグ付けされたノードのいずれかのグループ、または両方のグループでコマンドを実行できます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":"*",
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/tag_key1":[
                  "tag_value1"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":"*",
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/tag_key2":[
                  "tag_value2"
               ]
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:SendCommand"
         ],
         "Resource":[
            "arn:aws:ssm:us-west-1::document/AWS-*",
            "arn:aws:ssm:us-east-2::document/AWS-*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ssm:UpdateInstanceInformation",
            "ssm:ListCommands",
            "ssm:ListCommandInvocations",
            "ssm:GetDocument"
         ],
         "Resource":"*"
      }
   ]
}
```

------

IAM ポリシーの作成の詳細については、「*IAM ユーザーガイド*」の「[マネージドポリシーとインラインポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)」を参照してください。マネージドノードへのタグ付けの詳細については、「*AWS Resource Groups ユーザーガイド*」の｢[タグエディタ](https://docs.aws.amazon.com/ARG/latest/userguide/tag-editor.html)｣を参照してください。

# マネージドノードでのコマンドの実行
<a name="running-commands"></a>

このセクションでは、AWS Systems Manager コンソールからマネージドノードにコマンドを送信する方法について説明します。このセクションでは、コマンドをキャンセルする方法についても説明しています。

ノードが var ディレクトリの `noexec` マウントオプションで設定されている場合、Run Command はコマンドを正常に実行できないことに注意してください。

**重要**  
Run Command を使用してコマンドを送信する場合は、パスワード、設定データ、その他のシークレットなどの機密情報をプレーンテキスト形式で含めないでください。アカウント内のすべての Systems Manager API アクティビティは、AWS CloudTrail ログの S3 バケットにログ記録されます。つまり、その S3 バケットへのアクセス権を持つユーザーは、これらの秘密のプレーンテキスト値を表示できます。このため、Systems Manager オペレーションで使用する機密データを暗号化するために、`SecureString` パラメータを作成して使用することをお勧めします。  
詳細については、「[IAM ポリシーを使用して Parameter Store パラメータへのアクセスを制限する](sysman-paramstore-access.md)」を参照してください。

**実行履歴の保持**  
各コマンドの履歴は、最大 30 日利用可能です。さらに、すべてのログファイルのコピーを Amazon Simple Storage Service に保存するか、すべての API 呼び出しの監査証跡を AWS CloudTrail に維持することができます。

**関連情報**  
他のツールを使用してコマンドを送信する方法については、次のトピックを参照してください。
+ [チュートリアル: Run Command で AWS Tools for Windows PowerShell を使用する](walkthrough-powershell.md) または、[AWS Tools for PowerShell Cmdlet Reference の AWS Systems Manager セクション](https://docs.aws.amazon.com/powershell/latest/reference/items/AWS_Systems_Manager_cmdlets.html) の例。
+ [チュートリアル: Run Command で AWS CLI を使用する](walkthrough-cli.md) または [SSM CLI リファレンス](https://docs.aws.amazon.com/cli/latest/reference/ssm/) の例

**Topics**
+ [コンソールからコマンドを実行する](running-commands-console.md)
+ [特定のドキュメントバージョンを使用したコマンドの実行](run-command-version.md)
+ [コマンドを大規模に実行する](send-commands-multiple.md)
+ [コマンドをキャンセルする](cancel-run-command.md)

# コンソールからコマンドを実行する
<a name="running-commands-console"></a>

AWS マネジメントコンソールから Run Command (AWS Systems Manager のツール) を使って、マネージドノードにログインせずに設定することができます。このトピックでは、Run Command を使用してマネージドノードの [SSM Agent を更新](run-command-tutorial-update-software.md#rc-console-agentexample)する方法の例を示します。

**[開始する前に]**  
Run Command を使用してコマンドを送信する前に、マネージドノードが Systems Manager の[設定要件](systems-manager-setting-up-nodes.md)を満たすことを確認します。

**Run Command を使用してコマンドを送信するには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. [**Run command (コマンドの実行)**] を選択します。

1. [**Command document**] リストで、Systems Manager ドキュメントを選択します。

1. [**Command parameters**] セクションで、必須パラメータの値を指定します。

1. **[Targets]** (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

1. **[その他のパラメータ]** で、以下の操作を行います。
   + **[コメント]** に、このコマンドに関する情報を入力します。
   + **[タイムアウト (秒)]** に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) モニタリング用のコマンドに適用する CloudWatch アラームを選択します。CloudWatch アラームをコマンドにアタッチするには、コマンドを実行する IAM プリンシパルに `iam:createServiceLinkedRole` アクションの権限が必要です。CloudWatch アラームの詳細については、「[Amazon CloudWatch でのアラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」を参照してください。アラームがアクティブ化されると、保留中のコマンド呼び出しは実行されません。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

1. [**Run** (実行)] を選択します。

コマンドのキャンセルの詳細については、[コマンドをキャンセルする](cancel-run-command.md) を参照してください。

## コマンドを再実行する
<a name="run-command-rerun"></a>

Systems Manager には、Systems Manager コンソールの **Run Command** ページからコマンドを再実行できる 2 つのオプションがあります。
+ **Rerun (再実行)**: このボタンを使用すると、変更を加えずに同じコマンドを実行できます。
+ **Copy to new (新規にコピー)**: このボタンをクリックすると、1 つのコマンドの設定が新しいコマンドにコピーされ、実行前にこれらの設定を編集できます。

**コマンドを再実行するには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. 再実行するコマンドを選択します。コマンドの詳細ページで、コマンドを実行した直後にコマンドを再実行できます。または、以前に実行したコマンドを [**Command history**] (コマンド履歴) タブから選択することもできます。

1. [**Rerun (再実行)**] を選択して同じコマンドを変更せずに実行するか、[**Copy to new (新規にコピー)**] を選択して、実行する前にコマンド設定を編集します。

# 特定のドキュメントバージョンを使用したコマンドの実行
<a name="run-command-version"></a>

ドキュメントバージョンパラメータを使用して、コマンドの実行時に使用する AWS Systems Manager ドキュメントのバージョンを指定できます。このパラメータに指定できるオプションは以下のとおりです。
+ \$1DEFAULT
+ \$1LATEST
+ バージョン番号

ドキュメントバージョンパラメータを使用してコマンドを実行するには、次の手順を実行します。

------
#### [ Linux ]

**ローカルの Linux マシンで AWS CLI を使用してコマンドを実行するには**

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 利用可能なすべてのドキュメントを表示します。

   このコマンドでは、AWS Identity and Access Management(IAM) アクセス許可に基づいて、アカウントで利用可能なすべてのドキュメントが表示されます。

   ```
   aws ssm list-documents
   ```

1. ドキュメントのバージョンを一覧表示するには、次のコマンドを実行します。*document name* を自分の情報に置き換えます。

   ```
   aws ssm list-document-versions \
       --name "document name"
   ```

1. SSM ドキュメントバージョンを実行するコマンドを実行するには、次のコマンドを使用します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   ```
   aws ssm send-command \
       --document-name "AWS-RunShellScript" \
       --parameters commands="echo Hello" \
       --instance-ids instance-ID \
       --document-version '$LATEST'
   ```

------
#### [ Windows ]

**ローカル Windows マシンで AWS CLI を使用してコマンドを実行するには**

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 利用可能なすべてのドキュメントを表示します。

   このコマンドでは、AWS Identity and Access Management(IAM) アクセス許可に基づいて、アカウントで利用可能なすべてのドキュメントが表示されます。

   ```
   aws ssm list-documents
   ```

1. ドキュメントのバージョンを一覧表示するには、次のコマンドを実行します。*document name* を自分の情報に置き換えます。

   ```
   aws ssm list-document-versions ^
       --name "document name"
   ```

1. SSM ドキュメントバージョンを実行するコマンドを実行するには、次のコマンドを使用します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   ```
   aws ssm send-command ^
       --document-name "AWS-RunShellScript" ^
       --parameters commands="echo Hello" ^
       --instance-ids instance-ID ^
       --document-version "$LATEST"
   ```

------
#### [ PowerShell ]

**Tools for PowerShell を使用してコマンドを実行するには**

1. AWS Tools for PowerShell (Tools for Windows PowerShell) をインストールして設定します (まだインストールしていない場合)。

   詳細については、「[AWS Tools for PowerShell のインストール](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)」を参照してください。

1. 利用可能なすべてのドキュメントを表示します。

   このコマンドでは、AWS Identity and Access Management(IAM) アクセス許可に基づいて、アカウントで利用可能なすべてのドキュメントが表示されます。

   ```
   Get-SSMDocumentList
   ```

1. ドキュメントのバージョンを一覧表示するには、次のコマンドを実行します。*document name* を自分の情報に置き換えます。

   ```
   Get-SSMDocumentVersionList `
       -Name "document name"
   ```

1. SSM ドキュメントバージョンを実行するコマンドを実行するには、次のコマンドを使用します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

   ```
   Send-SSMCommand `
       -DocumentName "AWS-RunShellScript" `
       -Parameter @{commands = "echo helloWorld"} `
       -InstanceIds "instance-ID" `
       -DocumentVersion $LATEST
   ```

------

# コマンドを大規模に実行する
<a name="send-commands-multiple"></a>

AWS Systems Manager のツールである Run Command を使用すると、`targets` を使用してマネージドノードのフリートでコマンドを実行できます。`targets` パラメータは、マネージドノードに指定したタグに基づいて `Key,Value` の組み合わせを受け取ります。コマンドを実行すると、システムは指定されたタグと一致するすべてのマネージドノードでコマンドの実行を試みます。マネージドインスタンスへのタグ付けの詳細については、「AWS リソースのタグ付けユーザーガイド」の「[AWS リソースのタグ付け](https://docs.aws.amazon.com/tag-editor/latest/userguide/tag-editor.html)」を参照してください。マネージド IoT デバイスへのタグ付けの詳細については、「*AWS IoT Greengrass Version 2 デベロッパーガイド*」の ｢[AWS IoT Greengrass Version 2 リソースのタグ付け](https://docs.aws.amazon.com/greengrass/v2/developerguide/tag-resources.html)｣を参照してください。

以下のセクションで説明しているように、`targets` パラメータを使用して、特定のマネージドノード ID のリストをターゲットにできます。

数百または数千のマネージドノードでコマンド実行を制御するために、Run Command は、リクエストを同時に処理できるノード数とコマンドがキャンセルされるまでに投げられるエラー数を制限するためのパラメータも用意されています。

**Topics**
+ [複数のマネージドノードをターゲットにする](#send-commands-targeting)
+ [レート制御の使用](#send-commands-rate)

## 複数のマネージドノードをターゲットにする
<a name="send-commands-targeting"></a>

タグ、AWS リソースグループ名、またはマネージドノード ID を指定してコマンドを実行しマネージドノードをターゲットにできます。

次の例では、AWS Command Line Interface (AWS CLI) から Run Command を使用した場合のコマンド形式を示します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。このセクションのサンプルコマンドは、`[...]` で省略されています。

**例 1: タグをターゲットにする**

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:tag-name,Values=tag-value \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:tag-name,Values=tag-value ^
    [...]
```

------

**例 2: AWS リソースグループを名前に基づいてターゲットにする**

コマンドごとに最大 1 つのリソースグループ名を指定できます。リソースグループを作成する場合は、リソースタイプとして `AWS::SSM:ManagedInstance` と `AWS::EC2::Instance` をグループ化の条件に含めることをお勧めします。

**注記**  
リソースグループをターゲットとするコマンドを送信するには、そのグループに属するリソースをリストまたは表示する AWS Identity and Access Management (IAM) 許可が付与されている必要があります。詳細については、*AWS Resource Groups ユーザーガイド* の「[許可の設定](https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-prereqs.html#gettingstarted-prereqs-permissions)」を参照してください。

------
#### [ Linux & macOS ]

```
aws ssm send-command \    
    --document-name document-name \
    --targets Key=resource-groups:Name,Values=resource-group-name \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^    
    --document-name document-name ^
    --targets Key=resource-groups:Name,Values=resource-group-name ^
    [...]
```

------

**例 3: リソースタイプにより AWS リソースグループをターゲットにする**

コマンドごとに最大 5 つのリソースグループタイプを指定できます。リソースグループを作成する場合は、リソースタイプとして `AWS::SSM:ManagedInstance` と `AWS::EC2::Instance` をグループ化の条件に含めることをお勧めします。

**注記**  
リソースグループをターゲットとするコマンドを送信するには、そのグループに属するリソースをリストまたは表示する IAM アクセス許可が付与されている必要があります。詳細については、*AWS Resource Groups ユーザーガイド* の「[許可の設定](https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-prereqs.html#gettingstarted-prereqs-permissions)」を参照してください。

------
#### [ Linux & macOS ]

```
aws ssm send-command \    
    --document-name document-name \
    --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^    
    --document-name document-name ^
    --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 ^
    [...]
```

------

**例 4: インスタンス ID をターゲットにする**

以下の例では、`instanceids` キー と `targets` パラメータを使用してマネージドノードをターゲットにする方法を示します。各デバイスには mi-*ID\$1number* が割り当てられているので、このキーを使ってマネージド AWS IoT Greengrass コアデバイスをターゲットにすることができます。デバイス ID は AWS Systems Manager のツールである Fleet Manager で確認できます。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 ^
    [...]
```

------

`Development`、`Test`、`Pre-production`、`Production` の `Environment` と `Values` という名前の `Key` を使用して、複数の異なる環境のマネージドノードに対してタグ付けされると、次の構文の `targets` パラメータを使用してこれらの環境の *1 つ*にあるすべてのマネージドノードにコマンドを送信できます。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Environment,Values=Development \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Environment,Values=Development ^
    [...]
```

------

`Values` リストに追加して、他の環境の追加マネージドノードをターゲットにすることができます。カンマを使用して項目を区切ります。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Environment,Values=Development,Test,Pre-production \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Environment,Values=Development,Test,Pre-production ^
    [...]
```

------

**バリエーション**: 複数の `Key` 条件を使用してターゲットを絞り込む

複数の `Key` 条件を含めて、コマンドのターゲットの数を絞り込むことができます。複数の `Key` 条件を含めると、システムは*全て*の条件を満たマネージドノードをターゲットにします。次のコマンドは、Finance Department *および*データベース サーバーロールに対してタグが付いているすべてのマネージドノードをターゲットとします。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database ^
    [...]
```

------

**バリエーション**: `Key` および `Value` 条件を使用する

前の例を拡大し、`Values` 条件の項目を追加して含めて、複数の部門とサーバーロールを対象にすることができます。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^
    [...]
```

------

**バリエーション**: 複数の `Values` 条件を使用してタグ付けされたマネージドノードをターゲットにします

複数の異なる環境のマネージドノードに対して `Sales` および `Finance` のうち `Department` と `Values` という `Key` を使用してタグ付けされた場合、次の `targets` パラメータを使用した構文でこれらの環境のすべてのマネージドノードに対してコマンドを送信できます。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Department,Values=Sales,Finance \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Department,Values=Sales,Finance ^
    [...]
```

------

各キーには、最大 5 つのタグキーと 5 つの値を指定できます。

タグキー (タグの名前) またはタグ値にスペースが含まれる場合、次の例に示すようにタグキーまたは値を疑問符で囲みます。

**例**: `Value` タグにスペースが含まれる場合

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:OS,Values="Windows Server 2016" \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:OS,Values="Windows Server 2016" ^
    [...]
```

------

**例**: `tag` キーと `Value` にスペースが含まれる場合

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key="tag:Operating System",Values="Windows Server 2016" \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key="tag:Operating System",Values="Windows Server 2016" ^
    [...]
```

------

**例**: `Values` のリスト内にある 1 つの項目にスペースが含まれる場合

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" ^
    [...]
```

------

## レート制御の使用
<a name="send-commands-rate"></a>

コマンドがグループ内のマネージドノードに送信されるレートは、*同時実行制御*と*エラー制御*を使用して制御できます。

**Topics**
+ [同時実行制御を使用する](#send-commands-velocity)
+ [エラー制御を使用する](#send-commands-maxerrors)

### 同時実行制御を使用する
<a name="send-commands-velocity"></a>

`max-concurrency` パラメータ **[Run a command]** (コマンドを実行) ページの **[Concurrency]** (同時実行数) オプションを使用して、同時にコマンドを実行するマネージドノードの数を制御できます。マネージドノードの絶対数 (**10** など) またはターゲットセットの割合 (**10%** など) を指定できます。キューシステムにより、コマンドは 1 つのノードに送信され、システムがこの最初の呼び出しを確認するのを待ってから、さらに 2 つのノードにコマンドが送信されます。システムで `max-concurrency` の値に達するまで、指数関数的に多くのノードにコマンドを送ります。`max-concurrency` のデフォルト値は 50 です。次の例は、`max-concurrency` パラメータの値を指定する方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --max-concurrency 10 \
    --targets Key=tag:Environment,Values=Development \
    [...]
```

```
aws ssm send-command \
    --document-name document-name \
    --max-concurrency 10% \
    --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --max-concurrency 10 ^
    --targets Key=tag:Environment,Values=Development ^
    [...]
```

```
aws ssm send-command ^
    --document-name document-name ^
    --max-concurrency 10% ^
    --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^
    [...]
```

------

### エラー制御を使用する
<a name="send-commands-maxerrors"></a>

コマンドの実行を数百または数千のマネージドノードに制限するには、`max-errors` パラメータを使用してエラー制限を設定することもできます ([**Run a command**] (コマンドを実行) ページの [**Error threshold**] (エラーのしきい値) フィールド)。このパラメータは、システムが追加のマネージドノードへのコマンドの送信を停止するまでに許可されるエラーの数を指定します。エラーの絶対数 (**10** など) またはターゲットセットのパーセント数 (**10%** など) を指定できます。たとえば、**3** を指定した場合、4 番目のエラーが受信されると、システムからコマンドが送信されなくなります。**0** を指定した場合、最初のエラー結果が返されると、追加のマネージドノードへのコマンド送信を停止します。コマンドの送信先のマネージノード数が 50 で `max-errors` を **10%** に設定した場合、6 番目のエラーが受信されると、システムから他のノードにコマンドが送信されなくなります。

`max-errors` に達したときに既にコマンドを実行中の呼び出しについては、完了はできますが、一部が失敗する場合があります。呼び出しの失敗数が `max-errors` を超えないようにするには、`max-concurrency` を **1** に設定して、一度に 1 つの呼び出しが処理されるようにします。max-errors のデフォルト値は 0 です。次の例は、`max-errors` パラメータの値を指定する方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name document-name \
    --max-errors 10 \
    --targets Key=tag:Database,Values=Development \
    [...]
```

```
aws ssm send-command \
    --document-name document-name \
    --max-errors 10% \
    --targets Key=tag:Environment,Values=Development \
    [...]
```

```
aws ssm send-command \
    --document-name document-name \
    --max-concurrency 1 \
    --max-errors 1 \
    --targets Key=tag:Environment,Values=Production \
    [...]
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name document-name ^
    --max-errors 10 ^
    --targets Key=tag:Database,Values=Development ^
    [...]
```

```
aws ssm send-command ^
    --document-name document-name ^
    --max-errors 10% ^
    --targets Key=tag:Environment,Values=Development ^
    [...]
```

```
aws ssm send-command ^
    --document-name document-name ^
    --max-concurrency 1 ^
    --max-errors 1 ^
    --targets Key=tag:Environment,Values=Production ^
    [...]
```

------

# コマンドをキャンセルする
<a name="cancel-run-command"></a>

 コマンドの状態が [Pending] (保留中) または [Executing] (実行中) であるとサービスに示されている間は、コマンドのキャンセルを試行できます。ただし、まだコマンドがこれらの状態のいずれかであっても、コマンドがキャンセルされ、その基盤であるプロセスが停止することは保証されません。

**コンソールを使用してコマンドをキャンセルするには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. キャンセルするコマンド呼び出しを選択します。

1. [**Cancel command**] を選択します。

**AWS CLI を使用してコマンドをキャンセルするには**  
以下のコマンドを実行します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

```
aws ssm cancel-command \
    --command-id "command-ID" \
    --instance-ids "instance-ID"
```

------
#### [ Windows ]

```
aws ssm cancel-command ^
    --command-id "command-ID" ^
    --instance-ids "instance-ID"
```

------

キャンセルしたコマンドのステータスについては、「[コマンドのステータスについて](monitor-commands.md)」を参照してください。

# コマンドでの終了コードの使用
<a name="run-command-handle-exit-status"></a>

場合によっては、終了コードを使用して、コマンドの処理方法を管理する必要があるかもしれません。

## コマンドで終了コードを指定する
<a name="command-exit-codes"></a>

AWS Systems Manager のツールである Run Command を使用すると、終了コードを指定してコマンドの処理方法を決定できます。デフォルトでは、スクリプトで最後に実行されたコマンドの終了コードは、スクリプト全体の終了コードとしてレポートされます。たとえば、3 つのコマンドを含むスクリプトがあるとします。最初のコマンドは失敗しますが、その次のコマンドは成功します。最後のコマンドが成功したため、実行のステータスは `succeeded` としてレポートされます。

**シェルスクリプト**  
最初のコマンド失敗時にスクリプト全体を失敗として処理するには、シェルの条件ステートメントを含めて、最後のコマンドが失敗する前にいずれかのコマンドが失敗した場合にスクリプトを終了させることができます。以下の方法を使用します。

```
<command 1>
    if [ $? != 0 ]
    then
        exit <N>
    fi
    <command 2>
    <command 3>
```

以下の例では、最初のコマンドが失敗すると、スクリプト全体が失敗します。

```
cd /test
    if [ $? != 0 ]
    then
        echo "Failed"
        exit 1
    fi
    date
```

**PowerShell スクリプト**  
PowerShell では、スクリプトで明示的に `exit` を呼び出して、Run Command が終了コードを取得できるようにする必要があります。

```
<command 1>
    if ($?) {<do something>}
    else {exit <N>}
    <command 2>
    <command 3>
    exit <N>
```

以下がその例です。

```
cd C:\
    if ($?) {echo "Success"}
    else {exit 1}
    date
```

# コマンド実行時の再起動の処理
<a name="send-commands-reboot"></a>

AWS Systems Manager のツールである Run Command を使用してマネージドノードを再起動するスクリプトを実行するには、スクリプトで終了コードを指定することをお勧めします。その他のメカニズムを使用して、スクリプトからノードを再起動しようとすると、再起動がスクリプトの最後のステップであっても、スクリプトの実行ステータスが正しく更新されない場合があります。Windows マネージドインスタンスの場合は、スクリプトで `exit 3010` を指定します。Linux と macOS マネージドノードの場合は、`exit 194` を指定します。終了コードは AWS Systems Manager エージェント (SSM Agent) にマネージドノードの再起動を指示し、再起動の完了後にスクリプトを再起動します。再起動を開始する前に、SSM Agent はクラウドの Systems Manager サービスに対して、サーバーの再起動中に通信が中断されることを知らせます。

**注記**  
再起動スクリプトは、`aws:runDocument` プラグインに含まれていません。ドキュメントに再起動スクリプトが含まれている場合に、別のドキュメントが `aws:runDocument` プラグインを介してドキュメントを実行しようとすると、SSM Agent はエラーが発生します。

**べき等スクリプトの作成**

マネージドノードを再起動するスクリプトを開発するときは、スクリプトをべき等にし、再起動後もスクリプトの実行が継続されるようにします。べき等なスクリプトは状態を管理し、アクションが実行されたかどうかを検証します。これにより、1 回のみ実行するように意図されているステップが複数回実行されなくなります。

ここでは、マネージドノードを複数回再起動するべき等なスクリプトの例をご紹介します。

```
$name = Get current computer name
If ($name –ne $desiredName) 
    {
        Rename computer
        exit 3010
    }
            
$domain = Get current domain name
If ($domain –ne $desiredDomain) 
    {
        Join domain
        exit 3010
    }
            
If (desired package not installed) 
    {
        Install package
        exit 3010
    }
```

**例**

次のスクリプトサンプルは、終了コードを使用してマネージドノードを再起動します。Linux の例では、Amazon Linux でパッケージ更新をインストールしてから、ノードを再起動します。Windows Server の例では、Telnet-Client をノードにインストールしてから、再起動します。

------
#### [ Amazon Linux 2 ]

```
#!/bin/bash
yum -y update
needs-restarting -r
if [ $? -eq 1 ]
then
        exit 194
else
        exit 0
fi
```

------
#### [ Windows ]

```
$telnet = Get-WindowsFeature -Name Telnet-Client
if (-not $telnet.Installed)
    { 
        # Install Telnet and then send a reboot request to SSM Agent.
        Install-WindowsFeature -Name "Telnet-Client"
        exit 3010 
    }
```

------

# コマンドのステータスについて
<a name="monitor-commands"></a>

Run Command のツールである AWS Systems Manager は、コマンドの各処理状態とコマンドを処理した各マネージノードの詳細なステータス情報をレポートします。次の方法を使用して、コマンドのステータスをモニタリングできます。
+ Run Command コンソールインターフェイスの **[Commands]** (コマンド) タブで、**[Refresh]** (更新) アイコンを選択します。
+ AWS Command Line Interface (AWS CLI) を使用して [list-commands](https://docs.aws.amazon.com/cli/latest/reference/ssm/list-commands.html) または [list-command-invocations](https://docs.aws.amazon.com/cli/latest/reference/ssm/list-command-invocations.html) を呼び出します。あるいは、AWS Tools for Windows PowerShell を使用して [Get-SSMCommand](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMCommand.html) または [Get-SSMCommandInvocation](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMCommandInvocation.html) を呼び出します。
+ 状態またはステータスの変更に応答するように Amazon EventBridge を設定します。
+ すべての状況の変化、または `Failed` や `TimedOut` など特定のステータスに関する通知を送信するよう、Amazon Simple Notiﬁcation Service (Amazon SNS) を設定します。

## Run Command のステータス
<a name="monitor-about-status"></a>

Run Command は、プラグイン、呼び出し、コマンドのステータス全体という 3 つのエリアでステータスの詳細をレポートします。*プラグイン*は、コマンドの (SSM) ドキュメントに定義されているコード実行ブロックです。プラグインの詳細については、「[コマンドドキュメントプラグインリファレンス](documents-command-ssm-plugin-reference.md)」を参照してください。

複数のマネージノードに、コマンドを同時に送信するとき、各ノードを対象とするコマンドの各コピーは、*コマンド呼び出し*です。例えば、`AWS-RunShellScript` ドキュメントを使用して 20 個の Linux インスタンスに `ifconfig` コマンドを送信すると、そのコマンドには 20 個の呼び出しがあります。各コマンド呼び出しで、個別にステータスが報告されます。コマンド呼び出しに含まれているプラグインも、個々にステータスを報告します。

最後に、Run Command コマンドには、すべてのプラグインと呼び出しの集約されたコマンドステータスがあります。集約されたコマンドステータスは、以下の表に示すように、プラグインまたは呼び出しによってレポートされるステータスとは異なる場合があります。

**注記**  
`max-concurrency` パラメータまたは `max-errors` パラメータを使用して多数のマネージノードに対してコマンドを実行する場合は、以下の表に示すように、これらのパラメータによって強制される制限がコマンドのステータスに反映されます。これらのパラメータの詳細については、[コマンドを大規模に実行する](send-commands-multiple.md)を参照してください。


**コマンドのプラグインと呼び出しの詳細なステータス**  

| ステータス | 詳細 | 
| --- | --- | 
| 保留中 | コマンドがまだマネージドノードに送信されていないか、SSM Agent によって受信されていません。Timeout (seconds) パラメータと Execution timeout パラメータの合計に等しい時間が経過する前にエージェントがコマンドを受信しなかった場合、ステータスは Delivery Timed Out に変わります。 | 
| InProgress | Systems Manager がマネージドノードにコマンドを送信しようとしている、またはコマンドが SSM Agent によって受信され、インスタンスでその実行が開始されました。すべてのコマンドプラグインの結果に応じて、ステータスは Success、Failed、 Delivery Timed Out、Execution Timed Out のいずれかに変わります。例外: エージェントが実行中でないか、ノードで使用できない場合、コマンドステータスはエージェントが再び使用可能になるまで、または実行タイムアウト制限に達するまで In Progress のままになります。その後、ステータスは終了状態に変わります。 | 
| Delayed | システムからマネージドノードにコマンドを送信しようとしましたが成功しませんでした。システムは再試行します。 | 
| Success | このステータスはさまざまな条件下で返されます。このステータスは、コマンドがノード上で処理されたという意味ではありません。例えば、コマンドはマネージドノードで SSM Agent によって受信され、PowerShell の ExecutionPolicy によってコマンドの実行が阻止された結果として終了コード 0 が返されることがあります。これは終了状態です。コマンドが Success ステータスを返す条件は次のとおりです。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/monitor-commands.html)  リソースグループをターゲットにする場合も同じ条件が適用されます。エラーをトラブルシューティングする方法、またはコマンド実行に関する詳細情報を取得するには、適切な終了コード (コマンドのエラーの場合はゼロ以外の終了コード) を返すことでエラーまたは例外を処理するコマンドを送信します。  | 
| DeliveryTimedOut | 合計タイムアウトが期限切れになるまでに、コマンドがマネージドノードに配信されませんでした。合計タイムアウトは、親コマンドの max-errors の制限数には影響しませんが、親コマンドのステータスが Success、Incomplete、Delivery Timed Out のいずれになるかに影響します。これは終了状態です。 | 
| ExecutionTimedOut | コマンドのオートメーションは、マネージドノードで開始されましたが、実行タイムアウトが期限切れになるまでに完了しませんでした。実行タイムアウトは障害としてカウントされます。この場合、ゼロ以外の応答が送信され、Systems Manager はコマンドオートメーションの実行の試行を終了し、障害ステータスを報告します。 | 
| 失敗 |  マネージドノードでコマンドは失敗しました。プラグインの場合、これは結果コードがゼロではないことを示します。コマンドの呼び出しの場合、これは 1 つ以上のプラグインの結果コードがゼロではないことを示します。呼び出しの失敗は、親コマンドの max-errors の制限数にカウントされます。これは終了状態です。 | 
| Cancelled (キャンセル) | コマンドが完了する前にキャンセルされました。これは終了状態です。 | 
| Undeliverable | コマンドをマネージドノードに配信できません。ノードは存在していないか、応答していない可能性があります。配信不能な呼び出しは親コマンドの max-errors の制限数にはカウントされませんが、親コマンドのステータスが Success または Incomplete のいずれになるかには影響します。例えば、コマンドのすべての呼び出しのステータスが Undeliverable である場合、返されるコマンドのステータスは Failed です。ただし、コマンドに 5 つの呼び出しがあり、そのうちの 4 つが返したステータスが Undeliverable で 1 つが返したステータスが Success の場合、親コマンドのステータスは Success になります。これは終了状態です。 | 
| Terminated | 親コマンドが max-errors の制限数を超え、後続のコマンド呼び出しはシステムによって取り消されました。これは終了状態です。 | 
| InvalidPlatform | コマンドは、選択したドキュメントで指定された必須プラットフォームと一致しないマネージノードに送信されました。Invalid Platform は、親コマンドの max-errors 制限にはカウントされませんが、親コマンドのステータスが [Success] (成功) または [Failed] (失敗) であるかどうかに影響します。例えば、コマンドのすべての呼び出しのステータスが Invalid Platform である場合、返されるコマンドのステータスは Failed です。ただし、コマンドに 5 つの呼び出しがあり、そのうちの 4 つが返したステータスが Invalid Platform で 1 つが返したステータスが Success の場合、親コマンドのステータスは Success になります。これは終了状態です。 | 
| アクセス拒否 | コマンドを実行している AWS Identity and Access Management (IAM) ユーザーまたはロールが対象のマネージドノードにアクセスできません。Access Denied は親コマンドの max-errors 制限数にはカウントされませんが、親コマンドのステータスが Success または Failed のいずれになるかには影響します。例えば、コマンドのすべての呼び出しのステータスが Access Denied である場合、返されるコマンドのステータスは Failed です。ただし、コマンドに 5 つの呼び出しがあり、そのうちの 4 つが返したステータスが Access Denied で 1 つが返したステータスが Success の場合、親コマンドのステータスは Success になります。これは終了状態です。 | 


**コマンドの詳細なステータス**  

| ステータス | 詳細 | 
| --- | --- | 
| 保留中 | マネージドノードでコマンドはエージェントによってまだ受け取られていません。 | 
| InProgress | コマンドは、1 つ以上のマネージドノードに送信されましたが、どのノードも終了状態に達していません。 | 
| Delayed | システムから ノードにコマンドを送信しようとしましたが成功しませんでした。システムは再試行します。 | 
| Success | コマンドは、SSM Agent の指定したすべてのインスタンスまたは対象となるマネージドノードで受け取られ、終了コードのゼロが返されました。すべてのコマンドの呼び出しが終了状態に達しましたが、max-errors の値には達しませんでした。このステータスは、指定されたまたは対象となるすべてのマネージドノードで、コマンドが正常に処理されたという意味ではありません。これは終了状態です。 エラーをトラブルシューティングする方法、またはコマンド実行に関する詳細情報を取得するには、適切な終了コード (コマンドのエラーの場合はゼロ以外の終了コード) を返すことでエラーまたは例外を処理するコマンドを送信します。  | 
| DeliveryTimedOut | 合計タイムアウトが期限切れになるまでに、コマンドがマネージドノードに配信されませんでした。max-errors の値を超えるコマンドの呼び出しが Delivery Timed Out のステータスを示しています。これは終了状態です。 | 
| 失敗 |  マネージドノードでコマンドは失敗しました。`max-errors` の値を超えるコマンドの呼び出しが `Failed` のステータスを示しています。これは終了状態です。  | 
| Incomplete | コマンドは、すべてのマネージドノードで試行されましたが、1 つ以上の起動が Success の値を持っていません。ただし、スタータスが Failed になるほどの呼び出しの失敗はありません。これは終了状態です。 | 
| Cancelled (キャンセル) | コマンドが完了する前にキャンセルされました。これは終了状態です。 | 
| RateExceeded | コマンドの対象となるマネージドノードの数が、保留中の呼び出しに対するアカウント クォータを超えています。システムは、どのノードでもコマンドを実行する前にキャンセルしています。これは終了状態です。 | 
| アクセス拒否 | コマンドを開始するユーザーまたはロールは、対象のリソースグループにアクセスすることができません。AccessDenied は親コマンドの max-errors 制限にはカウントされませんが、親コマンドのステータスが Success または Failed になるかどうかに影響します。(例えば、コマンドのすべての呼び出しのステータスが AccessDenied の場合、返されるコマンドのステータスは Failed です。 ただし、コマンドに 5 つの呼び出しがあり、そのうちの 4 つがステータス AccessDenied を返し、そのうち 1 はステータス Success を返す場合、親コマンドのステータスは Success になります。) これは終了状態です。 | 
| タグにインスタンスがない | コマンドの対象となるタグのキーペア 値またはリソースグループは、どのマネージドノードとも一致しません。これは終了状態です。 | 

## コマンドタイムアウト値について
<a name="monitor-about-status-timeouts"></a>

Systems Manager は、コマンドの実行時に以下のタイムアウト値を強制します。

**合計タイムアウト**  
Systems Manager コンソールの **[Timeout (seconds)]** (タイムアウト (秒)) フィールドでタイムアウト値を指定します。コマンドの送信後、Run Command はコマンドの有効期限が切れているかどうかをチェックします。コマンドの有効期限制限 (合計タイムアウト) に達すると、ステータスが `InProgress`、`Pending` または `Delayed` になっているすべての呼び出しのステータスが `DeliveryTimedOut` に変わります。

![\[Systems Manager コンソールの [タイムアウト (秒)] フィールド\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/run-command-delivery-time-out-time-out-seconds.png)


より技術的なレベルで説明すると、合計タイムアウト (**[Timeout (seconds)]** (タイムアウト (秒))) は、次に示すような 2 つのタイムアウト値の組み合わせです。

`Total timeout = "Timeout(seconds)" from the console + "timeoutSeconds": "{{ executionTimeout }}" from your SSM document`

例えば、Systems Manager コンソールの **Timeout (秒)** のデフォルト値は 600 秒です。`AWS-RunShellScript` SSM ドキュメントを使用してコマンドを実行する場合、**"timeoutSeconds": "\$1\$1 executionTimeout \$1\$1"** のデフォルト値は、次のドキュメントのサンプルに示すように 3600 秒です。

```
  "executionTimeout": {
      "type": "String",
      "default": "3600",

  "runtimeConfig": {
    "aws:runShellScript": {
      "properties": [
        {
          "timeoutSeconds": "{{ executionTimeout }}"
```

これは、システムがコマンドステータスを `DeliveryTimedOut` に設定する前に、コマンドが 4,200 秒 (70 分) 実行されることを意味します。

**実行タイムアウト**  
Systems Manager コンソールで、[**Execution Timeout (実行タイムアウト)**] フィールド (使用可能な場合) に実行タイムアウト値を指定します。すべての SSM ドキュメントで、実行タイムアウトを指定する必要があるわけではありません。[**実行タイムアウト**] フィールドは、対応する入力パラメータが SSM ドキュメントで定義されている場合にのみ表示されます。指定した場合、コマンドはこの期間内に完了する必要があります。

**注記**  
Run Command は、SSM Agent ドキュメントの終了応答に依存して、コマンドがエージェントに配信されたかどうかを判断します。SSM Agent は、呼び出しまたはコマンドが `ExecutionTimedOut` としてマークされるための `ExecutionTimedOut` シグナルを送信する必要があります。

![\[Systems Manager コンソールの [実行タイムアウト] フィールド\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/run-command-execution-timeout-console.png)


**デフォルトの実行タイムアウト**  
SSM ドキュメントで実行タイムアウト値を明示的に指定する必要がない場合、Systems Manager がハードコーディングされたデフォルトの実行タイムアウトを強制します。

**Systems Manager がタイムアウトをレポートする方法**  
Systems Manager がターゲットの SSM Agent から `execution timeout` 応答を受信すると、Systems Manager はコマンド呼び出しを `executionTimeout` としてマークします。

Run Command が SSM Agent からドキュメント終了応答を受信しない場合、コマンド呼び出しは `deliveryTimeout` としてマークされます。

ターゲットのタイムアウトステータスを判断するため、SSM Agent は `executionTimeout` の計算対象の SSM ドキュメントのすべてのパラメータとコンテンツを結合します。SSM Agent がコマンドがタイムアウトしたと判断すると、サービスに `executionTimeout` を送信します。

**Timeout (seconds)** のデフォルトは 3600 秒です。**Execution Timeout** のデフォルトも 3600 秒です。したがって、コマンドのデフォルトタイムアウトの合計は 7200 秒です。

**注記**  
SSM Agent による `executionTimeout` の処理方法は、 ドキュメントの種類とドキュメントのバージョンによって異なります。

# Run Command のチュートリアル
<a name="run-command-walkthroughs"></a>

このセクションのチュートリアルでは、AWS Systems Manager のツールである Run Commandで、AWS Command Line Interface (AWS CLI) または AWS Tools for Windows PowerShell を使用してコマンドを実行する方法を説明します。

**Topics**
+ [Run Command を使用してソフトウェアを更新する](run-command-tutorial-update-software.md)
+ [チュートリアル: Run Command で AWS CLI を使用する](walkthrough-cli.md)
+ [チュートリアル: Run Command で AWS Tools for Windows PowerShell を使用する](walkthrough-powershell.md)

以下のリファレンスでサンプルコマンドも表示できます。
+ [Systems Manager AWS CLI リファレンス](https://docs.aws.amazon.com/cli/latest/reference/ssm/)
+ [AWS Tools for Windows PowerShell - AWS Systems Manager](https://docs.aws.amazon.com/powershell/latest/reference/items/SimpleSystemsManagement_cmdlets.html)

# Run Command を使用してソフトウェアを更新する
<a name="run-command-tutorial-update-software"></a>

以下の手順は、マネージドノードのソフトウェアを更新する方法について説明しています。

## Run Command を使用して SSM Agent を更新する
<a name="rc-console-agentexample"></a>

以下の手順は、マネージドノードで実行されている SSM Agent を更新する方法について説明しています。最新の SSM Agent バージョンに更新することも、古いバージョンにダウングレードすることもできます。コマンドを実行すると、システムは該当するバージョンを AWS からダウンロードし、インストールして、コマンドの実行前に存在していたバージョンをアンインストールします。このプロセスの実行中にエラーが発生すると、システムはコマンドの実行前のサーバーバージョンにロールバックし、コマンドステータスにはコマンドの失敗が示されます。

**注記**  
インスタンスが macOS バージョン 13.0 (Ventura) 以降を実行している場合、AWS-UpdateSSMAgent ドキュメントを実行するにはインスタンスの SSM Agent バージョン 3.1.941.0 以上が必要です。インスタンスが 3.1.941.0 より前にリリースされた SSM Agent バージョンを実行している場合は、`brew update` および `brew upgrade amazon-ssm-agent` コマンドを実行することで AWS-UpdateSSMAgent ドキュメントを実行するように SSM Agent を更新できます。

SSM Agent の更新に関する通知を受け取るには、GitHub の「[SSM Agent リリースノート](https://github.com/aws/amazon-ssm-agent/blob/mainline/RELEASENOTES.md)」ページをサブスクライブします。

**Run Command を使用して SSM Agent を更新するには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. **[コマンドの実行]** を選択します。

1. [**Command document (コマンドのドキュメント)**] リストで、[**`AWS-UpdateSSMAgent`**] を選択します。

1. [**Command parameters**] セクションで、必要に応じて以下のパラメータの値を指定します。

   1. (オプション) [**Version (バージョン)**] に、インストールする SSM Agent のバージョンを入力します。エージェントの[古いバージョン](https://github.com/aws/amazon-ssm-agent/blob/mainline/RELEASENOTES.md)をインストールできます。バージョンを指定しないと、サービスは最新バージョンをインストールします。

   1. (オプション) 以前のバージョンの SSM Agent をインストールするには、[**Allow Downgrade (ダウングレードの許可)**] で [**true**] を選択します。このオプションを選択した場合は、[以前の](https://github.com/aws/amazon-ssm-agent/blob/mainline/RELEASENOTES.md)バージョン番号を指定します。[**false**] を選択すると、最新バージョンのサービスのみがインストールされます。

1. **[Targets]** (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

1. **[その他のパラメータ]** で、以下の操作を行います。
   + **[コメント]** に、このコマンドに関する情報を入力します。
   + **[タイムアウト (秒)]** に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

1. [**Run** (実行)] を選択します。

## Run Command を使用して PowerShell を更新する
<a name="rc-console-pwshexample"></a>

以下の手順では、Windows Server 2012 および 2012 R2 マネージドノードで PowerShell をバージョン 5.1 に更新する方法について説明します。この手順で提供されるスクリプトは、Windows 管理フレームワーク (WMF) バージョン 5.1 の更新プログラムをダウンロードし、更新プログラムのインストールを開始します。WMF 5.1 のインストール時に必要になるため、このプロセス中にノードが再起動します。更新プログラムのダウンロードとインストールが完了するまでに約 5 分かかります。

**Run Command を使用して PowerShell を更新するには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. **[コマンドの実行]** を選択します。

1. [**Command document (コマンドのドキュメント)**] リストで、[**`AWS-RunPowerShellScript`**] を選択します。

1. [**コマンド**] セクションに、使用しているオペレーティングシステム用の以下のコマンドを貼り付けます。

------
#### [ Windows Server 2012 R2 ]

   ```
   Set-Location -Path "C:\Windows\Temp"
   
   Invoke-WebRequest "https://go.microsoft.com/fwlink/?linkid=839516" -OutFile "Win8.1AndW2K12R2-KB3191564-x64.msu"
   
   Start-Process -FilePath "$env:systemroot\system32\wusa.exe" -Verb RunAs -ArgumentList ('Win8.1AndW2K12R2-KB3191564-x64.msu', '/quiet')
   ```

------
#### [ Windows サーバー 2012 ]

   ```
   Set-Location -Path "C:\Windows\Temp"
   
   Invoke-WebRequest "https://go.microsoft.com/fwlink/?linkid=839513" -OutFile "W2K12-KB3191565-x64.msu"
   
   Start-Process -FilePath "$env:systemroot\system32\wusa.exe" -Verb RunAs -ArgumentList ('W2K12-KB3191565-x64.msu', '/quiet')
   ```

------

1. **[Targets]** (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

1. **[その他のパラメータ]** で、以下の操作を行います。
   + **[コメント]** に、このコマンドに関する情報を入力します。
   + **[タイムアウト (秒)]** に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS Notifications (SNS 通知)**] セクションで、コマンドの実行状態に関する通知を受け取る場合は、[**Enable SNS notifications (SNS 通知を有効にする)**] チェックボックスをオンにします。

   Run Command 用の Amazon SNS 通知の設定の詳細については、「[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md)」を参照してください。

1. [**Run** (実行)] を選択します。

マネージドノードが再起動し、更新プログラムのインストールが完了したら、ノードに接続し、PowerShell がバージョン 5.1 に正常にアップグレードされたことを確認します。ノードの PowerShell のバージョンをチェックするには、PowerShell を開き、`$PSVersionTable` を入力します。アップグレードが成功した場合、出力テーブルの `PSVersion` の値は 5.1 と表示されます。

`PSVersion` 値が 5.1 と異なる場合 (たとえば 3.0 や 4.0)、[**Windows ログ**] の下にあるイベントビューアで [**セットアップ**] ログを確認します。これらのログは、更新プログラムのインストールが失敗した理由を示します。

# チュートリアル: Run Command で AWS CLI を使用する
<a name="walkthrough-cli"></a>

以下のサンプルチュートリアルは、AWS Command Line Interface (AWS CLI) を使用してコマンドとコマンドパラメータに関する情報を表示する方法、コマンドを実行する方法、これらのコマンドのステータスを確認する方法を示しています。

**重要**  
信頼されている管理者のみが、このトピックで示される AWS Systems Manager で事前設定されたドキュメントの使用を許可されます。Systems Manager ドキュメントで指定されるコマンドまたはスクリプトは、マネージドノードの管理 許可で実行されます。ユーザーに、事前定義済みの Systems Manager ドキュメント (`AWS-` から始まるドキュメント) を実行許可がある場合、そのユーザーには、ノードへの管理者アクセス権もあります。他のすべてのユーザーについては、制限付きドキュメントを作成し、そのドキュメントを特定のユーザーと共有する必要があります。

**Topics**
+ [ステップ 1: 開始方法](#walkthrough-cli-settings)
+ [ステップ 2: シェルスクリプトを実行してリソースの詳細を表示する](#walkthrough-cli-run-scripts)
+ [ステップ 3: `AWS-RunShellScript` ドキュメントを使用して簡単なコマンドを送信する](#walkthrough-cli-example-1)
+ [ステップ4: Run Command を使用して簡単な Python スクリプトを実行する](#walkthrough-cli-example-2)
+ [ステップ5: Run Command を使用して Bash スクリプトを実行する](#walkthrough-cli-example-3)

## ステップ 1: 開始方法
<a name="walkthrough-cli-settings"></a>

ユーザーは、設定するマネージドノードの管理者アクセス許可を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス許可を付与されている必要があります。また、この例では、米国東部 (オハイオ) リージョン (us-east-2) を使用している点に留意してください。Run Command は、「Amazon Web Services 全般のリファレンス」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」に記載されている AWS リージョン で利用できます。詳細については、「[AWS Systems Manager のマネージドノードのセットアップ](systems-manager-setting-up-nodes.md)」を参照してください。

**AWS CLI を使用してコマンドを実行します。**

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. 利用可能なすべてのドキュメントを表示します。

   このコマンドでは、IAM アクセス許可に基づいて、アカウントで利用可能なすべてのドキュメントが表示されます。

   ```
   aws ssm list-documents
   ```

1. マネージドノードでコマンドを受信する準備ができていることを確認します。

   マネージドノードがオンラインの場合は、次のコマンドの出力が表示されます。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-instance-information \
       --output text --query "InstanceInformationList[*]"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-instance-information ^
       --output text --query "InstanceInformationList[*]"
   ```

------

1. 特定のマネージドノードについての詳細を表示するには、次のコマンドを実行します。
**注記**  
このチュートリアルのコマンドを実行するには、インスタンス ID およびコマンド ID を置き換えます。マネージド AWS IoT Greengrass コアデバイスの場合、インスタンス ID には mi-*ID\$1Number* を使用します。コマンド ID は **send-command** に対する応答として返されます。インスタンス ID は AWS Systems Manager のツールである Fleet Manager から入手できます。

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-instance-information \
       --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-instance-information ^
       --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
   ```

------

## ステップ 2: シェルスクリプトを実行してリソースの詳細を表示する
<a name="walkthrough-cli-run-scripts"></a>

Run Command と `AWS-RunShellScript` ドキュメントを使用すると、マネージドノード上で、あたかもローカルにログオンしているかのように、任意のコマンドやスクリプトを実行することができます。

**説明と使用可能なパラメータを表示する**

Systems Manager JSON ドキュメントの説明を表示するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-document \
    --name "AWS-RunShellScript" \
    --query "[Document.Name,Document.Description]"
```

------
#### [ Windows ]

```
aws ssm describe-document ^
    --name "AWS-RunShellScript" ^
    --query "[Document.Name,Document.Description]"
```

------

これらのパラメータに使用できるパラメータと詳細を表示するには、次のコマンドを実行します。

------
#### [ Linux & macOS ]

```
aws ssm describe-document \
    --name "AWS-RunShellScript" \
    --query "Document.Parameters[*]"
```

------
#### [ Windows ]

```
aws ssm describe-document ^
    --name "AWS-RunShellScript" ^
    --query "Document.Parameters[*]"
```

------

## ステップ 3: `AWS-RunShellScript` ドキュメントを使用して簡単なコマンドを送信する
<a name="walkthrough-cli-example-1"></a>

Linux マネージドノードの IP 情報を取得するには、次のコマンドを実行します。

Windows Server のマネージドノードを対象としている場合、`document-name` を `AWS-RunPowerShellScript` に、`command` を `ifconfig` から `ipconfig` に変更します。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --instance-ids "instance-ID" \
    --document-name "AWS-RunShellScript" \
    --comment "IP config" \
    --parameters commands=ifconfig \
    --output text
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --instance-ids "instance-ID" ^
    --document-name "AWS-RunShellScript" ^
    --comment "IP config" ^
    --parameters commands=ifconfig ^
    --output text
```

------

**応答データを使用したコマンド情報の取得**  
次のコマンドは、コマンド ID を使用します。これは、前述のコマンド実行の詳細および応答データを取得するコマンドで返されるものです。コマンドが完了すると、システムは応答データを返します。コマンド実行によって `"Pending"` または `"InProgress"` と表示される場合は、もう一度このコマンドを実行して応答データを確認します。

------
#### [ Linux & macOS ]

```
aws ssm list-command-invocations \
    --command-id $sh-command-id \
    --details
```

------
#### [ Windows ]

```
aws ssm list-command-invocations ^
    --command-id $sh-command-id ^
    --details
```

------

**ユーザーを識別**

次のコマンドは、コマンドを実行するデフォルトのユーザーを表示します。

------
#### [ Linux & macOS ]

```
sh_command_id=$(aws ssm send-command \
    --instance-ids "instance-ID" \
    --document-name "AWS-RunShellScript" \
    --comment "Demo run shell script on Linux managed node" \
    --parameters commands=whoami \
    --output text \
    --query "Command.CommandId")
```

------

**コマンドステータスの取得**  
次のコマンドでは、コマンド ID を使用して、マネージドノードでのコマンド実行に関するステータスを取得しています。この例では、前のコマンドで返されたコマンド ID を使用しています。

------
#### [ Linux & macOS ]

```
aws ssm list-commands \
    --command-id "command-ID"
```

------
#### [ Windows ]

```
aws ssm list-commands ^
    --command-id "command-ID"
```

------

**コマンドの詳細の取得**  
次のコマンドでは、前のコマンドのコマンド ID を使用して、マネージドノードごとのコマンド実行に関するステータスを取得しています。

------
#### [ Linux & macOS ]

```
aws ssm list-command-invocations \
    --command-id "command-ID" \
    --details
```

------
#### [ Windows ]

```
aws ssm list-command-invocations ^
    --command-id "command-ID" ^
    --details
```

------

**特定のマネージドノードのコマンド情報と応答データを取得**  
次のコマンドでは、特定のマネージドノードについて、元の `aws ssm send-command` リクエストに対する出力が返されます。

------
#### [ Linux & macOS ]

```
aws ssm list-command-invocations \
    --instance-id instance-ID \
    --command-id "command-ID" \
    --details
```

------
#### [ Windows ]

```
aws ssm list-command-invocations ^
    --instance-id instance-ID ^
    --command-id "command-ID" ^
    --details
```

------

**Python バージョンの表示**

次のコマンドは、ノード上で実行している Python のバージョンを返します。

------
#### [ Linux & macOS ]

```
sh_command_id=$(aws ssm send-command \
    --instance-ids "instance-ID" \
    --document-name "AWS-RunShellScript" \
    --comment "Demo run shell script on Linux Instances" \
    --parameters commands='python -V' \
    --output text --query "Command.CommandId") \
    sh -c 'aws ssm list-command-invocations \
    --command-id "$sh_command_id" \
    --details \
    --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'
```

------

## ステップ4: Run Command を使用して簡単な Python スクリプトを実行する
<a name="walkthrough-cli-example-2"></a>

次のコマンドでは、Run Command を使用して、Python の簡単な "Hello World" スクリプトが実行されます。

------
#### [ Linux & macOS ]

```
sh_command_id=$(aws ssm send-command \
    --instance-ids "instance-ID" \
    --document-name "AWS-RunShellScript" \
    --comment "Demo run shell script on Linux Instances" \
    --parameters '{"commands":["#!/usr/bin/python","print \"Hello World from python\""]}' \
    --output text \
    --query "Command.CommandId") \
    sh -c 'aws ssm list-command-invocations \
    --command-id "$sh_command_id" \
    --details \
    --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'
```

------

## ステップ5: Run Command を使用して Bash スクリプトを実行する
<a name="walkthrough-cli-example-3"></a>

このセクションの例は、Run Command を使用して次の bash スクリプトを実行する方法を示しています。

Run Command を使用して遠隔地に格納されたスクリプトを実行する例については、[Amazon S3 からのスクリプトの実行](integration-s3.md) および [GitHub からのスクリプトの実行](integration-remote-scripts.md) を参照してください。

```
#!/bin/bash
yum -y update
yum install -y ruby
cd /home/ec2-user
curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto
```

このスクリプトにより、*AWS CodeDeploy ユーザーガイド* の「[CodeDeploy 用の Amazon EC2 インスタンスを作成する](https://docs.aws.amazon.com/codedeploy/latest/userguide/instances-ec2-create.html)」で説明されているように、Amazon Linux および Red Hat Enterprise Linux (RHEL) インスタンスに AWS CodeDeploy エージェントがインストールされます。

このスクリプトは、米国東部 (オハイオ) リージョン (us-east-2)、`aws-codedeploy-us-east-2` の AWS 管理の Amazon S3 バケットから CodeDeploy エージェントをインストールします。

**AWS CLI コマンドで bash スクリプトを実行する**

次のサンプルは、`--parameters` オプションを使用して CLI コマンドに bash スクリプトを含める方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name "AWS-RunShellScript" \
    --targets '[{"Key":"InstanceIds","Values":["instance-id"]}]' \
    --parameters '{"commands":["#!/bin/bash","yum -y update","yum install -y ruby","cd /home/ec2-user","curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install","chmod +x ./install","./install auto"]}'
```

------

**JSON ファイルで bash スクリプトを実行する**

次の例では、bash スクリプトの内容が JSON ファイルに格納され、`--cli-input-json` オプションを使用してファイルがコマンドに含まれます。

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name "AWS-RunShellScript" \
    --targets "Key=InstanceIds,Values=instance-id" \
    --cli-input-json file://installCodeDeployAgent.json
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name "AWS-RunShellScript" ^
    --targets "Key=InstanceIds,Values=instance-id" ^
    --cli-input-json file://installCodeDeployAgent.json
```

------

次の例に、参照する `installCodeDeployAgent.json` ファイルの内容を示します。

```
{
    "Parameters": {
        "commands": [
            "#!/bin/bash",
            "yum -y update",
            "yum install -y ruby",
            "cd /home/ec2-user",
            "curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install",
            "chmod +x ./install",
            "./install auto"
        ]
    }
}
```

# チュートリアル: Run Command で AWS Tools for Windows PowerShell を使用する
<a name="walkthrough-powershell"></a>

以下の例では、AWS Tools for Windows PowerShell を使用してコマンドとコマンドパラメータに関する情報を表示する方法、コマンドを実行する方法、これらのコマンドのステータスを確認する方法を示しています。このウォークスルーには、定義済み AWS Systems Manager ドキュメントごとの例が含まれています。

**重要**  
信頼されている管理者のみが、このトピックで示される Systems Manager で事前設定されたドキュメントの使用を許可されます。Systems Manager ドキュメントで指定されるコマンドまたはスクリプトは、マネージドノードの管理アクセス許可で実行されます。ユーザーに、事前定義済みの Systems Manager ドキュメント (AWS から始まるドキュメント) を実行許可がある場合、そのユーザーには、ノードへの管理者アクセス権もあります。他のすべてのユーザーについては、制限付きドキュメントを作成し、そのドキュメントを特定のユーザーと共有する必要があります。

**Topics**
+ [AWS Tools for Windows PowerShell セッションの設定を構成する](#walkthrough-powershell-settings)
+ [利用可能なすべてのドキュメントを表示します。](#walkthrough-powershell-all-documents)
+ [PowerShell コマンドまたはスクリプトを実行する](#walkthrough-powershell-run-script)
+ [`AWS-InstallApplication` ドキュメントを使用してアプリケーションをインストールする](#walkthrough-powershell-install-application)
+ [`AWS-InstallPowerShellModule` JSON ドキュメントを使用して PowerShell モジュールをインストールする](#walkthrough-powershell-install-module)
+ [`AWS-JoinDirectoryServiceDomain` JSON ドキュメントを使用してマネージドノードをドメインに結合](#walkthrough-powershell-domain-join)
+ [`AWS-ConfigureCloudWatch` ドキュメントを使用して Windows メトリクスを Amazon CloudWatch Logs に送信する](#walkthrough-powershell-windows-metrics)
+ [`AWS-ConfigureWindowsUpdate` ドキュメントを使用して、Windows の自動更新を有効または無効にする](#walkthrough-powershell-enable-windows-update)
+ [Run Command を使用した Windows の更新プログラムの管理](#walkthough-powershell-windows-updates)

## AWS Tools for Windows PowerShell セッションの設定を構成する
<a name="walkthrough-powershell-settings"></a>

**認証情報を指定する**  
ローカルコンピュータで **Tools for Windows PowerShell** を開き、次のコマンドを実行して認証情報を指定します。ユーザーは、設定するマネージドノードの管理者アクセス許可を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス許可を付与されている必要があります。詳細については、「[AWS Systems Manager のマネージドノードのセットアップ](systems-manager-setting-up-nodes.md)」を参照してください。

```
Set-AWSCredentials –AccessKey key-name –SecretKey key-name
```

**デフォルト を設定するAWS リージョン**  
次のコマンドを実行して、PowerShell セッションのリージョンを設定します。この例では、米国東部 (オハイオ) リージョン (us-east-2) を使用しています。Run Command は、「Amazon Web Services 全般のリファレンス」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」に記載されている AWS リージョン で利用できます。

```
Set-DefaultAWSRegion `
    -Region us-east-2
```

## 利用可能なすべてのドキュメントを表示します。
<a name="walkthrough-powershell-all-documents"></a>

このコマンドは、アカウントに使用できるすべてのドキュメントを一覧表示します。

```
Get-SSMDocumentList
```

## PowerShell コマンドまたはスクリプトを実行する
<a name="walkthrough-powershell-run-script"></a>

Run Command と `AWS-RunPowerShell` ドキュメントを使用すると、マネージドノード上で、あたかもローカルにログオンしているかのように、任意のコマンドやスクリプトを実行することができます。コマンドを発行することも、コマンドを実行するためのローカルスクリプトのパスを入力することもできます。

**注記**  
Run Command を使用してスクリプトを呼び出すときのマネージドノードの再起動については、「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-RunPowerShellScript"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-RunPowerShellScript" | Select -ExpandProperty Parameters
```

### `AWS-RunPowerShellScript` ドキュメントを使用してコマンドを送信する
<a name="walkthrough-powershell-run-script-send-command-aws-runpowershellscript"></a>

次のコマンドでは、2 つのマネージドノードの `"C:\Users"` ディレクトリの内容と `"C:\"` ディレクトリの内容が表示されます。

```
$runPSCommand = Send-SSMCommand `
    -InstanceIds @("instance-ID-1", "instance-ID-2") `
    -DocumentName "AWS-RunPowerShellScript" `
    -Comment "Demo AWS-RunPowerShellScript with two instances" `
    -Parameter @{'commands'=@('dir C:\Users', 'dir C:\')}
```

**コマンドリクエストの詳細を取得する**  
次のコマンドでは、`CommandId` を使用して、2 つのマネージドノードでのコマンド実行に関するステータスを取得します。この例では、前のコマンドで返された `CommandId` を使用しています。

```
Get-SSMCommand `
    -CommandId $runPSCommand.CommandId
```

この例のコマンドのステータスは Success、Pending、InProgress のいずれかになります。

**マネージドノードごとのコマンド情報を取得**  
次のコマンドでは、前のコマンドの `CommandId` を使用して、マネージドノードごとのコマンド実行に関するステータスを取得します。

```
Get-SSMCommandInvocation `
    -CommandId $runPSCommand.CommandId
```

**特定のマネージドノードのコマンド情報と応答データを取得**  
次のコマンドでは、特定のマネージドノードについて、元の `Send-SSMCommand` の出力を返します。

```
Get-SSMCommandInvocation `
    -CommandId $runPSCommand.CommandId `
    -Details $true `
    -InstanceId instance-ID | Select -ExpandProperty CommandPlugins
```

### コマンドをキャンセルする
<a name="walkthrough-powershell-run-script-cancel-command"></a>

次のコマンドでは、`Send-SSMCommand` ドキュメントの `AWS-RunPowerShellScript` をキャンセルします。

```
$cancelCommand = Send-SSMCommand `
    -InstanceIds @("instance-ID-1","instance-ID-2") `
    -DocumentName "AWS-RunPowerShellScript" `
    -Comment "Demo AWS-RunPowerShellScript with two instances" `
    -Parameter @{'commands'='Start-Sleep –Seconds 120; dir C:\'}

Stop-SSMCommand -CommandId $cancelCommand.CommandId
```

**コマンドの状態を確認する**  
次のコマンドでは、`Cancel` コマンドのステータスを確認します。

```
Get-SSMCommand `
    -CommandId $cancelCommand.CommandId
```

## `AWS-InstallApplication` ドキュメントを使用してアプリケーションをインストールする
<a name="walkthrough-powershell-install-application"></a>

Run Command と `AWS-InstallApplication` ドキュメントを使用すると、マネージドノードでアプリケーションをインストール、修復、またはアンインストールできます。このコマンドには、MSI のパスまたはアドレスが必要です。

**注記**  
Run Command を使用してスクリプトを呼び出すときのマネージドノードの再起動については、「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallApplication"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallApplication" | Select -ExpandProperty Parameters
```

### `AWS-InstallApplication` ドキュメントを使用してコマンドを送信する
<a name="walkthrough-powershell-install-application-send-command-aws-installapplication"></a>

次のコマンドでは、無人モードでマネージドノードに Python のバージョンをインストールし、出力を `C:` ドライブにあるローカルテキスト ファイルに記録します。

```
$installAppCommand = Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallApplication" `
    -Parameter @{'source'='https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi'; 'parameters'='/norestart /quiet /log c:\pythoninstall.txt'}
```

**マネージドノードごとのコマンド情報を取得**  
次のコマンドでは、`CommandId` を使用して、コマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -CommandId $installAppCommand.CommandId `
    -Details $true
```

**特定のマネージドノードのコマンド情報と応答データを取得**  
次のコマンドでは、Python のインストール結果が返されます。

```
Get-SSMCommandInvocation `
    -CommandId $installAppCommand.CommandId `
    -Details $true `
    -InstanceId instance-ID | Select -ExpandProperty CommandPlugins
```

## `AWS-InstallPowerShellModule` JSON ドキュメントを使用して PowerShell モジュールをインストールする
<a name="walkthrough-powershell-install-module"></a>

Run Command を使用して、マネージドノードに PowerShell モジュールをインストールできます。PowerShell モジュールの詳細については、「[Windows PowerShell モジュール](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_modules?view=powershell-6)」を参照してください。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallPowerShellModule"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-InstallPowerShellModule" | Select -ExpandProperty Parameters
```

### PowerShell モジュールをインストールする
<a name="walkthrough-powershell-install-module-install"></a>

次のコマンドでは、EZOut.zip ファイルをダウンロードしてインストールし、XPS ビューアをインストールするための追加コマンドも実行しています。最後に、このコマンドの出力が、「amzn-s3-demo-bucket」という名前の S3 バケットにアップロードされます。

```
$installPSCommand = Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallPowerShellModule" `
    -Parameter @{'source'='https://gallery.technet.microsoft.com/EZOut-33ae0fb7/file/110351/1/EZOut.zip';'commands'=@('Add-WindowsFeature -name XPS-Viewer -restart')} `
    -OutputS3BucketName amzn-s3-demo-bucket
```

**マネージドノードごとのコマンド情報を取得**  
次のコマンドでは、`CommandId` を使用して、コマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -CommandId $installPSCommand.CommandId `
    -Details $true
```

**マネージドノードのコマンド情報と応答データを取得**  
次のコマンドでは、特定の `Send-SSMCommand` について、元の `CommandId` の出力を返します。

```
Get-SSMCommandInvocation `
    -CommandId $installPSCommand.CommandId `
    -Details $true | Select -ExpandProperty CommandPlugins
```

## `AWS-JoinDirectoryServiceDomain` JSON ドキュメントを使用してマネージドノードをドメインに結合
<a name="walkthrough-powershell-domain-join"></a>

Run Command を使用すると、マネージドノードを AWS Directory Service ドメインにすばやく参加させることができます。このコマンドを実行する前に、[ディレクトリを作成](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html) する必要があります。また、 についてさらに詳細をご確認いただくことをお勧めしますDirectory Service 詳細については、[AWS Directory Service 管理ガイド](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/)を参照してください。

ドメインにマネージドノードを結合することしかできません。ドメインからノードを削除することはできません。

**注記**  
Run Command を使用してスクリプトを呼び出す場合の、マネージドノードの詳細については「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-JoinDirectoryServiceDomain"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-JoinDirectoryServiceDomain" | Select -ExpandProperty Parameters
```

### マネージドノードのドメインへの参加
<a name="walkthrough-powershell-domain-join-instance"></a>

次のコマンドは、マネージドノードを指定された Directory Service ドメインを作成し、生成された出力を例の Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。

```
$domainJoinCommand = Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-JoinDirectoryServiceDomain" `
    -Parameter @{'directoryId'='d-example01'; 'directoryName'='ssm.example.com'; 'dnsIpAddresses'=@('192.168.10.195', '192.168.20.97')} `
    -OutputS3BucketName amzn-s3-demo-bucket
```

**マネージドノードごとのコマンド情報を取得**  
次のコマンドでは、`CommandId` を使用して、コマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -CommandId $domainJoinCommand.CommandId `
    -Details $true
```

**マネージドノードのコマンド情報と応答データを取得**  
このコマンドでは、特定の `Send-SSMCommand` について、元の `CommandId` の出力を返します 。

```
Get-SSMCommandInvocation `
    -CommandId $domainJoinCommand.CommandId `
    -Details $true | Select -ExpandProperty CommandPlugins
```

## `AWS-ConfigureCloudWatch` ドキュメントを使用して Windows メトリクスを Amazon CloudWatch Logs に送信する
<a name="walkthrough-powershell-windows-metrics"></a>

アプリケーション、システム、セキュリティ、および Windows イベントトレーシング (ETW) ログの Windows Server メッセージを Amazon CloudWatch Logs に送信することができます。Systems Manager では、ログ記録を初めて有効にすると、アプリケーション、システム、セキュリティ、および ETW ログについて、ログのアップロードを開始した時点から (1) 分以内に作成されたすべてのログが送信されます。この時点より前に発生したログは含まれません。ログ記録を無効にし、後で再度有効にすると、Systems Manager では無効化の時点からのログが送信されます。カスタムログファイルおよびインターネットインフォメーションサービス (IIS) ログの場合、Systems Manager はログファイルを最初から読み取ります。さらに、Systems Manager は パフォーマンスカウンターデータを CloudWatch Logs に送信することもできます。

以前に EC2Config で CloudWatch 統合を有効にした場合、Systems Manager の設定は、マネージドノードのローカルに保存された `C:\Program Files\Amazon\EC2ConfigService\Settings\AWS.EC2.Windows.CloudWatch.json` ファイル内のに設定よりも優先されます。EC2Config を使用して単一マネージドノードのパフォーマンスカウンターとログを管理する方法の詳細については、 *｢Amazon CloudWatch ユーザーガイド｣* の [｢CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集する｣](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) を参照してください。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-ConfigureCloudWatch"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-ConfigureCloudWatch" | Select -ExpandProperty Parameters
```

### アプリケーションログを CloudWatch に送信する
<a name="walkthrough-powershell-windows-metrics-send-logs-cloudwatch"></a>

次のコマンドでは、マネージドノードを設定し、Windows アプリケーションログを CloudWatch に移動します。

```
$cloudWatchCommand = Send-SSMCommand `
    -InstanceID instance-ID `
    -DocumentName "AWS-ConfigureCloudWatch" `
    -Parameter @{'properties'='{"engineConfiguration": {"PollInterval":"00:00:15", "Components":[{"Id":"ApplicationEventLog", "FullName":"AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"LogName":"Application", "Levels":"7"}},{"Id":"CloudWatch", "FullName":"AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch", "Parameters":{"Region":"region", "LogGroup":"my-log-group", "LogStream":"instance-id"}}], "Flows":{"Flows":["ApplicationEventLog,CloudWatch"]}}}'}
```

**マネージドノードごとのコマンド情報を取得**  
次のコマンドでは、`CommandId` を使用して、コマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -CommandId $cloudWatchCommand.CommandId `
    -Details $true
```

**特定のマネージドノードのコマンド情報と応答データを取得**  
次のコマンドは、Amazon CloudWatch の設定の結果を返します。

```
Get-SSMCommandInvocation `
    -CommandId $cloudWatchCommand.CommandId `
    -Details $true `
    -InstanceId instance-ID | Select -ExpandProperty CommandPlugins
```

### `AWS-ConfigureCloudWatch` ドキュメントを使用して CloudWatch にパフォーマンスカウンターを送信する
<a name="walkthrough-powershell-windows-metrics-send-performance-counters-cloudwatch"></a>

次のデモンストレーションコマンドは、パフォーマンスカウンタを CloudWatch にアップロードします。詳細については、*[Amazon CloudWatch ユーザーガイド](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)*を参照してください。

```
$cloudWatchMetricsCommand = Send-SSMCommand `
    -InstanceID instance-ID `
    -DocumentName "AWS-ConfigureCloudWatch" `
    -Parameter @{'properties'='{"engineConfiguration": {"PollInterval":"00:00:15", "Components":[{"Id":"PerformanceCounter", "FullName":"AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"CategoryName":"Memory", "CounterName":"Available MBytes", "InstanceName":"", "MetricName":"AvailableMemory", "Unit":"Megabytes","DimensionName":"", "DimensionValue":""}},{"Id":"CloudWatch", "FullName":"AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch", "Parameters":{"AccessKey":"", "SecretKey":"","Region":"region", "NameSpace":"Windows-Default"}}], "Flows":{"Flows":["PerformanceCounter,CloudWatch"]}}}'}
```

## `AWS-ConfigureWindowsUpdate` ドキュメントを使用して、Windows の自動更新を有効または無効にする
<a name="walkthrough-powershell-enable-windows-update"></a>

Run Command と `AWS-ConfigureWindowsUpdate` ドキュメントを使用すると、Windows Server マネージドノードに対する Windows 自動更新を有効または無効にできます。このコマンドは、指定の日時に Windows 更新プログラムがダウンロードおよびインストールされるように Windows Update Agent を設定します。更新プログラムで再起動が必要になった場合は、更新プログラムのインストールから 15 分後にマネージドノードが自動的に再起動されます。このコマンドを使用すると、Windows Update で更新プログラムの有無が確認され、インストールは実行されないように設定することもできます。この `AWS-ConfigureWindowsUpdate` ドキュメントは Windows Server 2012 以降のバージョンで正式にサポートされています。

**説明と使用可能なパラメータを表示する**

```
Get-SSMDocumentDescription `
    –Name "AWS-ConfigureWindowsUpdate"
```

**パラメータの詳細情報を表示する**

```
Get-SSMDocumentDescription `
    -Name "AWS-ConfigureWindowsUpdate" | Select -ExpandProperty Parameters
```

### Windows 自動更新を有効にする
<a name="walkthrough-powershell-enable-windows-update-automatic"></a>

次のコマンドでは、毎日 10:00 PM に自動的に更新プログラムがダウンロードおよびインストールされるように Windows Update を設定します。

```
$configureWindowsUpdateCommand = Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-ConfigureWindowsUpdate" `
    -Parameters @{'updateLevel'='InstallUpdatesAutomatically'; 'scheduledInstallDay'='Daily'; 'scheduledInstallTime'='22:00'}
```

**Windows 自動更新を有効にするコマンドのステータスを表示する**  
次のコマンドでは、`CommandId` を使用して、Windows 自動更新を有効にするためのコマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -Details $true `
    -CommandId $configureWindowsUpdateCommand.CommandId | Select -ExpandProperty CommandPlugins
```

### Windows 自動更新を無効にする
<a name="walkthrough-powershell-enable-windows-update-disable"></a>

次のコマンドでは、システムによって更新プログラムの有無が確認されても自動的にはマネージドノードが更新されないように、Windows Update の通知レベルを引き下げます。

```
$configureWindowsUpdateCommand = Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-ConfigureWindowsUpdate" `
    -Parameters @{'updateLevel'='NeverCheckForUpdates'}
```

**Windows 自動更新を無効にするコマンドのステータスを表示する**  
次のコマンドでは、`CommandId` を使用して、Windows 自動更新を無効にするためのコマンド実行のステータスを取得します。

```
Get-SSMCommandInvocation `
    -Details $true `
    -CommandId $configureWindowsUpdateCommand.CommandId | Select -ExpandProperty CommandPlugins
```

## Run Command を使用した Windows の更新プログラムの管理
<a name="walkthough-powershell-windows-updates"></a>

Run Command と `AWS-InstallWindowsUpdates` のドキュメントを使用して、Windows Server マネージドノードの更新を管理できます。このコマンドは、マネージドノードに不足している更新プログラムをスキャンまたはインストールし、必要に応じてインストール後に再起動します。また、環境にインストールする更新の適切な分類と重大度レベルを指定することもできます。

**注記**  
Run Command を使用してスクリプトを呼び出すときのマネージドノードの再起動については、「[コマンド実行時の再起動の処理](send-commands-reboot.md)」を参照してください。

以下の例では、指定した Windows Update 管理タスクを実行する方法を示しています。

### 不足しているすべての Windows 更新プログラムを検索します。
<a name="walkthough-powershell-windows-updates-search"></a>

```
Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallWindowsUpdates" `
    -Parameters @{'Action'='Scan'}
```

### 特定の Windows 更新プログラムをインストールします。
<a name="walkthough-powershell-windows-updates-install-specific"></a>

```
Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallWindowsUpdates" `
    -Parameters @{'Action'='Install';'IncludeKbs'='kb-ID-1,kb-ID-2,kb-ID-3';'AllowReboot'='True'}
```

### 不足している重要な Windows 更新プログラムをインストールします。
<a name="walkthough-powershell-windows-updates-install-missing"></a>

```
Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallWindowsUpdates" `
    -Parameters @{'Action'='Install';'SeverityLevels'='Important';'AllowReboot'='True'}
```

### 不足している Windows Update をインストールします (特定の除外あり)。
<a name="walkthough-powershell-windows-updates-install-exclusions"></a>

```
Send-SSMCommand `
    -InstanceId instance-ID `
    -DocumentName "AWS-InstallWindowsUpdates" `
    -Parameters @{'Action'='Install';'ExcludeKbs'='kb-ID-1,kb-ID-2';'AllowReboot'='True'}
```

# Systems Manager Run Command のトラブルシューティング
<a name="troubleshooting-remote-commands"></a>

AWS Systems Manager のツールである Run Command は、各コマンド実行のステータスの詳細を表示します。コマンドのステータスの詳細については、「[コマンドのステータスについて](monitor-commands.md)」を参照してください。このトピックの情報を使用して、Run Command の問題のトラブルシューティングを行うこともできます。

**Topics**
+ [マネージドノードの一部が不足しています](#where-are-instances)
+ [スクリプトの 1 ステップが失敗しましたが、全体的なステータスは「成功」です。](#ts-exit-codes)
+ [SSM Agent が正しく実行されません](#ts-ssmagent-linux)

## マネージドノードの一部が不足しています
<a name="where-are-instances"></a>

**[Run a command]** (コマンドを実行) ページで、SSM ドキュメントの実行を選択して、**[Targets]** (ターゲット) セクションで **[Manually selecting instances]** (インスタンスの手動選択) を選択すると、コマンドを実行するために選択できるマネージドノードのリストが表示されます。

表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

マネージドノードを作成、アクティブ化、リブート、または再起動し、ノードに Run Command をインストールするか、AWS Identity and Access Management (IAM) インスタンスプロファイルをノードにアタッチした後、リストにマネージドノードが表示されるまでに数分かかる場合があります。

## スクリプトの 1 ステップが失敗しましたが、全体的なステータスは「成功」です。
<a name="ts-exit-codes"></a>

Run Command を使用すると、スクリプトが終了コードを処理する方法を定義できます。デフォルトでは、スクリプトで最後に実行されたコマンドの終了コードは、スクリプト全体の終了コードとしてレポートされます。ただし、条件ステートメントを含めて、最後のコマンドの前のいずれかのコマンドが失敗した場合にスクリプトを終了させることができます。説明と例については、「[コマンドで終了コードを指定する](run-command-handle-exit-status.md#command-exit-codes)」を参照してください。

## SSM Agent が正しく実行されません
<a name="ts-ssmagent-linux"></a>

Run Command を使用したコマンドの実行で問題が発生した場合は、SSM Agent で問題が発生している可能性があります。SSM Agent での問題の調査については、「[SSM Agent のトラブルシューティング](troubleshooting-ssm-agent.md)」を参照してください。