「Amazon EC2」インスタンスの設定ミスを防ぐ「AWS Systems Manager」によるリモートコマンド実行:AWSチートシート
AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS Systems Manager」の「Run Command」を利用して、「Amazon EC2」インスタンス上のパッケージをアップデートするコマンドをリモートで実行する方法を紹介する。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS Systems Manager」の「Run Command」を利用して、「Amazon EC2」インスタンス上のパッケージをアップデートするコマンドをリモートで実行する方法を紹介します(図1)。
Run Commandを利用するとEC2インスタンスに接続する必要がなくなるので、OSのパスワードが不要になったり、RDP(Remote Desktop Protocol)やSSH(Secure Shell)のインバウンドポートを開放しなくてもよくなったりするなどのメリットがあります。さらに、複数あるEC2インスタンスに1台ずつ接続しなくても一括でコマンドを実行することができ、「Windows Server」の管理者パスワードを紛失してしまった場合などにも活用できるので、ぜひこの方法を覚えておきましょう。
「AWS Systems Manager」とは
AWS Systems Managerは、AWSで利用しているサーバの運用状況を把握して、リソース全体の管理や運用タスクを安全かつ大規模に実行できるサービスです。
Systems Managerには、今回紹介するRun Commandの他にも、サービス停止時間の定義や運用タスクの自動化、設定値やパスワードの集中管理などさまざまな機能があります。
手順
今回の手順は以下の通りです。
- Systems Managerへのアクセスを許可する「AWS Identity and Access Management」(IAM)ロールの作成
- EC2インスタンスの作成
- SSMエージェントの更新
- Run Commandでコマンドを実行
※今回はパブリックサブネットのEC2へアクセスするので不要ですが、プライベートサブネットのEC2へコマンドを実行するには別途「Amazon VPC」(Virtual Private Cloud)エンドポイントの設定が必要になります。
1. Systems Managerへのアクセスを許可するIAMロールの作成
IAMコンソールを開き、画面左のナビゲーションペインから「ロール」→「ロールの作成」を選択します。ロールの作成画面では、ユースケースとして「EC2」を選択して「次のステップ:アクセス権限」をクリックします(図2)。
続いてポリシーの検索バーに「AmazonEC2RoleforSSM」と入力して、マネージドポリシーとして用意されている「AmazonEC2RoleforSSM」を選択して「次のステップ:タグ」をクリックします(図3)。
「タグ」は必要に応じて任意のタグを設定し、確認画面で「EC2InstanceRoleForSSMRunCommand」などとロール名を入力して「ロールの作成」をクリックします(図4)。
2. EC2インスタンスの作成
次に、手順1で作成したIAMロールを使用してコマンドを実行する対象となるEC2インスタンスを作成します。
任意のリージョンを選択してからEC2コンソールを開いて「インスタンスを起動」を選択し、今回はSSMエージェントがデフォルトでプリインストールされている「Amazon Linux 2 AMI」を選択してEC2インスタンスを構築します(図5)。
※Amazon Linuxの他に一部の「Ubuntu」やWindows ServerでもSSMエージェントはプリインストールされています。プリインストールされていない場合でも別途手動でインストールすることで対応可能です。詳しくは下記公式ドキュメントをご参照ください。
今回はインスタンスタイプで「t2.micro」を選択し、インスタンスの詳細設定画面のIAMロールに手順1で作成したIAMロールを選択してEC2インスタンスを作成します。今回は利用しないので、キーペアは作成不要です(図6)。
これで、EC2インスタンスをSystems Managerから管理できるようになりました。
既に起動中のEC2インスタンスが存在する場合は、インスタンスを選択してインスタンスがパブリックサブネット内にあることを確認した上で、「アクション」→「セキュリティ」→「IAMロールを変更」から手順1で作成したIAMロールをアタッチすることでSystems Managerを利用できます(図7)。
3. SSMエージェントの更新
SSMエージェントを実行するEC2インスタンスができたので、今度はエージェントを最新の状態に保つように設定しておきます。Systems Managerコンソールを開いて左側のナビゲーションで「マネージドインスタンス」を選択します(図8)。
マネージドインスタンスの一覧で対象のインスタンスIDを選択して「Account management」→「Auto-update SSM management」の順にクリックします(図9)。
すると、確認ウィンドウが現れるので「SSMエージェントの自動更新」をクリックすれば設定完了です(図10)。
4. Run Commandでコマンドを実行
Systems ManagerのRun Commandを利用してEC2インスタンスにコマンドを実行していきましょう。再び「Systems Manager」コンソールに遷移し、画面左のナビゲーションから「Run Command」をクリックします(図11)。
初回実行時には次のような画面が表示されるので、続けて「コマンドを実行する」をクリックします(図12)。
遷移先のコマンドの実行ページでは、検索バーをクリックし「ドキュメント名のプレフィックス」→「Equals」の順に選択した後、「AWS-RunShellScript」と入力します。
検索結果として「AWS-RunShellScript」が表示されるので、ラジオボタンをクリックします(図13)。
※Windowsインスタンスの場合「AWS-RunPowerShellScript」を検索、選択してください。
ラジオボタンをクリックしたら、そのまま画面を下へスクロールして「コマンドのパラメータ」欄に任意のコマンドを入力します。今回は「sudo yum update -y」と記載しています(図14)。
コマンドの入力後はさらに画面を下へスクロールし「ターゲット」の項目で「インスタンスを手動で選択する」をクリックし、コマンドの実行対象となるインスタンスを選択します(図15)。
これらの他にも「Amazon S3」へのコマンド実行結果のログ保存やコマンドステータスのSNS通知などを設定できますが、今回はいずれも設定せずにコマンドを「実行」します。
Run Commandの実行後は、確認画面でコマンドの実行ステータスを確認できます(図16)。
終わりに
今回はSystems Managerを利用してEC2インスタンスにリモートでコマンドを実行する方法を紹介しました。こちらは厳格な運用が求められる本番サーバを設定する場合などにとても役立つ方法です。
また、Systems Managerには他にもサーバの運用を簡易化できる機能がたくさん存在するのでぜひ一度利用してみてください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ファイルをクラウドに送ってもらうにはどうするの?――リモート管理とデータ転送を安全に行うための基礎知識
親子の会話で出てくるような素朴な疑問点から、クラウド環境における情報セキュリティの技術を学習する連載。今回は、クラウド環境でリモート管理とデータ転送を安全に行うための基礎知識について。 - Kubernetesを学ぶ意味とは――AWS EKSでクラスタを構築してみよう
本連載では、AWSが提供するマネージドKubernetesサービスの「EKS」を用いてアプリケーションを公開する方法を紹介。第1回目は、いまからKubernetesを学ぶ意味と、AWS EKSでクラスタを構築する方法について。 - AWSのコンテナ責任者が語るFargate、ECS、App Mesh、EKS、そしてKubernetes
AWSのコンテナ責任者を務めているディーパック・シン氏は、Fargate、ECS、App Mesh、EKS、Kubernetesなどのコンテナ関連プロダクトを通じてユーザーに提供したいとことは一つだと話す。