😔
ECS、RDS接続中に詰まったこと(Laravel Sail)
今回はAWSのECSとRDSを連携させていく過程で、
個人的に詰まったことや、それに対して行ったことを書いていこうと思います。
AWS完全初心者がやっています。
間違っていることがあれば、コメント等で教えていただけるとありがたいです!
前提
・ECS、RDSはそれぞれ作成済み
連携するための参考記事
本題
RDSは作成済みのため、自分が行った設定は3つ。
・タスク実行IAMロールにAmazonRDSFullAccessポリシーをアタッチ
・タスク定義にRDSの環境変数を追記
task-definition.json
"environment": [
{
"name": "DB_HOST",
"value": "<RDSエンドポイント>"
},
{
"name": "DB_PORT",
"value": "3306" // データベースサーバーのポート番号を指定します。通常、MySQLデータベースの場合、ポート番号は3306します
},
{
"name": "DB_DATABASE",
"value": "db" // データベースの名前を指定。今回はdbとしたためdbを指定
},
{
"name": "DB_USERNAME",
"value": "admin" // データベースに接続するためのユーザー名
},
{
"name": "DB_PASSWORD",
"value": "<自動生成されたパスワード>"
}
],
タスク定義のリビジョンをを更新したので、ECSで作成したサービスも更新してみましたがLaravel側からエラーが…
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: Name or service not known
調べてみたところ、どうやら.envファイルにもタスク定義に追記した内容を加える必要があるようです。
ローカル環境でもMySQLを使用していたので、DB_PORTは変更しませんでした。
.env
DB_HOST=<RDSエンドポイント>
DB_DATABASE=<データベースの名前>
DB_USERNAME=admin
DB_PASSWORD=<自動生成されたパスワード>
必要な設定は以上ですが、このままWebページにアクセスしてもステータスコード500が返ってきます。
起動時点では、マイグレーションが実行されていないためです。
つまり、データベースにアクセスできてもテーブルが存在しない状態です。
なので、直接コンテナに入ってマイグレーションを実行します。
コンテナに入る方法として、ECS Execを使用しました。
やり方は下記記事を参考にしてください。
Discussion