検索
連載

「AWS Systems Manager」の「SSMドキュメント」と「リソースグループ」を利用して「Amazon EC2」インスタンスにコマンドを一括して実行するにはAWSチートシート

AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、SSMドキュメントとリソースグループを利用して、EC2インスタンスに、コマンドを一括して実行する方法を紹介する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

数台から数十、数百台のインスタンスが存在する多様な環境の管理や運用、作業の効率化に

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する本連載「AWSチートシート」。今回は、AWS上のインフラを統合的に管理できる「AWS Systems Manager」の「Systems Managerドキュメント」(SSMドキュメント)と任意のリソースをまとめてグループ化できる「Resource Groups」(リソースグループ)を利用して、「Amazon EC2」インスタンスに、コマンドを一括して実行する方法を紹介します。


図1 SSMドキュメントを利用して、EC2インスタンスに一括でコマンドを実行

 記事「『Amazon EC2』インスタンスの設定ミスを防ぐ『AWS Systems Manager』によるリモートコマンド実行」では、SSMドキュメントやリソースグループを利用せずに、1台のEC2インスタンスにコマンドを実行する方法を紹介しましたが、今回紹介する内容は複数台のサーバを同時に操作する、より実践的な方法です。


図2 Systems Managerの「Run Command」でEC2インスタンスにコマンドを実行

 数台から数十、数百台のインスタンスが存在する大規模な環境の構築や管理を自動化し、手動作業の手間やリスクを削減する方法として確認してみてください。

SSMドキュメントとは

 SSMドキュメントを利用すると、管理しているEC2インスタンスに対して実行するアクションを定義、管理できます。

 ユーザー独自のドキュメントを作成することはもちろん、AWSよって作成されているドキュメントを利用すると自分でコマンドを作らなくても用意されているコマンドを実行できます。作成したドキュメントのカテゴリー分けやバージョン管理はもちろん、ドキュメントを指定したAWSアカウントと共有することもできます。

手順

 今回は以下の手順で、SSMドキュメントを利用してEC2インスタンスに一括でコマンドを実行し、Apacheをインストールした後に、図3のようなHTMLページを閲覧できるようにします。

  1. 「AWS Identity and Access Management」(IAM)ロールの作成
  2. EC2インスタンスの作成
  3. リソースグループの作成
  4. SSMドキュメントの作成とコマンドの実行


図3 EC2で表示するHTMLのイメージ

【手順1】IAMロールの作成

 EC2インスタンスがコマンド実行のためにSSMドキュメントなどの情報を取得する際に利用するIAMロールを作成します。

 IAMコンソールから「ロール」→「ロールの作成」と遷移し、ユースケースとして「EC2」を選択して「次へ」をクリックします。


図4 IAMロールのユースケース選択

 ロールにアタッチするポリシーは、検索窓から「AmazonEC2RoleforSSM」を検索し、チェックを付けて「次へ」をクリックします。


図5 IAMロールへのポリシーのアタッチ

 確認画面では「ec2-ssm-role」などとロール名を指定して「ロールを作成」をクリックします。


図6 IAMロールの確認画面

【手順2】EC2インスタンスの作成

 ここでは、EC2インスタンスを作成します。なお、2022年4月からEC2の作成画面がリニューアルされており、5月末にはこちらの新画面がデフォルトになる予定なので今回は新しい作成画面を利用して解説します。

 EC2ダッシュ―ボードを表示し「インスタンスを起動」をクリックします。インスタンスの起動画面では名前に「EC2-SSM-Handson」、インスタンス数に「2」と指定します。


図7 名前とインスタンス数の指定

 OSとインスタンスタイプはそれぞれデフォルトの「Amazon Linux 2」と「t2.micro」を利用するのでデフォルトのまま、キーペアは「キーペアなしで続行」を選択します。

 推奨されない旨が記載されていますが、Systems Managerを利用したコマンド実行にはキーペアは不要なので問題ありません。


図8 キーペアの指定

 ネットワーク設定の欄では「編集」をクリックして詳細を設定します。


図9 ネットワーク設定の編集

 設定画面が切り替わったらセキュリティグループの欄で「ec2-ssm-sg」などと名前を指定し、セキュリティグループのルールにあるタイプを「HTTP」に変更します。

 その他の項目はデフォルトで任意のIPアドレスからのアクセスを許可する内容になっているので、そのまま次の設定項目に進みます。


図10 セキュリティグループの設定

 最後に、高度な詳細のIAMインスタンスプロフィールの項目で、プルダウンから手順1で作成した「ec2-ssm-role」を選択します。


図11 IAMロールの設定

 全て設定したら「インスタンスを作成」ボタンを押し、2台のインスタンスが作成されることを確認します。


図12 作成されたEC2インスタンス

【手順3】リソースグループの作成

 サービスの一覧、もしくは検索窓から「Resource Groups & Tag Editor」を探して選択し、「Create a resource group」クリックしてリソースグループを作成します。


図13 Resource Groups のサービス画面

 グループの作成画面では、グループタイプとして「タグベース」を選択し、リソースタイプは「EC2」などと入力。「AWS::EC2::Instance」を選択し、タグには「Name」「EC2-SSM-Handson」をそれぞれ指定して「リソースグループをプレビュー」をクリックします。


図14 リソースグループの設定 その1

 画面下側のグループリソースの欄に、手順2で作成したEC2インスタンスが表示されるので、「EC2_SSM_Group」などと名前を指定して「グループの作成」をクリックします。


図15 リソースグループの設定 その2

【手順4】SSMドキュメントの作成とコマンドの実行

 AWSのサービス一覧、もしくは検索窓から「AWS Systems Manager」を探して選択します。Systems Managerのサービス画面に遷移したら、画面左のメニューを下までスクロールして「共有リソース」の配下にある「ドキュメント」をクリックします。


図16 Systems Manager のサービスダッシュボード

 遷移後の画面で「Create document」→「Command or session」とクリックします。ドキュメントの作成画面では、ドキュメントの名前として「InstallApache」、ドキュメントタイプとして「コマンドドキュメント」を指定します。


図17 ドキュメントの作成画面

 画面下部のコンテンツ設定では「YAML」を選択し、エディタ部分に下記のソースコードを貼り付けて「ドキュメントの作成」をクリックします。なお、こちらのドキュメントではEC2インスタンスのパッケージの最新化とApacheのインストール、HTMLページの作成を行うコマンドを定義しています。

schemaVersion: "2.2"
description: "Command Document Example JSON Template"
parameters:
  Message:
    type: "String"
    description: "Message"
    default: "Hello"
mainSteps:
- action: "aws:runShellScript"
  name: "InstallApache"
  inputs:
    runCommand:
    - 'sudo yum update -y'
    - 'sudo yum install -y httpd'
    - 'sudo systemctl start httpd.service'
    - 'sudo systemctl enable httpd.service'
    - 'echo "{{Message}} from $(hostname -f)" > /var/www/html/index.html'

 ドキュメントの作成が完了したら、ドキュメントの一覧画面から「自己所有」のタブを選択し、作成したドキュメント名の「InstallApache」をクリックします。


図18 作成したドキュメントの選択

 ドキュメントの説明画面が表示されたら、画面右上に表示されている「コマンドを実行する」をクリックします。

 新しいタブでコマンドの実行設定画面が開くので、画面をスクロールしてターゲットの設定欄で「リソースグループの選択」、リソースグループに「EC2_SSM_Group」、リソースタイプで「利用可能なすべてのリソースタイプ」をそれぞれ指定して「コマンドの実行」をクリックします。


図19 コマンド実行時のターゲット設定

 コマンド実行後のステータス画面に遷移し、実行したコマンドのIDが表示されます。しばらく待つと、コマンドの実行結果を確認できます。


図20 コマンド実行後のステータス画面

 コマンドのステータスが「成功」になっていることを確認したら、手順2で作成したEC2インスタンスのパブリックIPアドレスにそれぞれアクセスして、ApacheのセットアップとHTMLの作成の完了を確認します。


図21 SSMドキュメントを利用したコマンド実行で設定したHTMLページ

 HTMLの表示を確認したら、それぞれのEC2インスタンスのプライベートIPアドレスが画面に出力されているはずです。

筆者紹介

天野盛介(あまのせいすけ)

株式会社システムシェアード

マルチクラウドへの閉域接続サービスのサービスマネジメント業務に従事した後、AWS案件での基盤構築支援などを担当。社内では、検証・学習用にAWSを完全定額で利用できるサービス「安心サンドボックス」の立ち上げや東京ITスクールのAWS研修におけるコンテンツ開発、Java・AWS研修の講師などを歴任。


Copyright © ITmedia, Inc. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る