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