皆さん、こんにちは!
クルトンです。
今回は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系のものを目にしました。 もしかすると同じエラーに遭遇する人がいるかもしれないと考え、今回のブログを書きました。 少しでもお役に立てたならば幸いです。
今回はここまで。
それでは、また!