備忘録:AWS Lambda+API Gatewayでカスタムドメイン設定する際にエッジ最適化してどハマり

はじめに

本記事は私が経験した状況と似た状況にあって困っている誰かが参考にするために書かれている。表題が示す事柄について詳細な解説をするものではないことをあらかじめご了承いただきたい。また経験したことを即書き出すことに専念しているため構成等があまり練られておらず読みにくさを感じるところがあると思う。この点についてもご容赦いただけると嬉しい。本記事が誰かのお困りごとの解決に役立てば幸いである。

 

背景

Lambda+API Gatewayの構成で作成されたREST APIにカスタムドメインを設定することを試みた。

 

作成したAPI

https://API_ID.execute-api.REGION.amazonas.com/hoge/{parameter}

のようにパスパラメータをわたす形のエンドポイントを持つ。リクエストでわたすパラメータは他にはない。

 

API Gatewayコンソールでテストを実行したところHTTPステータス200番を返した。レスポンスの内容もパラメータに応じて期待通りの結果を返した。

 

上記の状態でAPI Gatewayコンソールでカスタムドメインを作成した。エンドポイントタイプはエッジ最適化を選んだ。

 

事象

カスタムドメイン作成した際に発行されるAPI Gatewayドメイン

xxx.cloudfront.net

を使用してcurlAPIを呼び出すとHTTPステータス403番(Forbidden)が返ってきてしまった。レスポンスは

{Message: Missing Authentication Token}

であった。

 

解決方法

ヘッダーに

X-Cache: Error from CloudFront

と表示されていたのでCloudFront側に問題があるだろうとあたりをつけた。

しかしエッジ最適化にした場合は自身のAWSアカウントにCloudFrontディストリビューションが作成されるのではなくAWSが管理するCloudFrontの方に作成されるためアンコントローラブルである。

 

詳細は省くがエッジ最適化による自動設定をやめて自力でCloudFrontでカスタムドメイン設定したところ、CloudFrontのエンドポイントでエラーが返ることがなくなった。エンドポイントタイプはエッジ最適化からリージョナルに変更した。

 

なぜうまくいかなかったのかは不明だが、APIによってはエッジ最適化で自動発行されたAPI Gatewayエンドポイントではエラーになってしまうことがあるという事実だけはわかった。