AWSJavaScriptNestjs

API Gateway + Lambda (NestJS)でカスタムドメインのAPI マッピングを使う時の注意点

AWSのAPI Gatewayには任意のパスを設定するAPIマッピング機能があります。 Example FROM: https://yourdomain.example.com/v3 TO: https://xxxx.e […]

広告ここから
広告ここまで

AWSのAPI Gatewayには任意のパスを設定するAPIマッピング機能があります。

Example

  • FROM: https://yourdomain.example.com/v3
  • TO: https://xxxx.execute-api.us-east-1.amazonaws.com/development

これを設定した場合、NestJSを使っているアプリケーションでは全てのパスがHTTP404になることがあります。

原因

Lambdaのeventの値を見るとわかるのですが、pathにマッピングで指定したパスが含まれています。

  httpMethod: 'GET',
  path: '/v3',
  stage: 'development',
  domainName: 'yourdomain.example.com',

そのため、使う側としては/sites APIを呼び出しているつもりが、NestJS側では/v3/latestというパスでリクエストを認識してしまっています。

対応

マッピングしたパスが不要なので、NestJSに渡す前にreplaceで除去してしまいましょう。

export const handler: APIGatewayProxyHandler = async (event, context) => {
  if (Object.prototype.hasOwnProperty.call(event, 'path')) {
    event.path = event.path.replace(/^\/v3\//, '/')
  }
  const app = new ServerlessNestjsApplicationFactory<AppModule>(AppModule);
  const result = await app.run(event, context);
  return result;
};

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts