LoginSignup
14
10

More than 5 years have passed since last update.

Elastic Beanstalkで外部のRDSといい感じに接続する

Posted at

背景

  • Beanstalkで作成したEC2インスタンスとRDSのDBインスタンスを接続したい
  • RDSまで全部Beanstalkで作ると環境を終了(削除と同じです)したときに一緒に全部消えてしまう
  • RDSは消したくない
  • Beanstalkの裏で動いているのはCloudFormationなので頑張れば何でもできる
  • できるだけ簡易的な方法で実現したい

下準備

  • Beanstalkで作成したものは環境終了時に一緒に消えてしまうので、消えてほしくないものをこちらで先に作っておきます。

RDS

  • DBインスタンスをいい感じに作って起動しておきます。
  • ここではMySQLとしておきます。

SecurityGroup

  • あらかじめEC2とRDSをつなぐためのセキュリティグループを作成しておきます。
  • 名前はたとえば web-db-connect としておきます。
  • このセキュリティグループにはインバウンドもアウトバウンドも何も定義しなくて大丈夫です。
  • これを先ほど作成したDBインスタンスのセキュリティグループのインバウンドに、3306ポートで通信を許可するソースとして追加しておきます。
    • ※ ソースに指定する場合はセキュリティグループの名前ではなくIDを指定する必要があります。

設定ファイル

  • Elastic Beanstalkは .ebextentionsディレクトリを作成し、そこにconfigファイルを置くことで、詳細な設定ができるようになります。
  • ここでDBインスタンスへの接続の設定ファイルなども作成しますが、使用する言語によっていろいろあるのでここでは省略します。
  • 拡張子が .config であればファイル名自体は何でもよく、一つにまとめる必要もないので、いい感じにファイルを分けると保守がしやすいです。
  • セキュリティグループについての設定ファイルを作成します。例えば securitygroup.config とでもしておいて、そこに以下の内容を記述します。
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: web-db-connect
  • ここで指定した web-db-connect はもちろん先ほど作成したセキュリティグループの名前です。

環境の作成

  • あとはEB CLIにしたがって環境を作成します。
  • 自動作成されるセキュリティグループとこちらで作成したセキュリティグループの両方がEC2インスタンスにアタッチされ、いい感じにRDSに接続できるようになっています。
  • 裏で動いているのがCloudFormationであることからもわかるように、環境作成後に後から手で設定をいじると環境を終了するときに失敗してしまうのですが、あらかじめ外で作った置いたものを参照して環境を作成した場合だと問題なく終了できますし、外で作ったものが削除されてしまうこともありません。
14
10
0

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
14
10