AWS 노트

aws-cdk가 Argument of type 'this' is not assignable to parameter of type 'Construct'. 에러를 뿜을 때

Jonchann 2020. 4. 10. 17:16

Lambda함수를 Redshift에 접근할 수 있게 하기 위해서는 Redshift 클라스터가 있는 VPC 정보를 CDK stack에 명시해 주어야 한다.
그래서 아래 코드를 쓰기 위해

const vpcExample = ec2.Vpc.fromVpcAttributes(this, "vpcExample", {
      vpcId: "[vpc_id]",
      availabilityZones: ["[region]"],
      privateSubnetIds: [
          "[subnet_name]",
          "[subnet_name]"
      ]
    });

@aws-cdk/aws-ec2를 새로 설치했더니 그 다음부터 Argument of type 'this' is not assignable to parameter of type 'Construct'라면서 에러를 뿜어냈다..

해결방법1: @aws-cdk의 모든 라이브러리의 version을 통일시킨다

현재 작업하고 있는 폴더 직하에 있는 package.json을 열어보면 아래와 같이 버전을 확인할 수 있다.

"dependencies": {
    "@aws-cdk/aws-ec2": "^1.32.1",
    "@aws-cdk/aws-events": "^1.32.1",
    "@aws-cdk/aws-events-targets": "^1.32.1",
    "@aws-cdk/aws-lambda": "^1.32.1",
    "@aws-cdk/core": "1.32.0",
    "source-map-support": "^0.5.16"
  }

@aws-cdk/로 시작하는 라이브러리는 버전을 똑같이 맞춰 주어야 한다.
위의 상태에서는 @aws-cdk/core만 버전이 낮은 것을 알 수 있다.

업데이트 해주자.

$ npm update @aws-cdk/core

하지만 업데이트가 되지 않는다.

찾아보니 npm 라이브러리 전체를 최신 버전으로 일괄 업데이트 가능한 라이브러리가 있었다.

$ npm install -g npm-check-updates
$ ncu -u

package.json을 확인해보니 이제야 모두 최신 버전이 되었다.

"dependencies": {
    "@aws-cdk/aws-ec2": "^1.32.1",
    "@aws-cdk/aws-events": "^1.32.1",
    "@aws-cdk/aws-events-targets": "^1.32.1",
    "@aws-cdk/aws-lambda": "^1.32.1",
    "@aws-cdk/core": "1.32.1",
    "source-map-support": "^0.5.16"
  }

해결방법2: node_module을 삭제하고 새로 npm install 하자

그래도 여전히 this에 빨간 줄이 딱 그어져 있다면

$ rm -rf node_modules
$ npm install

내가 참고한 AWS CDK の Argument of type 'this' is not assignable to parameter of type 'Construct'. エラーの対応方法에는 npm run install하라고 되어 있지만 이 command 자체가 에러를 내면서 안 먹혔기 때문에 npm install로 바꿔서 실행했다.

이제야 해결되었다.