Closed1

Laravel + Fargate + Auroraで一発目のmigrateをなんとかするやつ

shiva_itshiva_it

https://zenn.dev/shivashi/scraps/cedf3d71405cca
https://zenn.dev/shivashi/scraps/2fd1c744d0a860

上記作業の続きから。
表題通りの3構成をAWS上に作成しており、fargateのDNS(本当はALB)にアクセスするとLaravelのデフォルト画面が表示されるよって状態。
ちなみにFargateとAuroraの接続のために、通常.envに設定するDB_HOSTなどの環境変数をすべてParameterStoreに保管し、タスク定義済み。

ここから現状空のAuroraに対してphp artisan migrateを行い、laravelという名称のDBを作成するまでを行う。

migrateコマンドをfargate上で実行する手順

  1. ECS>クラスター>タスク画面に遷移
  2. 新しいタスクの実行をクリック
  3. VPCやサブネット、SGなどもろもろ選択した後、詳細オプションを開き、コンテナの上書き>Laravelコンテナを開く
  4. コマンドの上書きsh,-c,php artisan migrate --forceを入力
  5. 一番下のタスクの実行をクリック

これで一応はfargateコンテナ上でコマンドを実行してくれる(スマートなやり方なのかは不明)。
これまで何回かこの工程を繰り返しており、そのたびなんのエラーが吐かれているのかCloud Watchで確認している(Laravelコンテナにpdo_mysqlをインストールしてなかったりなどで…)。

現在遭遇しているエラー

production.ERROR: SQLSTATE[HY000] [1049] Unknown database 'laravel' (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE') 

laravelなんてデータベース存在しませんよ、と怒られている。実際Auroraの中身は初期状態のため、存在しなくて当然なのだけど、環境変数にDB_DATABASE=Laravelと設定しているのでエラーが出ている模様。
ちなみにこの時点でエラー内容からAuroraへの接続はできていることを確認。

そもそもDB名ってなんぞと思ったら、Auroraインスタンス時に設定する項目に"DB名"があるのでそれだった...。
ParameterStoreでDB_DATABASEの値をAuroraのDB名に変更し、再度migrate実行し、ログを確認。

うおおおお行けた。

とりあえず今後もmigrateは開発工程で頻繁に行う予定なのでタスク実行をCLIでできるようにしておく。

aws ecs run-task \
--cluster <クラスター名> \
--task-definition <タスク定義名> \
--overrides '{"containerOverrides": [{"name":"laravel","command": ["sh","-c","php artisan migrate --force"]}]}' \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=["<サブネットID>"],securityGroups=["セキュリティグループ名"],assignPublicIp=DISABLED}"
このスクラップは2021/05/14にクローズされました