【Windowsで動作確認済み】開発環境用にEC2インスタンスを作成し、SSM Session ManagerとVS Codeを使ってSSH接続する

記事タイトルとURLをコピーする

はじめに

こんにちは、サービス開発課の行武です。

今回は、開発環境用にAmazon EC2インスタンス(Amazon Linux2)を作成し、ローカルのWindows PCでSSH接続の設定をして、VS CodeからSSH接続するまでの手順を備忘録としてまとめます。

本記事がなにかの参考になれば幸いです。

【関連】

環境情報

本記事の内容は、以下の環境で動作を確認しました。

環境情報 バージョン
OS Windows 11 Home 21H2
AWS CLI 2.7.27
Session Manager Plugin 1.2.339.0
Git 2.37.2.windows.2
VS Code 1.70.2

EC2インスタンスの作成

Amazon EC2コンソールにアクセスし、以下の設定内容でEC2インスタンスを起動します。

特筆すべき項目については表の下で補足します。

項目 設定内容
Name 任意の値
AMI Amazon Linux 2(最新バージョン)
VPC 任意のVPC
Subnet 任意のSubnet
セキュリティーグループ 任意のセキュリティーグループ
IAMインスタンスプロファイル 適切なIAMポリシーが適用されたIAMロール
EBSボリュームタイプ GP3
EBSボリュームサイズ 30GiB
キーペア 任意のキーペア

セキュリティーグループについて

今回は通常のSSH接続ではなく、Session ManagerとVS Codeを使ったSSH接続を行うため、SSH用のインバウンドルールを追加しません。

IAMインスタンスプロファイルについて

IAMインスタンスプロファイルは、EC2インスタンス起動画面の下部にある「高度な詳細」を開くことで設定できます。

Session ManagerとVS Codeを使ったSSH接続をする際、対象のEC2インスタンスにはAWS Systems Managerへのアクセス権限が必要です。

そのため、IAMポリシー AmazonSSMManagedInstanceCore を追加したIAMロールを新たに作成し、IAMインスタンスプロファイルに設定します。

キーペアについて

SSH接続するため、キーペア(RSA・.pem)を作成して、秘密鍵をローカルPCにダウンロードしておきます。

EC2インスタンスの起動

設定が終わったら、EC2インスタンスを起動します。

Session ManagerとVS Codeを使ったSSH接続の設定

通常のSSH接続ではなく、Session ManagerとVS Codeを使ったSSH接続を行うための設定を行います。

なお、Session ManagerとVS Codeを使ったSSH接続の方法は、以下の記事で詳しく解説されていますので、合わせてご参照ください。

https://blog.serverworks.co.jp/vscode-remote-ssh-via-session-manager

必要なツールのインストール

以下のツールをインストールして、初期設定をします。

設定ファイルに接続情報を追記

リモートSSH接続の接続情報を設定ファイル(C:Users\ユーザー名.ssh\config)に追記します。

  • VS Codeを開き、[ctrl + shift + p]を同時押しします。
  • 表示された入力欄に Remote-SSH: Open SSH Configuration File と入力します。
  • 表示された C:Users\ユーザー名\.ssh\config をクリックします。
  • 表示されたテキストファイルに以下のような内容を追記します。
    • Host, HostName, IdentityFileの内容を変更してください。
      • Host: 接続先を選択する時に表示されます。任意の名前を入力してください。
      • HostName: 接続先のEC2インスタンスのインスタンスIDを入力してください。
      • IdentityFile: SSH接続用の秘密鍵のパスを入力してください。
Host DEV
  ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession
  HostName i-000000000000
  User ec2-user
  IdentityFile C:Users\ユーザー名\.ssh\my-key-pair.cer

秘密鍵の配置と権限設定

エクスプローラーを開き、C:Users\ユーザー名\.ssh\ にダウンロードした秘密鍵を配置します。

秘密鍵に適切な権限を設定します。

  • 秘密鍵を選択した状態で右クリック、プロパティを選択します。
  • セキュリティタブを開き、詳細設定をクリックします。
  • 「継承の無効化」をクリックし、上の選択肢「継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します」をクリックします。
  • 許可エントリの下にある、秘密鍵のユーザー(自分自身)を除くすべてのユーザー、グループ等を削除します。
  • 「OK」をクリックします。
  • 秘密鍵のユーザー(自分自身)がフルコントロールに設定されていることを確認し、「OK」をクリックします。

Session ManagerとVS Codeを使ってSSH接続

ここまでの設定が完了したら、Session ManagerとVS Codeを使って、EC2インスタンスへSSH接続します。

  • VS Codeを開き、[ctrl + shift + p]を同時押しします。
  • 表示された入力欄に Remote-SSH: Connect to Host と入力します。
  • 設定ファイルに追加したHost名をクリックします。
  • 表示されたダイアログで「linux」「continue」をクリックします。

以上で、EC2インスタンスへリモートSSH接続できるかと思います。

トラブルシューティング

もしうまく接続できないときは、以下の点を再度ご確認ください。

  • VS Codeを再起動して、改めてSSH接続を試みる。
  • 秘密鍵に適切な権限を付与する。
  • 必要なツールをインストールする。
    • AWS CLI
    • Session Manager Plugin
    • Git
    • VS Code
    • VS Code拡張機能「Remote Development」
  • AWS CLIの初期設定をする。
  • Git付属のssh.exeを利用するように設定する。
  • 設定ファイル(C:Users\ユーザー名.ssh\config)に接続情報を正しく記載する。
  • EC2インスタンスに適切なIAMインスタンスプロファイルを設定する。

おわりに

ご覧いただき、ありがとうございました!

次回以降、開発用EC2インスタンスの初期設定と各種ツールのインストールについて紹介する予定です。

【続編の記事】

行武 直人 (記事一覧)

2020年4月 新卒入社
サービス開発部サービス開発課所属

2024 AWS ALL Certifications Engineers
Railsアプリ開発者
@zhiren1211