• 作成:
  • 更新:

AWS CDKでcurrentVersionOptionsを設定してもcurrentVersionのgetプロパティを実行しないと生成されない

問題

AWS Lambdaでコールドスタート対策にProvisioned Concurrencyを設定しておきたいが、【AWS CDK】Lambda の Provisioned Concurrency を設定する | DevelopersIO を参考にして、 Functionの、 currentVersionOptionsの、 provisionedConcurrentExecutionsで設定しても、 addAliasで設定しても効果が発揮されません。

ちなみにcurrentVersion.addAliasは非推奨メソッドになっていて、直接FunctionaddAliasをすることが推奨されていますが、こちらでも効果が発揮されません。

理由

(lambda): Not able to provision concurrency for the current version of a lambda · Issue #13731 · aws/aws-cdk を見れば分かりますが、 currentVersionのgetプロパティが呼び出されないとVersionが生成されません。 Versionが生成されないとAliasも意味をなしません。

getにそんな重要な副作用を忍ばせないで欲しい。

流石に副作用目的でgetプロパティを実行するのは嫌なので、 new lambda.Aliasを明示的に実行して、 version: this.lambdaFunction.currentVersionと指定することにしました。

推察

なんでこんな酷い仕組みになってるのかと思いましたが、よく考えてみるとProvisioned Concurrencyを活用するには、最初に作ったFunctionではなく、 AliasVersionIFunctionとしてAPI Gatewayに接続する必要があります。よって必然的にcurrentVersionを呼び出す必要があり、問題にならないのかもしれません。