AWS CDKでcurrentVersionOptionsを設定してもcurrentVersionのgetプロパティを実行しないと生成されない
問題
AWS Lambdaでコールドスタート対策にProvisioned Concurrencyを設定しておきたいが、【AWS CDK】Lambda の Provisioned Concurrency を設定する | DevelopersIO
を参考にして、
Functionの、
currentVersionOptions
の、
provisionedConcurrentExecutions
で設定しても、
addAlias
で設定しても効果が発揮されません。
ちなみにcurrentVersion.addAlias
は非推奨メソッドになっていて、直接Function
にaddAlias
をすることが推奨されていますが、こちらでも効果が発揮されません。
理由
(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
ではなく、
Alias
やVersion
をIFunction
としてAPI Gatewayに接続する必要があります。よって必然的にcurrentVersion
を呼び出す必要があり、問題にならないのかもしれません。