AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、SSMドキュメントとリソースグループを利用して、EC2インスタンスに、コマンドを一括して実行する方法を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する本連載「AWSチートシート」。今回は、AWS上のインフラを統合的に管理できる「AWS Systems Manager」の「Systems Managerドキュメント」(SSMドキュメント)と任意のリソースをまとめてグループ化できる「Resource Groups」(リソースグループ)を利用して、「Amazon EC2」インスタンスに、コマンドを一括して実行する方法を紹介します。
記事「『Amazon EC2』インスタンスの設定ミスを防ぐ『AWS Systems Manager』によるリモートコマンド実行」では、SSMドキュメントやリソースグループを利用せずに、1台のEC2インスタンスにコマンドを実行する方法を紹介しましたが、今回紹介する内容は複数台のサーバを同時に操作する、より実践的な方法です。
数台から数十、数百台のインスタンスが存在する大規模な環境の構築や管理を自動化し、手動作業の手間やリスクを削減する方法として確認してみてください。
SSMドキュメントを利用すると、管理しているEC2インスタンスに対して実行するアクションを定義、管理できます。
ユーザー独自のドキュメントを作成することはもちろん、AWSよって作成されているドキュメントを利用すると自分でコマンドを作らなくても用意されているコマンドを実行できます。作成したドキュメントのカテゴリー分けやバージョン管理はもちろん、ドキュメントを指定したAWSアカウントと共有することもできます。
今回は以下の手順で、SSMドキュメントを利用してEC2インスタンスに一括でコマンドを実行し、Apacheをインストールした後に、図3のようなHTMLページを閲覧できるようにします。
EC2インスタンスがコマンド実行のためにSSMドキュメントなどの情報を取得する際に利用するIAMロールを作成します。
IAMコンソールから「ロール」→「ロールの作成」と遷移し、ユースケースとして「EC2」を選択して「次へ」をクリックします。
ロールにアタッチするポリシーは、検索窓から「AmazonEC2RoleforSSM」を検索し、チェックを付けて「次へ」をクリックします。
確認画面では「ec2-ssm-role」などとロール名を指定して「ロールを作成」をクリックします。
ここでは、EC2インスタンスを作成します。なお、2022年4月からEC2の作成画面がリニューアルされており、5月末にはこちらの新画面がデフォルトになる予定なので今回は新しい作成画面を利用して解説します。
EC2ダッシュ―ボードを表示し「インスタンスを起動」をクリックします。インスタンスの起動画面では名前に「EC2-SSM-Handson」、インスタンス数に「2」と指定します。
OSとインスタンスタイプはそれぞれデフォルトの「Amazon Linux 2」と「t2.micro」を利用するのでデフォルトのまま、キーペアは「キーペアなしで続行」を選択します。
推奨されない旨が記載されていますが、Systems Managerを利用したコマンド実行にはキーペアは不要なので問題ありません。
ネットワーク設定の欄では「編集」をクリックして詳細を設定します。
設定画面が切り替わったらセキュリティグループの欄で「ec2-ssm-sg」などと名前を指定し、セキュリティグループのルールにあるタイプを「HTTP」に変更します。
その他の項目はデフォルトで任意のIPアドレスからのアクセスを許可する内容になっているので、そのまま次の設定項目に進みます。
最後に、高度な詳細のIAMインスタンスプロフィールの項目で、プルダウンから手順1で作成した「ec2-ssm-role」を選択します。
全て設定したら「インスタンスを作成」ボタンを押し、2台のインスタンスが作成されることを確認します。
サービスの一覧、もしくは検索窓から「Resource Groups & Tag Editor」を探して選択し、「Create a resource group」クリックしてリソースグループを作成します。
グループの作成画面では、グループタイプとして「タグベース」を選択し、リソースタイプは「EC2」などと入力。「AWS::EC2::Instance」を選択し、タグには「Name」「EC2-SSM-Handson」をそれぞれ指定して「リソースグループをプレビュー」をクリックします。
画面下側のグループリソースの欄に、手順2で作成したEC2インスタンスが表示されるので、「EC2_SSM_Group」などと名前を指定して「グループの作成」をクリックします。
AWSのサービス一覧、もしくは検索窓から「AWS Systems Manager」を探して選択します。Systems Managerのサービス画面に遷移したら、画面左のメニューを下までスクロールして「共有リソース」の配下にある「ドキュメント」をクリックします。
遷移後の画面で「Create document」→「Command or session」とクリックします。ドキュメントの作成画面では、ドキュメントの名前として「InstallApache」、ドキュメントタイプとして「コマンドドキュメント」を指定します。
画面下部のコンテンツ設定では「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」をクリックします。
ドキュメントの説明画面が表示されたら、画面右上に表示されている「コマンドを実行する」をクリックします。
新しいタブでコマンドの実行設定画面が開くので、画面をスクロールしてターゲットの設定欄で「リソースグループの選択」、リソースグループに「EC2_SSM_Group」、リソースタイプで「利用可能なすべてのリソースタイプ」をそれぞれ指定して「コマンドの実行」をクリックします。
コマンド実行後のステータス画面に遷移し、実行したコマンドのIDが表示されます。しばらく待つと、コマンドの実行結果を確認できます。
コマンドのステータスが「成功」になっていることを確認したら、手順2で作成したEC2インスタンスのパブリックIPアドレスにそれぞれアクセスして、ApacheのセットアップとHTMLの作成の完了を確認します。
HTMLの表示を確認したら、それぞれのEC2インスタンスのプライベートIPアドレスが画面に出力されているはずです。
マルチクラウドへの閉域接続サービスのサービスマネジメント業務に従事した後、AWS案件での基盤構築支援などを担当。社内では、検証・学習用にAWSを完全定額で利用できるサービス「安心サンドボックス」の立ち上げや東京ITスクールのAWS研修におけるコンテンツ開発、Java・AWS研修の講師などを歴任。
Copyright © ITmedia, Inc. All Rights Reserved.