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を呼び出す必要があり、問題にならないのかもしれません。
hatena-bookmark