🐡

ECSを通してローカルからRDSに接続する

2024/03/07に公開

この記事に書いてあること

  • ecstaというツールでECS上のApplication ServerからDB Instanceにport fowardingする
  • ツール選定を含めて別のやり方でも可能だが一例を記載する
    • もっと良い方法があれば教えて下さい

構成

今回想定している構成は次の図の通りです。

構成図

ECS上にApplication Serverが存在し、RDSとの疎通は取れている状態です。
開発・運用においてRDSにローカルからアクセスしたいことがあった時、踏み台インスタンスを作成したりセキュリティに穴を増やしたくなかったので、既存のコンテナを流用してDBへport fowardingすることにしました。

ecsta

ecstaというecs taskを便利に扱うcliツールを用います。

// macの場合のecsta導入
$ brew install fujiwara/tap/ecsta

手順

ecstaでtask idを取得する

ecstaでport forwardingを行うには、当該taskのidが必要なため、これを取得します。

  1. aws profileを設定する
$ export AWS_PROFILE={任意のaws認証情報}
  1. タスクIDを取得する
$ ecsta describe
  1. cluster リストが表示される
{実行されているtask名}
Enter cluster name:
  1. 目的のcluster名を入力する
  2. taskの一覧が表示される
  3. 最新taskのtask idをコピーする

port fowarding

ecstaのport forwarding機能を実行します。

portが5432のpostgresqlをlocalの15432にマッピングしている例です。

ecsta portforward \
    --id="{task id}" \
    --cluster="{cluster name}" \
    --remote-port=5432 \
    --local-port=15432 \
    --remote-host="{rds host name}"

成功すると

Starting session with SessionId: aws-go-sdk-{何らかの文字列}

というメッセージが表示されます。

DBクライアントから接続

任意のDBクライアントから

host: localhost
port: 15432

を指定することで接続ができます。

NCDCエンジニアブログ

Discussion