[小ネタ]CDKデプロイで”error TS2345: Argument of type ‘~~’ is not assignable to parameter of type ‘~~’.”というエラーを解決した話
皆さん、こんにちは!
クルトンです。
今回はTypescriptでCDKを触っていて遭遇した、エラーを解決するお話です。
どういうエラー?
こちらがエラーの内容になります。
error TS2345: Argument of type 'import("ファイルパス").App' is not assignable to parameter of type 'import("ファイルパス").App'. Type 'App' is missing the following properties from type 'App': onValidate, onPrepare, onSynthesize, validate, and 2 more.
そしてエラーの該当箇所がこちらのコードになります。
import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; import * as iam from "@aws-cdk/aws-iam"; export class MyStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props);
6行目のcdk.App
でエラーが出ていました。皆さんは、上記コードでどこを直せば良いか分かりますか?
解決方法
早速解決方法についてです。
次のコードをご覧ください。
import * as cdk from "aws-cdk-lib"; import * as lambda from "aws-cdk-lib/aws-lambda"; import * as iam from "aws-cdk-lib/aws-iam"; export class CdkManipulateS3Stack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props);
エラーを解決するには、@aws-cdk
ではなくaws-cdk-lib
を使う必要がありました。
なぜエラーが発生したのか
バージョンの違いによりエラーが出ていました。
- @aws-cdk
- CDKのバージョン1系の書き方
- aws-cdk-lib
- CDKのバージョン2系の書き方
package.json
を確認してみると、バージョンが"2.79.1"でした。しかし、コード上での書き方はバージョン1系の書き方で、そこでエラーが発生していたようです。
当たり前な話ではありますが、バージョンの違いによって動作が異なる場合があるので、使っているものをしっかり確認しておく事は大事ですね……。
ちなみに
CDKのバージョン1のサポートは2023年6月1日に終了するとのアナウンスが書かれていました。バージョン2の書き方をしていくように、心がけていく方が良さそうです。
終わりに
今回はCDKのお話でした。
チュートリアルやブログなどで書き方を見ていると、バージョン1系のものを目にしました。 もしかすると同じエラーに遭遇する人がいるかもしれないと考え、今回のブログを書きました。 少しでもお役に立てたならば幸いです。
今回はここまで。
それでは、また!