はじめに
こんにちは、サービス開発課の行武です。
今回は、開発環境用に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
必要なツールのインストール
以下のツールをインストールして、初期設定をします。
- AWS CLI
- 以下のページからダウンロード、インストールしてください。
- インストール後、以下のページに従い、アクセスキーとAWSリージョンを登録します。
- Session Manager Plugin
- VS Code
- 以下のページからダウンロード、インストールしてください。
- VS Code拡張機能「Remote Development」
- 以下のページからダウンロード、インストールしてください。
- インストール後、VS Codeを再起動します。
- Git
- Windows標準のssh.exeがVS CodeのRemote SSHでうまく動作しないため、Windows版Git付属のssh.exeを利用します。
- 以下のページからダウンロード、インストールしてください。
- インストール後、Windows版Git付属のssh.exeを利用するように設定します。
- VS Codeを開き、[ctrl + shift + p]を同時押しします。
- 表示された入力欄に
Remote-SSH: Settings
と入力します。 - 下の方に表示される「Remote.SSH: PATH」の入力欄に
C:\Program Files\Git\usr\bin\ssh.exe
と入力し、ページを閉じます。
設定ファイルに接続情報を追記
リモート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, HostName, IdentityFileの内容を変更してください。
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