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;
    };

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark