web-dev-qa-db-ja.com

Elastic BeanstalkアプリがRDS MySQLインスタンスに接続しない

CodeIgniter PHPアプリのセットアップがあります。セットアップしたRDS MySQLインスタンスに接続しようとしていますが、Elastic BeanstalkサイトのURLをロードすると、常にページがタイムアウトしますデータベースに接続できないように問題を絞り込みました。

Elastic Beanstalk EC2インスタンスがRDSと通信できるようにセキュリティグループを適切に設定したと思いますが、ページがまだ読み込まれないため、何か問題があるはずです。

RDSとElastic Beanstalkが使用するセキュリティグループのインバウンド/アウトバウンドルールのスクリーンショットと、Elastic Beanstalkインスタンスにアタッチしたセキュリティグループのスクリーンショットを含めました。

Inbound rules

Outbound rules

enter image description here

Elastic BeanstalkアプリがRDSインスタンスと通信できない理由に関するアイデアはありますか?


編集:RDSインスタンスとElastic Beanstalkインスタンスは同じセキュリティグループにあります。

16
Tim Jahn

Elastic Beanstalkをセットアップしたスタックセキュリティグループ名をRDSセキュリティグループのリストに追加します。

EC2インスタンス(つまりeb ssh)にログインしてテストし、データベースへの接続をテストしてアプリの問題を除外するのが最も簡単です。

mysql -u user -p password -h rds.instance.endpoint.region.rds.amazonaws.com
12
Gustaf

現在、ElasticBeanstalkをRDSデータベース(MySQLなど)に接続する方法について、2つをバインドしないように、つまり個別に作成できるように tutorial があります。このチュートリアルでは、AWSコンソールを介してセキュリティグループを設定します。

その後、5つのElasticBeanstalk環境変数を設定する必要があります(少なくともMySQLの場合):RDS_HOSTNAMERDS_PORTRDS_DB_NAMERDS_USERNAMERDS_PASSWORD

異なるElasticBeanstalkインスタンスは、データベース接続を作成するためにこれらの変数に異なる方法でアクセスします(PHPでは知っていますが、$_SERVER['RDS_DB_NAME']など)。上記のリンクにあるJava、Node.js、Python、Ruby、.NETでそれを行う方法を参照してください。

9

RDSインスタンスをVPCでも起動しましたか?

RDSセキュリティグループは、ポート3306の着信トラフィックをbeanstalkセキュリティグループに許可する必要があります。

例:RDSセキュリティグループ

Incoming
ALLOW TCP 3306 from BeanstalkSG

0.0.0.0に開かないでください

すでにすべてのトラフィックの発信を許可しているため、Beanstalk SGは発信トラフィックに3306を追加で付与する必要はありません。

VPC ACLは3306のトラフィックを許可しますか? (彼らは、デフォルトでそうする)

8
Michel Feldheim

新規ユーザーがRDS インスタンス名データベース名と間違えることはよくあります。

インスタンス名は、RDSアイテムを整理するためにあなたと他の人間が使用する単なるラベルです。このラベルはアプリでまったく使用されていません。

一方、データベース名は、アプリに必要なものです。

RDSインスタンス/クラスターを作成したら、サーバーが空であることを確認してください。 その中にデータベースはありません。

MySQLサーバー内に多くのデータベースを配置できるのと同じように、RDSインスタンスまたはクラスター内に多くのデータベースを配置できます。そしてデフォルトでは何もありません

アプリでRDSを使用する前に、MySQLコマンドラインで "CREATE DATABASE"コマンドを実行する必要があります。

公平を期すために、新しく作成したRDSインスタンスには1つのデータベースがあります。 「mysql」と呼ばれますが、アプリでの使用は許可されていません。

RDSインスタンスはパブリックにアクセスできないため、アプリで使用するデータベースを作成する唯一の方法はEC2インスタンスを使用することです。

簡単な手順

1。 nanoインスタンスを作成します(同じVPC /セキュリティグループ上)。

2。 SSH経由でnanoインスタンスに接続します(例:ssh -i <my_key.pem> my_nano.amazonaws.com);

mysql -u <master_user> -p -h <rds_endpoint>

4。 master_userとmaster_passwordは、RDSクラスターの作成中に設定したものです-これらの資格情報にはデフォルトはありません。

5。 mysqlで、データベースを作成します:CREATE database <my_db>;

6。次に、アプリでmaster_user、master_password、my_db、rds_endpointを使用します。

2
Daniel Loureiro