Lambda#npm#AWS若槻龍太2021.07.13016この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、CX事業本部の若槻です。CDKのパッケージのバージョンはCDKプロジェクト内で揃えるようにしよう!、という話です。Functionリソースを含むCDKスタックを作成しました。Functionリソースのプロパティのうちtimeoutで型エラーが発生していました。エラーの内容を読んでも何が悪いんだかよく分かりません。stable原因調査、解決この時のpackage.jsonが下記のようになります。見ると他のCDKのNodeパッケージが1.111.0または^1.111.0であるのに対し、@aws-cdk/aws-lambdaのみ^1.112.0とバージョンがずれています。<パッケージ名>のようにしてインストールすると、その時点の最新版のパッケージがインストールされます。よって他のCDKのパッケージより後にインストールした@aws-cdk/aws-lambdaのみバージョンが上がっていたため、不具合が起きていたのでしょうか。@aws-cdk/aws-lambda実際にインストールされているバージョンを確認してみると、1.113.0と1.111.0が混在しています。@aws-cdk/aws-lambdaは@aws-cdk/assertや@aws-cdk/core、aws-cdkとバージョンがずれています。aws-cdk@1.111.0(略)そこで下記のようにバージョンを1.111.0に指定して@aws-cdk/aws-lambdaをインストール(ダウングレード)してみます。(後述しますが、これは厳密なバージョン指定方法ではありません。@aws-cdk/aws-lambda@1.111.0package.json上で@aws-cdk/aws-lambdaが^1.111.0となりました。}また@aws-cdk/aws-lambdaの実際のインストールバージョンも1.111.0となっていました。Functionリソースのtimeoutのエラーは出なくなりました。CDKのパッケージのバージョンはCDKプロジェクト内で揃えるようにした方が良いようです。versioningであり、キャレット^が付くと「最も大きな0でないバージョニングを変えない範囲」のバージョンとなります。@aws-cdk/aws-lambda@1.111.0のようにインストールすると既定で^付きとなります。^1.111.0と指定された時のバージョンは1.111.0または1.112.0または1.113.0を取りうるので厳密なバージョン指定はできません。よって今回のような不具合を極力回避するためには、CDKパッケージをインストールする際には^を付けずにバージョンを固定してパッケージを管理する必要があります。バージョンを固定してNodeパッケージをインストールしたい場合は、--save-exactオプションを使用します。Docs--save-exactを使用してCDKパッケージをインストールしてみます。--save-exactするとpackage.json上でも^が付かない1.111.0となりました。}CDKパッケージを追加でインストールする場合は、既にあるほかのパッケージのバージョンに合わせて--save-exactオプションを使用してインストールを行うようにすると良さそうですね。