凡ミスまとめ

ELBが1/2の確率でレスポンスを返さない

ELBが2AZで、ターゲットのECSがコストの都合で1AZにしか置いてない状態。

片側(ECSを置いてない方のAZ)のELBからECSに通信が届いてないのかと思いましたが、ELBを置いたパブリックサブネットに対してIGWへのルーティングを設定し忘れていただけでした。

Access-Control-Allow-Originしてるのにフロントからバックエンドに接続できない

フロントエンドのドメイン名をセットしていましたが、httpsなどのプロトコル名まで含めて指定する必要がありました。

×: w.Header().Set("Access-Control-Allow-Origin", "frontend.example.com")
○: w.Header().Set("Access-Control-Allow-Origin", "https://frontend.example.com")

Cloudfront経由でヘッダ(Authorizationなど)がバックエンドのオリジンに送られない

cloudfrontのオリジンリクエストポリシーでAllViewerを指定することで全てのヘッダをオリジンに送ることができる。

Set-Cookieしたのにcookieがセットされてない

バックエンドとフロントエンド(SPA)のドメインが異なる状況だったので、cookieのSameSiteをNoneにする必要がありました。

 return &http.Cookie{
                 ~~
        SameSite: http.SameSiteNoneMode,

ECS内のアプリケーションからIAMロールが読み込めない

アプリ内で使用する権限をタスク実行ロールに付与していたため。
タスク実行ロールとは別にタスクロールが存在し、アプリ内で必要な権限はタスクロールの方に付与する。

ECS上のバックエンドから外部にhttpsアクセスできない

ca-certificatesというパッケージを入れる必要がある。

vividcode.hatenablog.com

cloudfrontでreactページがルート以外アクセスできない

パスに対応したhtmlファイルが存在しないのでエラーになってしまう。
cloudfrontのエラーページタブから、発生するエラーコードに対して/index.htmlと200を設定し、どんなパスにもindex.htmlを返すようにする。

特定のページでだけuncaught syntaxerror: unexpected token '<'

具体的な挙動はわからないもののreactのpackage.jsonに以下を追記すればどうにかなる(ならなかったらごめん)

    "homepage": "/",