【追記あり】EC2 Instance Connect EndpointでRDSにつないでみた所感

技術本部 サービスリライアビリティグループ(SRG)の鬼海(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、SRG 内にある DBWG(DBワーキンググループ)が全社内向けに提供しているデータベースに関する資料を公開します。
なにかの役に立てば幸いです。
 
 

【6/28 追記】SSH,RDP以外のポートに接続できなくなりました

AWSさん的にも想定していた使い方ではなかったのでしょう。現在はTCP22,TCP3389以外のポートではエラーが出るようになってしまいましたので、下記の方法は使えません。
残念です。

はじめに


パブリックIPを持たない環境に接続できるようになったEC2 Instance Connect Endpointが最近話題になりましたね。
 
クラスメソッドさんのこちらの記事を実際に試してみた記録です。
 
EC2 Instance Connect Endpoint自体はこちらのAWS公式ブログの記事で詳しく解説されています。

手元の環境からAuroraに接続するまでの流れ


必要なセキュリティグループ作成

以下の2つのセキュリティグループを作成します。
  • VPCエンドポイント用にアウトバウンド3306を許可するSG
 
  • Auroraインスタンス用にVPCエンドポイントからインバウンド3306を許可するSG
 

VPCエンドポイントの作成

[ VPC ] → [ エンドポイント ] → [ エンドポイントの作成 ]を押します。
名前タグに適当な名前を入力し、サービスカテゴリでEC2 Instance Connect Endpointを選択します。
セキュリティグループには先程作成したVPCエンドポイント用のセキュリティグループを選択し、
VPCとサブネットを指定してエンドポイントを作成します。

Auroraにセキュリティグループを付与

すでに稼働しているAuroraクラスタがあれば、それに先程作成したAurora用のセキュリティグループを付与します。
RDSインスタンスを選択→変更 から
 

トンネルを張る

aws ec2-instance-connect open-tunnelコマンドをつかってトンネルを張ります。
 
AuroraのプライベートIPアドレスは接続したいAuroraのエンドポイントをnslookupコマンドなどで叩くと確認することができます。
 

ローカル環境からAuroraを叩いてみる

つながりました!
 

所感


セッション最大時間は1時間(3600秒)でそれより伸ばせない

ec2-instance-connectコマンドのオプションで最大3600秒まで指定できます。デフォルト値は3600秒となっています。
RDSに接続して、重いクエリを投げた際に1時間を超えてしまう場合は途中で切れてしまいます。
Session Managerの場合最大24時間まで伸ばせるので
 

AZ障害に弱い

他のブログ記事などでも言及されていますが、VPCエンドポイントは現時点ではVPC1つに対して1つしか作成できません。上限緩和申請なども現時点ではないようです。
そのため作成したAZで障害が起きた場合接続ができなくなることが考えられます。
 

Github ActionsからもDB操作もできる

プライベートサブネット環境にいるRDS(Aurora)にたいして接続できるので、
例えばGithub ActionでOIDCかアクセスキーをつかいAWS認証をしておくことで、プライベートサブネットのDBに接続して操作することが可能です。

終わりに


EC2による踏み台がなくてもRDSなどに接続できるようになったのは嬉しいアップデートでした。
従来の踏み台構成とSession ManagerとEC2 Instance Connect Endpoint、それぞれの要点を整理してベストな方法を選択できるようにしたいですね。
 
SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。
 
このエントリーをはてなブックマークに追加