未定の部屋

主にデータサイエンス関係の記事を書きます

VSCodeを使ってEC2インスタンスにSSH接続する

こんにちは。最近業務でAWSを触ることが多く、その中でEC2インスタンスSSH接続するところで躓いたので備忘録として残しておこうと思います。

前提

  • ローカル環境:Windows10
  • VSCodeのRemote SSHを使ってローカルからEC2インスタンスに接続する
  • Session Managerを使用して接続する
    イメージ図

VPC、セキュリティグループ、IAMロールの準備(必要に応じて)

VPC

  • 作成するリソース:VPCなど
  • 名前タグ:任意の名前を設定してください
  • アベイラビリティゾーンの数:1

  • パブリックサブネットの数:1

  • プライベートサブネットの数:0
  • NATゲートウェイVPCエンドポイント:なし

これで「VPCを作成」を押すと、VPC・サブネット・ルートテーブル・インターネットゲートウェイの作成と設定が完了します

セキュリティグループ

  • セキュリティグループ名:任意の名前
  • 説明:任意の説明
  • VPC:作成したVPCを選択
    • VPCのIDが作成したものと合っているか確認
  • タイプ:SSH
  • ソース:マイIP

  • その他はデフォルトのまま、作成

IAMロール

IAMダッシュボード→ロール→ロールを作成、の順で作成します

  • エンティティタイプ:AWSのサービス
  • ユースケース:EC2
  • 以上を設定して次へ

  • 許可ポリシーの追加

    • 「AmazonSSMManagedInstanceCore」と検索し、出てきたポリシーを選択して次へ
  • ロール名:好きな名前を付けてください

  • 他はデフォルトのままで「ロールを作成」を押します

EC2インスタンスの作成

  • Name and tags:好きな名前を付けてください
  • アプリケーションおよび OS イメージ (Amazon マシンイメージ):今回はAmazon Linuxを選択しました

  • インスタンスタイプ:用途に適したものを選択してください

  • キーペア:

    • すでにある場合は選択のプルダウンから選択してください
    • 新しく作成する場合は以下の手順で作成してください
      • 「新しいキーペアの作成」を選択
      • キーペア名に好きな名前を入力
      • キーペアのタイプ:RSA
      • ファイル形式:.pem
      • 作成後、任意のディレクトリに保存
  • ネットワーク設定

    • 予め準備したVPC、サブネット、セキュリティグループを選択します(もしかしたらデフォルトのままでも行けるかもしれないですが、確認できてないです)
    • 添付画像とは異なりますが、「パブリックIPの自動割当て」は有効にしてください
  • 高度な詳細

    • 事前に準備したIAMロールをアタッチします
  • その他はデフォルトのままでOKです

ローカル環境の準備

予め以下のソフトウェアをインストールしておく必要があります * OpenSSH Client (大抵のOSではデフォルトインストール済み) * Visual Studio Code * AWS CLI * SSM Session Manager plugin

AWS CLI

AWS CLIとは?インストール手順や使い方を初心者向け…|Udemy メディア
↑のサイトなどを参考にインストールとコンフィグ設定を行ってください

  • アクセスキーとシークレットアクセスキー
    • ユーザー発行時に発行されていると思います
    • ない場合はAWSマネジメントコンソールでIAM→ユーザー→[自分のユーザー名]のページに移動し、セキュリティ認証情報のタブからアクセスキーを作成できます
  • コンフィグ設定
    • リージョンについてはマネジメントコンソールで普段使っているリージョンを設定しておいた方がいいです(指定せずにSSH接続を試みたときにエラーが出たので)
      • 例えば東京ならap-northeast-1です

SSM Session Manager plugin

SSH接続の設定

以下、VSCodeで設定する場合についてを記載します

  • 拡張機能でRemote Developmentを入れておきます

  • VSCodeの画面からリモートエクスプローラーのアイコンをクリックし、SSHの右にある設定マークを押すとコンフィグファイルが開きます

  • コンフィグファイルに以下の記述を追加します

    • Host:好きな名前を入れてください
    • HostName:EC2インスタンスIDを記入します
    • User:Amazon Linuxなら「ec2-user」です(マシンイメージによって変わるので注意)
    • IdentityFile:EC2インスタンス作成時に作成した.pemファイルのパスです
    • ProxyCommand:SSMを使ってSSH接続する際に必要な設定です
      • 最後の「your profile」はAWS CLI設定時のprofile名を入れてください。何も設定していない場合は「default」になります
# SSH to remote VS Code instance
Host my-vscode-remote
    HostName "インスタンスID"
    Port 22
    User ec2-user
    IdentityFile "EC2キーペア秘密鍵のフルパス" 
    ProxyCommand C:\Program Files\Amazon\AWSCLIV2\aws.exe ssm start-session --target %h --document-name AWS-StartSSHSession --parameters "portNumber=%p" --profile your_profile

  • コマンドでssh接続をし、以下のような出力が出てくれば成功です

  • VSCodeから接続します

    • コンフィグファイルに書いたHostの名前と同じ名前の接続先にカーソルを合わせ「新しいウィンドウで接続」を押します
    • 最初にリモート側のプラットフォームを聞かれるので「Linux」を選択します
  • 接続できると以下のようなウィンドウが開きます

参考