私はExpressjs APIを作成し、そのためのAPIゲートウェイを使用してAWS Lambdaでホストされています。次のURLで期待どおりに機能しています。
https:// [api-id] .execute-api。[region] .amazonaws.com/prod/api/v1/todos
しかし、カスタムドメインを使用して呼び出したいので、apiゲートウェイのカスタムドメインオプションを使用して確認しました。 Googleドメインを使用してドメインを登録し、DNS構成にCNAMEエントリを追加して、それをcloudfrontターゲットドメイン名にマップしました。ここまでは順調ですね。
APIゲートウェイのカスタムドメイン構成は、対応するマッピングとともに次のとおりです。
私の問題は、メッセージCannot GET /aprod/api/v1/todos
、URLでの呼び出し時:
およびforbidden
。
私のcloudwatchログは次のとおりです。カスタムドメインで呼び出さない場合は正常に機能し(緑のブロック)、それ以外の場合は特定のメッセージはありません(赤のブロック)。
私はすでにこの問題に2つの週末を費やしてきました。どんな助けも大歓迎です。
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
「取得できません」エラーコードは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できません」というエラーメッセージは返されません。