IT技術のパンくず

未来の自分のためにパンくずを残しておくためのブログ

VSCodeを使ってAWS EC2にSSM経由で接続する

はじめに

EC2インスタンスVSCodeのアドオン(Remote Development)を使ってSSM経由で接続する手順をまとめておきます。

VSCodeを使ってEC2インスタンスに接続することで直接EC2インスタンスのファイルを編集できたり

ローカルのファイルをドラッグアンドドロップで移せるといったことができるようになります。

なお、以下の手順はLinux環境(Ubuntu 20.04.1 LTS )で検証しています。

前提

  • aws cliをインストールしていること(当記事内ではv2.1.19を使用)
  • aws cliにクレデンシャルを登録していること
  • session-manager-pluginをインストールしていること
  • VSCodeをインストールしていること

手順

VSCodeのアドオンをインストールする

VSCodeでアドオン Remote Development をインストールします。

f:id:hhhryoma:20210117042854p:plain

インストール後に左端ツールバーにアイコン(画像緑枠のアイコン)が追加されているのでそのアイコンをクリックします。

f:id:hhhryoma:20210117042900p:plain

sshコンフィグを編集する

画像の歯車アイコン(画面緑枠)をクリックします。

クリックするとsshのコンフィグファイルを選択するポップアップ(画面赤枠)が表示されます。 一覧から編集したいコンフィグファイルを選択します。

f:id:hhhryoma:20210117043056p:plain

選択したコンフィグファイルに以下の内容を追記します。

Host ssm-test
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
    HostName i-XXXXXXXX # EC2インスタンスのID
    User ec2-user # EC2インスタンスのユーザ(ここではAmazon Linuxのデフォルトユーザを指定している)
    IdentityFile ~/.ssh/ssm-test.pem # ssh接続に使用する秘密鍵のパス

EC2インスタンス秘密鍵を配置する

EC2インスタンス秘密鍵を~/.sshに配置します。

mv ssm-test.pem ~/.ssh/

秘密鍵には適切な権限を設定していないとssh接続時にエラーになってしまいます

以下のコマンドで秘密鍵に対し適切な権限を設定します。

sudo chmod 600 ~/.ssh/ssm-test.pem

ここまでで、sshコマンドでEC2インスタンスに接続できるようになっています。

実際に接続できるか確認してみます。

問題なければ以下のようになります。

astro@astro-VirtualBox:~/.ssh$ ssh ssm-test # ssh(ssm経由)で接続
Last login: Sat Jan 16 18:45:11 2021 from localhost

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 5 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-XXX-XX-XX-XXX ~]$ exit # 接続できるのが確認できた
ログアウト
Connection to i-XXXXXXXXXX closed.

VSCodeからEC2インスタンスに接続する

VSCodeからEC2インスタンスに接続していきます。

接続先を選択し、右クリックします。

コンテキストメニューで以下の選択ができます。

今回は今開いているVSCodeで接続します。

左下(画像赤枠)に指定した接続先のHost名が入っていれば問題なく接続できています。

f:id:hhhryoma:20210117042951p:plain

ローカルからEC2インスタンスへのファイル移動もドラッグアンドドロップでできますね。

※EC2インスタンスからローカルインスタンスへのファイル移動はscpコマンドを使う必要があります。

f:id:hhhryoma:20210117042947p:plain