😃

[CDK API Gateway] タイムアウトの上限を伸ばせるようになった

2024/07/08に公開

CDKで REST API の構築をしている際にバージョンの都合でタイムアウトを伸ばせなかったため、備忘録として残しておきます。

では、初めて行きます。

困ったこと

CDK(2.143.0)を使用して、元は HTTP API で構築を行なっていた箇所を、レスポンスのタイムアウトを伸ばす必要があったため、以下のように REST API に切り替えました。

※ サービスクォータすの上限緩和申請にて29秒のデフォルト値から、120秒にタイムアウト時間を伸ばしました。(Maximum integration timeout in milliseconds)
https://aws.amazon.com/jp/blogs/mt/introducing-service-quotas-view-and-manage-your-quotas-for-aws-services-from-one-central-location/

generateSampleData.ts
// API Gateway(RestAPI)を作成
const api = new RestApi(apiStack, "ApiGateway", {
  restApiName: "ApiGateway",
  endpointTypes: [EndpointType.REGIONAL],
  deployOptions: {
    stageName: "dev",
  },
  defaultCorsPreflightOptions: {
    allowOrigins: Cors.ALL_ORIGINS,
    allowMethods: Cors.ALL_METHODS,
    allowHeaders: Cors.DEFAULT_HEADERS,
    maxAge: cdk.Duration.days(30),
  },
});

// API Gatewayの認証
const authorizer = new CognitoUserPoolsAuthorizer(apiStack, "Authorizer", {
  authorizerName: "RestApiAuthorizer",
  cognitoUserPools: [backend.auth.resources.userPool],
});

// LambdaとAPI Gatewayの統合
const lambdaIntegration = new LambdaIntegration(apiLambda, {
  timeout: cdk.Duration.seconds(120), // 👈 こちらでタイムアウトを設定
});
const proxyResource = api.root.addResource("{proxy+}");
proxyResource.addMethod("GET", lambdaIntegration, { authorizer });
proxyResource.addMethod("POST", lambdaIntegration, { authorizer });
proxyResource.addMethod("PUT", lambdaIntegration, { authorizer });
proxyResource.addMethod("PATCH", lambdaIntegration, { authorizer });
proxyResource.addMethod("DELETE", lambdaIntegration, { authorizer });

上記設定自体に誤りはありませんでしたが、CDKの使用でタイムアウトをデフォルトの29秒までしか設定できず、以下のようなエラーとなりました。

WARN AWS_SOLUTIONS_CONSTRUCTS_WARNING:  Possible override of timeout value.
Failed to synthesize: Error: Integration timeout must be between 50 milliseconds and 29 seconds.

そのため、仕方なくコンソール上からポチポチしていました。

せっかくCDKで書いたのに一部はコンソールから設定だなんて。。と思っていました。

解決策はないものか。。

解決策

先月あたりで以下のissueが上がっていることを社内の方から共有していただきました。
https://github.com/aws/aws-cdk/issues/30539
https://github.com/aws/aws-cdk/releases/tag/v2.147.0

これによると、CDKのバージョンを2.147.0以上に上げれば良いとのこと。

早速バージョンを上げて、デプロイしてみる。

$ npm update aws-cdk@2.148.0 aws-cdk-lib@2.148.0

無事、CDKからタイムアウト時間を反映できるようになりました。

まとめ

つい先月に出されたissueだったため、気づきにくかったですが、普段からライブラリ仕様による困りごとが起こった際には、以下を実施することを今後は心がけ、常に最新情報をキャッチアップできるようになりたいと思いました。

  • ライブラリのバージョンを確認
  • issueをのぞく
  • 公式を確認する

今回の記事が誰かのお役に立てれば幸いです。

NCDCエンジニアブログ

Discussion