こんにちは、キクです。
「AWS初心者だけど、何かしらの形でアウトプットしていきたい!!」
本記事は、そんな思いから「AWS学習記録」として気ままにアウトプットしていくシリーズです。
今回は『Systems Managerでのリモート操作』をテーマに書いていきたいと思います!
本記事の内容
それでは、よろしくお願いします。
はじめに
まずはじめに、今回の作業内容について簡単にご紹介します。
今回は以下のAWS公式チュートリアルを試してみました。
講座名:EC2 インスタンスでコマンドをリモートで実行する
講座内では次のような内容を扱っています。
作成したEC2インスタンスに対してSystems Managerの「Run Command」という機能を用いてリモート操作するというものでした。
作業内容
本章では、実際にAWSでの操作内容を書いていこうと思います。
1. IAMロールの作成
まずはIAMロールの作成をしていきます。
■1-1. IAMロール管理画面から「ロールの作成」ボタンをクリック
■1-2.「信頼されたエンティティを選択」画面にて、以下の項目にチェックを入れて「次へ」をクリック
■1-3.「許可を追加」画面にて、以下のポリシーを選択して「次へ」をクリック
■1-4.「名前、確認、および作成」画面にて、以下のパラメータを入力して「ロールを作成」をクリック
■1-5. 無事にIAMロールが作成されたことを確認
2. EC2インスタンスの作成
次にSystems Managerでの操作対象となるEC2インスタンスを作成していきます。
■2-1. EC2管理画面より「インスタンスを起動」ボタンをクリック
■2-2.「インスタンスを起動」画面にて、以下のパラメータを設定して「インスタンスを起動」をクリック
■2-3. 無事にEC2インスタンスが作成されたことを確認
3. Systems Managerエージェントの更新(Run Command)
ここからはSystems Managerを利用した操作をしていきます。
まずは「Run Command」機能でEC2インスタンス内にあるSystem Managerエージェントの更新を行ないます。
■3-1. Systems Manager管理画面の左ペインにある「セッションマネージャー -> Run Command」をクリック
■3-2.「Run Command」ボタンをクリック
■3-3.「コマンドの実行」画面にて、以下のパラメータを設定して「実行」をクリック
■3-4. 正常にコマンドが完了したことを確認
4. リモートシェルスクリプトの実行(Run Command)
「Run Command」を用いてもう1つ作業を実施します。
次に行うのはEC2インスタンス内でスクリプトの実行をしていきます。
■4-1. Systems Manager管理画面の左ペインにある「セッションマネージャー -> Run Command」をクリック
■4-2.「Run Command」ボタンをクリック
■4-3.「コマンドの実行」画面にて、以下のパラメータを設定して「実行」をクリック
■4-4. 正常にコマンドが完了したことを確認
対象のインスタンスID(青文字)をクリックして画面遷移し、「Ontput」の内容確認すると指定したスクリプト(Test script start!!!!!!!!〜)が実行されているのが分かります。
5. リソースの終了
作成したAWSリソースを削除して、本チュートリアルは終了となりました。
調べたこと
ここからは僕が作業中に疑問に思ったことや調べた内容について、備忘録的に書いていこうと思います。
超初歩的な内容もあるかもしれませんがご了承ください・・・。
1. IAMロールの作成について
IAMロールの作成は「誰向けか?」によって若干手順が異なり、次のようなパターンがある。
- IAMユーザにアクセス許可を委任するロールの作成
- AWSサービスにアクセス許可を委任するロールの作成
- サードパーティーIDプロバイダー(フェデレーション)用のロールの作成
- カスタム信頼ポリシーを使用したロールの作成(コンソール)
今回のチュートリアルではパターン2に該当していると認識しています。
Systems Managerの機能でEC2インスタンスをリモート操作することから「Systems Manager側にEC2インスタンスへアクセスするロールが必要?」と考えてしまいましたが、実際にはその逆でした。
次の内容がEC2インスタンス側にIAMロールを割り当てる適切な回答なように感じました。
EC2インスタンスがコマンド実行のためにSSMドキュメントなどの情報を取得する際に利用するIAMロール
参考:「AWS Systems Manager」の「SSMドキュメント」と「リソースグループ」を利用して「Amazon EC2」インスタンスにコマンドを一括して実行するには
2. EC2がマネージドインスタンス?
本記事の第2章での作業「3. Systems Managerエージェントの更新」や「4. リモートシェルスクリプトの実行」でRun Commandのターゲットを選択する部分では、対象となるEC2インスタンスを選択していました。
仮にターゲットとなるEC2インスタンスが存在しない場合には、次のように表示されました。
"登録されたマネージドインスタンスはありません"
まだAWS初心者の筆者ですが、AWSには「マネージドサービス」と「アンマネージドサービス」があり、EC2は「アンマネージドサービス」に属していると認識しています。
そのため、EC2インスタンスを選択する画面で「マネージドインスタンスがありません」と表示されていることを疑問に思いました。
しかし、調べてみるとここでの「マネージド」とはSystems Managerで管理する対象のことを指しており、「マネージドサービス」のそれとは話が違うようでした。
ただ、「このEC2インスタンスはマネージドインスタンスにする」と明示的に設定した覚えもないような・・・と感じました。
ここについても調べてみたのですが、どうやら以下の条件を満たすことで「マネージドインスタンス」として認識されることが分かりました。
条件3は「1. IAMロールの作成」で作成したものを「2. EC2インスタンスの作成」でアタッチしているので条件満たしていることが分かります。
また、条件1のSSMエージェントについては本作業で選択したAMI「Amazon Linux 2 AMI」でインスタンスを起動した場合にはデフォルトでインストールされているみたいなので条件を満たしていることが分かります。
条件2と条件4については正直なところまだ理解が追いついていないです・・・。
これらの条件を満たすことでEC2インスタンスは晴れて「マネージドインスタンス」として認識され、Systems Managerからの操作も可能になるという仕組みだったんですね。
参考:Systems Manager コンソールの [マネージドインスタンス] に EC2 インスタンスが表示されないのはなぜですか?
3. Run Commandについて
そもそもですが「Run Commandって何?」というところから疑問を持っていました。
調べてみたら次のように説明されていました。
AWS Systems Manager の一機能である Run Command では、マネージドノードの設定を安全にリモートで管理することができます。
Run Command を使用すると、一般的な管理 タスクを自動化して、1 回限りの大規模な設定変更を実行できます。
参考:AWS Systems Manager Run Command
たしかに今回実際にRun Commandを実行してみて、コマンド単位で「実行→結果→終了」という段階を踏んでいたので、「1回限りの」という部分についても感覚的に掴めたような気がします。
おわりに
いかがだったでしょうか。
今回はSystems Managerを用いてEC2インスタンスをリモート操作するという内容でした。
根本的な部分から疑問に感じる部分も多かったので、チュートリアルの規模感以上にたくさん調べたような気もしますが、非常に勉強になりました。
ただチュートリアルをやるだけよりもたくさんのことを学べそうなので、本シリーズは継続して頑張っていきたいなと思います。
筆者と同じようにまだAWS初心者で、同じような疑問を持った方にとって少しでも参考になる情報が紹介できていれば嬉しいです。
本記事を最後まで読んでいただき、ありがとうございました。
ではでは!