Open5

読者コミュニティ|ECS(Fargate)でnextjs+laravel+rds環境構築

youchanyouchan

はじめまして、有益な記事をありがとうございますmm

resource "aws_lb_listener" "https" {
  load_balancer_arn = aws_lb.this.arn
  port              = 443
  protocol          = "HTTPS"
  certificate_arn   = data.aws_acm_certificate.host_domain_wc_acm.arn
  default_action {
    type = "fixed-response"
    fixed_response {
      content_type = "text/plain"
      message_body = "503 Service Temporarily Unavailable"
      status_code  = "503"
    }
  }
}

この辺りの記述なのですが受け取ったリクエストを全て503で返すということで間違い無いでしょうか?

https://zenn.dev/nicopin/books/58c922f51ea349/viewer/07f0c0#ブラウザで確認
今この辺りなのですが、ブラウザで確認を取ろうとしても503が返ってきてしまっていて詰まっている状態です!

nicopinnicopin

ロードバランサーを作るときに、デフォルトのアクションを便宜的に503にしているので、ALB作っただけのタイミングだと503しか帰って来ません。

ecs関連のリソースを作る部分で下記のようなルールを追加していく形ですので、コンテナまでの疎通確認したい場合にはそこまで進めて確認してみてください。

resource "aws_lb_listener_rule" "frontend" {
  listener_arn = aws_lb_listener.https.arn
  priority     = 1
  action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.frontend.arn
  }
  condition {
    host_header {
      values = [local.app_domain_name]
    }
  }
}
youchanyouchan

早い返信ありがとうございます!!

色々調べたところECSタスクが正常に起動しておらず、自身ががM1 MacでDocker imageをbuildしていたことが原因でした!
下記にその対処法が書かれていたので、この通り行ったところ正常に動作しました!

https://dev.classmethod.jp/articles/m1-docker-build-error/

お手数おかけいたしましたmm

youchanyouchan

こちら完走することができました、ありがとうございます!

教材とは異なる実装、また記載されていない工程が必要だったところを書いておきます。もしかしたら僕が教材を読み込めていない可能性もありますがご了承くださいませ。

Codebuild用のカスタムイメージについて

https://pkgs.alpinelinux.org/packages?name=php81&branch=v3.15&repo=testing
こちらのURLの通り、対象となるOSのバージョンおよびリポジトリではphp81系のパッケージが見つかりませんでした。なのでDockerfileを下記のように修正することで対応しました。

- FROM docker:20.10.14-dind
+ FROM docker:20.10.17-dind-alpine3.16
...
-     && apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ --allow-untrusted gnu-libiconv \
+     && apk add --no-cache --allow-untrusted gnu-libiconv \
...

またカスタムイメージをECRにプッシュする際にはlatestのタグを付与する必要がありました。これはCodebuild上からpullする際に指定されているデフォルトのタグがlatestのためです。

ECRのパーミッションに関して

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-ecr.html

以下のいずれかに該当する場合は、AWS CodeBuild が Docker イメージをビルド環境にプルできるように、Amazon ECR のイメージリポジトリにアクセス許可を割り当てる必要があります。

ECRのコンソール側からアクセス許可を割り当てる必要がありました。リポジトリもTerraformで作成していればTerraformから設定ができるのですが、今回はそういう運用ではないので直接コンソールから設定しました。