CDK 1.0 -> 2.0 Migration 후기

Simon Kim·2022년 12월 23일
0

서론

현재 사용중인 CDK v1 버전이 2023년 6월 EOS 된다고하여 부랴부랴 CDK v1을 v2로 Migration해야 하는 이슈가 발생하였다. AWS에서 제공하는 가이드로는 v1에서 v2로 변경 시 import 구조를 변경하고, deperated된 함수를 replace만 하면 쉽게 Migration한다고 하여, 가이드에 따라 진행해 보았다.
(나의 경우는 typescript 기반으로 구성되어 있어 typescript 기준으로 작성하였다. 그외 부분은 아래 URL을 참고하기 바란다.)
CDK v2 Migration 가이드 : https://docs.aws.amazon.com/ko_kr/cdk/v2/guide/migrating-v2.html


Mirgration 방법

  1. 너무나도 당연하지만 aws-cdk 버전을 v1에서 v2로 업그레이드가 필요하다.
$ npm install -g aws-cdk@2.xx
  1. cdk.json에 아래 내용들을 추가한다. v1에서 v2로 넘어가면서 내부 매커니즘이 변경된 부분이 있기에, CDK를 수행하는 CloudFormation에서 관련 feature flag 유무에 따라 v2로 원활하게 진행할 수 있도록 설정하는 것이라 보면된다.
    (만일 설정하지 않으면, cdk diff 또는 deploy시 여러 이슈가 발생될 수 있다. 세부 내용은 아래 Trobleshooting을 참고하기 바란다.)
  "context": {
    :
    "@aws-cdk/core:newStyleStackSynthesis": false,
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": false,
    "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": false,
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": false,
    "@aws-cdk/core:stackRelativeExports": false,
    "@aws-cdk/aws-lambda:recognizeVersionProps": false,
    "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true
    :
   }
  1. package.json에서 종속 package 버전을 변경한다. aws-cdk 관련해서 버전 업그레이드시 종속 package구조가 변경되었다. 그렇기에 v1에서 v2로 변경 시 아래 내용으로 변경이 필요하다.
"dependencies": {
    :
    "aws-cdk-lib": "^2.0.0",
    "@aws-cdk/aws-codestar-alpha": "2.0.0-alpha.1",
    "constructs": "^10.0.0"
    :
}
  1. 종속 package 다시 download. 기존 node_modules에 있는 종속 package전부 삭제 후 v2버전으로 정의되어 있는 종속 package로 다시 다운로드 한다.
$ npm uninstall 
$ npm install
  1. 각 class별로 정의되어 있는 aws-cdk import 변경. 아래와 같이 cdk import 부분을 변경한다.
AS-IS : v1
import { Construct, App, Stack } from "@aws-cdk/core";
:

TO-BE : v2
import { Construct } from 'constructs';
import { App, Stack } from 'aws-cdk-lib'; 
:
  1. cdk diff & deploy

TrobleShooting

  1. BootstrapVersion 이슈
    위의 내용 대로 진행 후 cdk diff를 실행하면 아래와 같은 문구가 parameter 영역에 나오게 될 것이다.
Parameter BootstrapVersion BootstrapVersion: {"Type":"AWS::SSM::Parameter::Value<String>","Default":"/cdk-bootstrap/hnb659fds/version","Description":"Version of the CDK Bootstrap resources in this environment, automatically retr
 ieved from SSM Parameter Store. [cdk:skip]"}

이는 cdk v2로 diff 또는 deploy 전에 cdk Bootstrap 작업을 진행하지 않으면, CloudFormation에 설정되어 있는 기존 v1의 BootstrapVersion으로 작업과 비교하기 때문에 그렇다. v2 설정 후 diff 또는 deploy 전에 cdk Bootstrap을 필히 작업해야 한다.

$cdk bootstrap
  1. deperated features
    v2로 넘어오면서, import 방식이 변경되었거나 및 변경/삭제된 function이 있다. 세부 내용은 아래 URL를 참고하여 변경이 필요한 코드를 수정하면 된다.
    (이외에도 경우에 따라 instance 명이 변경되었거나, function명을 변경해야 하는 경우가 있는데, case by case다 보니 에러 발생할 때마다 goolging해서 원인 파악 및 수정을 권고한다.)
    URL : https://github.com/aws/aws-cdk-rfcs/blob/master/text/0192-remove-constructs-compat.md#release-notes
profile
다양한 주제를 심플하고 명확하게 정리해 보려는 연차만 많은 IT 잡부입니다. 사람들과의 소통을 사랑합니다.~^^

0개의 댓글

관련 채용 정보