[実践]AWSでの開発環境構築：IaCでサーバー構築+VSCode Remote SSHを設定

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/02683bab-55bb-a70c-16a8-dad62dd59253.png)

# 背景
Visual Studio Codeの拡張機能であるRemote SSHを使ってEC2に接続する機会がありました。
その設定方法の備忘録として残したかったのと、せっかくなら接続先環境をIaCで書いておけば今後役立つと思い記事にする事としました。

# 実践
### 構成図
AWS上の環境はIaCでデプロイします。
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/a2c947f8-5ccb-2661-1bfe-f986d5442e3e.png)

### 作業環境 - ローカル -
作業するローカルPCの環境は以下の通りです。必要なモジュールのインストール方法はGitHubでまとめてますので、適宜参照してみてください。

* 64bit版 Windows 11 Pro
* Visual Studio Code 1.96.2 (Default Terminal: Git Bash)
* Git 2.47.1.windows.2
* AWS CLI 2.22.19.0 (profile登録&rainで利用する)
* Session Manager Plugin 1.2.553.0
* Rain v1.20.2 windows/amd64

https://github.com/tyskJ/common-environment-setup

### 環境デプロイ
まずAWS上の環境をデプロイしていきましょう。今回はAWS CloudFormationでデプロイします。
コードはGitHubで公開しています。READMEにデプロイ方法が記載されていますので、参考にしてみてください。

https://github.com/tyskJ/aws-ec2-dev-environment-for-remotessh


### pemファイル作成
CloudFormationでデプロイが完了すると、コマンドプロンプトにAWS Systems Manager Parameter Storeに保存されているキーペアの秘密鍵を取得するコマンドが表示されるため、実行します。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/da89b43d-b312-7da3-216a-8ff44458b04f.png)

実行すると、カレントディレクトに*keypair.pem*が作成されるため、*~/.ssh*フォルダに移動させます。

:::note info
*.ssh*フォルダがない場合は、作成してください。
:::

### ssm用ユーザーのプロファイル作成
同様に、CloudFormationでデプロイが完了すると、コマンドプロンプトにAmazon SecretsManagerに保存されているssm用ユーザーのアクセスキーID/シークレットアクセスキーを取得するコマンドが表示されるため、実行します。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/b9af60d7-5b04-72cf-094d-bb46eac2385f.png)

取得したssm用ユーザーのアクセスキーID/シークレットアクセスキーを使用し、*dev*プロファイルを作成します。
```bash
aws configure --profile dev
```

:::note info
デフォルトリージョンは*ap-northeast-1*です
:::

### *~/.ssh/config*作成
続いて、SSHする際のconfigファイルを作成します。HostNameに指定するインスタンスIDは、デプロイしたEC2のインスタンスIDを指定してください。
```~/.ssh/config
Host devserver # 接続先のホスト名。任意の名前でOK
  HostName "i-XXXX" # デプロイしたEC2インスタンスID
  Port 22
  User ec2-user
  IdentityFile ~/.ssh/keypair.pem
  ProxyCommand C:\Program Files\Amazon\AWSCLIV2\aws.exe ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p --profile dev
```

### 拡張機能RemoteSSHインストール
VSCodeの拡張機能の一つである*RemoteSSH*をインストールします。

![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/e705a21b-a11c-c9df-1396-7685e0df22cb.png)

インストールが完了すると、左ペインにリモートエクスプローラーが表示されます。
クリックすると、*~/.ssh/config*ファイルに設定したHostが表示されます。
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/888e4509-cb6d-147d-dd21-bf4d6f5b25b9.png)

### 接続確認
接続確認をします。ホスト名右端に表示される「新しいウィンドウで接続」をクリックします。
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/b0278561-600c-2b9f-9181-f83ad4968d01.png)

クリックすると新しくVSCodeが立ち上がります。
フィンガープリントについて確認されるので「続行」をクリックすると、EC2への接続が完了です。
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984127/52b46ba5-8b6e-643c-b954-154fa4d4dded.png)

# まとめ
今回は、VSCodeのRemote SSHでEC2に接続する方法について備忘録として記事にしました。
環境をIaC化してあるので、サクッと開発環境を作りたいときには役に立つかなと思います。
この記事が誰かの役に立てば幸いです。

# 参考文献
### リファレンス
* [AWS Systems Manager -ユーザーガイド-](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html)