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

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

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

重要

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

ステップ 1: 開始方法

ユーザーは、設定するインスタンスの管理者アクセス許可を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス許可を付与されている必要があります。また、この例では、米国東部 (オハイオ) リージョン (us-east-2) を使用しています。Run Command は、アマゾン ウェブ サービス全般リファレンス の「Systems Manager サービスエンドポイント」に記載されている AWS リージョン で利用できます。詳細については、「」を参照してくださいSystems Manager の前提条件

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

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

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

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

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

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

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

    Linux & macOS
    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 Elastic Compute Cloud (Amazon EC2) コンソールから入手できます。

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

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

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

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 ドキュメントを使用して簡単なコマンドを送信する

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

ターゲットインスタンスのオペレーティングシステムタイプが Windows Server の場合は、document-nameAWS-RunPowerShellScript に、commandifconfig から 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 Instance" \ --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 スクリプトを実行する

次のコマンドでは、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 スクリプトを実行する

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

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

#!/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 インスタンスを作成する」で説明されているように、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" ] } }