チュートリアル: Run Command で AWS CLI を使用する - AWS Systems Manager

チュートリアル: Run Command で AWS CLI を使用する

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

重要

信頼されている管理者のみが、このトピックで示される Systems Manager で事前設定されたドキュメントの使用を許可されます。Systems Manager ドキュメントで指定されるコマンドまたはスクリプトは、管理権限でインスタンスで実行されます。ユーザーに、事前定義済みの Systems Manager ドキュメント (AWS- から始まるドキュメント) を実行するアクセス許可がある場合、そのユーザーには、インスタンスへの管理者アクセス権もあります。他のすべてのユーザーについては、制限付きドキュメントを作成し、そのドキュメントを特定のユーザーと共有する必要があります。Run Command へのアクセス制限の詳細については、「Systems Manager 用に管理者以外の IAM ユーザーおよびグループを作成する」を参照してください。

ステップ 1: 開始方法

ユーザーは、設定するインスタンスの管理者権限を持っているか、IAM で適切なアクセス権を付与されている必要があります。また、この例では US East (Ohio) Region (us-east-2) を使用しています。Run Command は現在、Amazon Web Services General Referenceの「Systems Manager サービスエンドポイント」に記載されている AWS リージョンで利用できます。詳細については、「Systems Manager の前提条件」を参照してください。

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

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

    詳細については、「AWS コマンドラインツールをインストールまたはアップグレードする」を参照してください。

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

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

    aws ssm list-documents
  3. インスタンスでコマンドを受信する準備ができていることを確認します。

    インスタンスがオンラインの場合は、次のコマンドの出力が表示されます。

    Linux
    aws ssm describe-instance-information \ --output text --query "InstanceInformationList[*]"
    Windows
    aws ssm describe-instance-information ^ --output text --query "InstanceInformationList[*]"
  4. 特定のインスタンスについての詳細を表示するには、次のコマンドを使用します。

    注記

    このチュートリアルのコマンドを実行するには、インスタンス ID およびコマンド ID を置き換える必要があります。コマンド ID は send-command に対する応答として返されます。インスタンス ID は、Amazon EC2 コンソールで取得できます。

    Linux
    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: シェルスクリプトを実行してリソースの詳細を表示する

Run Command と AWS-RunShellScript ドキュメントを使用すると、ローカルにログオンしているかのように EC2 インスタンスでコマンドまたはスクリプトを実行できます。

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

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

Linux
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
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "Document.Parameters[*]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "Document.Parameters[*]"

ステップ 3: AWS-RunShellScript ドキュメントを使用して簡単なコマンドを送信する

インスタンスの IP 情報を取得するには、次のコマンドを使用します。

Linux
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
aws ssm list-command-invocations \ --command-id $sh-command-id \ --details
Windows
aws ssm list-command-invocations ^ --command-id $sh-command-id ^ --details

ユーザーアカウントの特定

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

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

コマンドステータスの取得

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

Linux
aws ssm list-commands \ --command-id "command-ID"
Windows
aws ssm list-commands ^ --command-id "command-ID"

コマンドの詳細の取得

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

Linux
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
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
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 スクリプトを実行する

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

Linux
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}"'