Run Command の Amazon CloudWatch Logs の設定 - AWS Systems Manager

Run Command の Amazon CloudWatch Logs の設定

AWS Systems Manager の一機能である Run Command を使用してコマンドを送信するときは、コマンド出力の送信先を指定できます。デフォルトでは、Systems Manager はコマンド出力の最初の 24,000 文字のみを返します。コマンド出力の完全な詳細を表示する場合は、Amazon Simple Storage Service (Amazon S3) バケットを指定できます。または、Amazon CloudWatch Logs を指定することもできます。CloudWatch Logs を指定すると、Run Command はすべてのコマンド出力とエラーログを CloudWatch Logs に定期的に送信します。出力ログはほぼリアルタイムでモニタリングし、特定の語句、値、またはパターンを検索して、検索に基づいてアラームを作成できます。

AWS Identity and Access Management (IAM) マネージドポリシー AmazonSSMManagedInstanceCore および CloudWatchAgentServerPolicy を使用するようにマネージドノードを設定した場合、CloudWatch Logs に出力を送信するためにノードで追加の設定を行う必要はありません。コンソールからコマンドを送信する場合は、このオプションを選択するだけです。または、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、API オペレーションを使用している場合は、cloud-watch-output-config セクションと CloudWatchOutputEnabled パラメータを追加します。cloud-watch-output-config セクションおよび CloudWatchOutputEnabled パラメータについては、このトピックの後半で詳しく説明します。

EC2 インスタンス用のインスタンスプロファイルをポリシーに追加する詳細については、「Systems Manager に必要なインスタンスのアクセス許可を設定する」を参照してください。マネージドノードとして使用する予定のオンプレミスサーバーと仮想マシンのサービスロールへのポリシーの追加については、「ハイブリッドおよびマルチクラウド環境で Systems Manager に必要な IAM サービス ロールを作成する」を参照してください。

ノードでカスタムポリシーを使用している場合は、出力とログの CloudWatch Logs への送信を Systems Manager に許可するために、各ノードでポリシーを更新します。次のポリシーオブジェクトをカスタムポリシーに追加します。IAM ポリシーの詳細については、IAM ユーザーガイドの「IAM ポリシーの編集」を参照してください。

{ "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "*" }, { "Effect":"Allow", "Action":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:log-group:/aws/ssm/*" },

コマンド送信時に CloudWatch Logs を指定する

AWS Management Console からコマンドを送信するとき、出力として CloudWatch Logs を指定するには、[Output options (出力オプション)] セクションで [CloudWatch Output (CloudWatch 出力)] を選択します。オプションで、コマンド出力を送信する CloudWatch Logs グループの名前を指定できます。グループ名を指定しない場合、Systems Manager によってロググループが自動的に作成されます。ロググループの名前は /aws/ssm/SystemsManagerDocumentName 形式に従います。

AWS CLI を使用してコマンドを実行する場合は、コマンドで cloud-watch-output-config セクションを指定します。このセクションでは、CloudWatchOutputEnabled パラメータを指定することができ、オプションで CloudWatchLogGroupName パラメータを指定できます。以下はその例です。

Linux & macOS
aws ssm send-command \ --instance-ids "instance ID" \ --document-name "AWS-RunShellScript" \ --parameters "commands=echo helloWorld" \ --cloud-watch-output-config "CloudWatchOutputEnabled=true,CloudWatchLogGroupName=log group name"
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --parameters commands=["echo helloWorld"] ^ --targets "Key=instanceids,Values=an instance ID” ^ --cloud-watch-output-config '{"CloudWatchLogGroupName":"log group name","CloudWatchOutputEnabled":true}'

CloudWatch Logs でのコマンド出力の表示

コマンド実行が開始されるとすぐに、Systems Manager はほぼリアルタイムで CloudWatch Logs に出力を送信します。CloudWatch Logs の出力は次の形式になります。

CommandID/InstanceID/PluginID/stdout

CommandID/InstanceID/PluginID/stderr

実行の出力は 30 秒ごと、またはバッファが 200 KB を超えたときのどちらか早い時点でアップロードされます。

注記

ログストリームは、出力データが利用可能であるときのみ作成されます。たとえば、実行のエラーデータがない場合、stderr ストリームは作成されません。

CloudWatch Logs に表示されるコマンド出力の例を次に示します。

Group - /aws/ssm/AWS-RunShellScript
Streams – 
1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stdout
24/1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stderr