web-dev-qa-db-ja.com

AWS API Gatewayがカスタムドメインで機能しない

私はExpressjs APIを作成し、そのためのAPIゲートウェイを使用してAWS Lambdaでホストされています。次のURLで期待どおりに機能しています。

https:// [api-id] .execute-api。[region] .amazonaws.com/prod/api/v1/todos

しかし、カスタムドメインを使用して呼び出したいので、apiゲートウェイのカスタムドメインオプションを使用して確認しました。 Googleドメインを使用してドメインを登録し、DNS構成にCNAMEエントリを追加して、それをcloudfrontターゲットドメイン名にマップしました。ここまでは順調ですね。

enter image description here

APIゲートウェイのカスタムドメイン構成は、対応するマッピングとともに次のとおりです。

enter image description here

私の問題は、メッセージCannot GET /aprod/api/v1/todos、URLでの呼び出し時:

https://apis.mydomain.com/aprod/api/v1/todos

およびforbidden

https://apis.mydomain.com/api/v1/todos

私のcloudwatchログは次のとおりです。カスタムドメインで呼び出さない場合は正常に機能し(緑のブロック)、それ以外の場合は特定のメッセージはありません(赤のブロック)。

enter image description here

私はすでにこの問題に2つの週末を費やしてきました。どんな助けも大歓迎です。

3
Krishna Mohan

API GatewayでAPIのカスタムドメイン名を設定するために 公式ドキュメント を確認しましたか?推奨は、選択した展開オプション(リージョンまたはエッジ最適化)によって異なることに注意してください。

Edgeに最適化されたAPIのカスタムドメイン名を作成すると、API GatewayはCloudFrontディストリビューションをセットアップします。ただし、カスタムドメイン名がCloudFrontディストリビューションを介してAPI GatewayにルーティングされるようにバインドされたAPIリクエストの場合、カスタムドメイン名をCloudFrontディストリビューションドメイン名にマップするDNSレコードを設定する必要があります。カスタムドメイン名の証明書も提供する必要があります。

リージョンAPIのカスタムドメイン名を作成すると、API GatewayはAPIのリージョンドメイン名を作成します。カスタムドメイン名が地域のドメイン名にマップされるようにDNSレコードを設定して、マップされた地域のAPIエンドポイントを通じてAPIゲートウェイにルーティングされるようにカスタムドメイン名にバインドされたAPIリクエストを送信する必要があります。カスタムドメイン名の証明書も提供する必要があります。

この他のスタックオーバーフロースレッドも役立つ場合があります。 Regional/Edge-optimized API Gateway VS Regional/Edge-optimized custom domain name

0
Fabio Manzano

「取得できません」エラーコードはLambdaまたはAPIゲートウェイのエラーコードではなく、Express JSに固有のエラーコードです。

投稿したログはラムダログのように見えます。ラムダログの場合は、ラムダが別の何かによって呼び出されているか、「 https://apis.mydomain。 com/aprod/api/v1/todos "ユーザー"SándorBakos "が提案したとおり。

これは、カスタムドメインまたはAPIゲートウェイのエラーではなく、Lambda関数コードからこのエラーが発生していることを意味します。いくつかの簡単なグーグルでそれが証明され、これがSOポストで役に立ちますか? Node、Express-CANNOT GET route

もう少し詳しく言えば、存在しないAPI GatewayでURIを呼び出すと、SIGV4(IAM Auth)を正常に使用しない限り、エラーメッセージ「Missing Authentication Token」を含む403が表示され、その後もゲートウェイの応答を明確にマップしない限り、「GETできません」というエラーメッセージは返されません。

0