12
2
お題は不問!Qiita Engineer Festa 2023で記事投稿!

EC2 Instance Connect Endpoint ( EICE )を使ってローカルからインスタンスにアクセス

Last updated at Posted at 2023-06-20

背景

RDSでAuroraDBを作ったが、そのDB操作をローカルから実行したい。でもDBは基本的にプライベートサブネットにあるからローカルと接続するにはそれ用の踏み台サーバー作らなきゃいけないか…
と、思っていたらつい最近EC2 Instance Connect Endpointっていうサービスが出たらしい。

現在EICEは22番ポートと3389ポートのみでしか利用できなくなりました。
AWSが想定した動作ではなかったようです。

EC2 Instance Connect Endpoint(EICE)とは

公式ではこう説明されている。
「EC2 Instance Connect Endpointを使用すると、インスタンスにパブリック IPv4 アドレスを持たせることなくインスタンスに接続できます。TCP をサポートする任意のインスタンスに接続できます。」
つまりEC2上のインスタンスへのアクセス用エンドポイントを簡単に設置できるようになった。
例えばプライベートなRDSをローカルから操作することもできる。しかも無料らしい。

やること

既存のRDS(Aurora)にEICEを設置してローカルからMySQL接続する。

EICE作成

セキュリティグループの設定

  1. EICEのセキュリティグループを作成

    • RDS(接続したいインスタンス)があるVPCと同じVPCを選ぶ

    • インバウンドルール

      • タイプ:「すべてのトラフィック」
      • 自分のPCからのみアクセスできるようにソースを「マイIP」に設定
        スクリーンショット 2023-06-20 15.23.02.png
    • アウトバウンド

      • タイプ:「すべてのトラフィック」
      • ソース:RDS(接続したいインスタンス)のセキュリティグループ
        • 虫眼鏡押したら選べる
  2. RDSのセキュリティグループを編集

    • インバウンドルール
      • タイプ:「すべてのトラフィック」
      • ソース:上記で作成したEICEのセキュリティグループ

マネコン(VPC > エンドポイント)からエンドポイントを作成。

  • 以下の部分でEC2 Instance Connect Endpointを選択
    スクリーンショット 2023-06-20 15.16.14.png

  • また、VPCはRDSなどの接続したいインスタンスがあるVPCと同じものにする。

  • Subnetはどれでもいい(プライベートでも大丈夫)

「作成」を押す

RDSに接続してMySQLに入る

以下のシェルスクリプトを作成

connect-db
#!/bin/bash

##-----------------
## 接続情報
##-----------------
TARGET_EICE_ID="eice-xxxxxxxx" # EICEのID
AURORA_ENDPOINT="xxxx.cluster-xxxx.ap-northeast-1.rds.amazonaws.com" # RDSのエンドポイント
LOCAL_PORT="15432" # テキトーなローカルのポート
TARGET_PORT="3306" # RDSのポート
PROFILE="default" # プロファイル(特に変更がなければdefault)

##-----------------
## RDS接続
##-----------------
AURORA_IP=$(dig $AURORA_ENDPOINT +short | grep '^[0-9]' | head -n 1)

echo "RDSに接続します。"
str1="EICE ID : "
echo $str1$TARGET_EICE_ID
str2="AuroraDB endpoint : "
echo $str2$AURORA_IP
str3="Local port : "
echo $str3$LOCAL_PORT
str4="AuroraDB port : "
echo $str4$TARGET_PORT
str5="Profile : "
echo $str5$PROFILE
aws ec2-instance-connect open-tunnel \
    --instance-connect-endpoint-id $TARGET_EICE_ID \
    --private-ip-address $AURORA_IP \
    --local-port  $LOCAL_PORT \
    --remote-port $TARGET_PORT \
    --profile $PROFILE

./connect-db

を実行して

RDSに接続します。
EICE ID : eice-xxxxxxxx
AuroraDB endpoint : xx.x.xxx.xxx
Local port : 15432
AuroraDB port : 3306
Profile : default
Listening for connections on port 15432.

となれば接続成功。

あとは別ターミナルで

mysql -h 127.0.0.1 -P 15432 -u RDSユーザー名 -p

を実行してパスワードを入力したらMySQLに入れる。

まとめ

EC2 Instance Connect Endpoint ( EICE )を使えばローカルからインスタンスに接続できた。
踏み台サーバーやVPNのようなものを設置しなくてもいいのでかなり楽。
しかも無料。

参考資料

12
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2