cdk deploy를 누르기 전 가장 중요한 명령어가 바로 cdk diff이다. 실수로 데이터베이스를 날리거나 의도치 않게 보안 구멍을 만드는 대참사를 막기 위해 이 명령어가 내뱉는 메시지를 읽는 법을 반드시 익혀야 한다.
현재 내 로컬 코드와 이미 AWS에 배포되어 있는 상태를 비교하여 차이점만 보여주는 명령어이다.
cdk synth를 내부적으로 실행하여 새로운 템플릿을 만든 뒤 현재 AWS 계정에 배포된 템플릿을 내려받아 하나하나 대조한다.| 기호 | 의미 | 위험도 | 설명 |
|---|---|---|---|
[+] | Add (추가) | 저 | 새로운 리소스가 생성됩니다. (예: 새 S3 버킷) |
[-] | Remove (삭제) | 고 | 기존 리소스가 삭제됩니다. (데이터 유실 주의!) |
[~] | Update (수정) | 중 | 기존 리소스의 속성이 바뀝니다. |
[!] | Replacement (교체) | 최고 | 속성 수정이 불가능해 기존 리소스를 삭제하고 새로 만듭니다. |
CDK는 보안에 민감하기 때문에 IAM 권한이 바뀌면 별도의 표로 아주 상세하게 보여준다.
Allow/Deny가 어떻게 바뀌는지 어떤 Action이 추가되는지 확인해야 한다.cdk deploy 실행 시 이 부분을 한 번 더 물어보게 되어있다.일부 속성은 운영 중 수정할 수 없다. 이 경우 AWS는 해당 리소스를 삭제하고 다시 생성한다.
만약 DB 인스턴스에
Replacement가 있다면 백업 없이는 데이터가 모두 날아간다는 의미이다.
Stack MyProjectStack
IAM Statement Changes
┌───┬──────────────────┬────────┬──────────────────┬──────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼──────────────────┼────────┼──────────────────┼──────────────────┼───────────┤
│ + │ ${MyLambda.Arn} │ Allow │ s3:GetObject │ Service:lambda │ │
└───┴──────────────────┴────────┴──────────────────┴──────────────────┴───────────┘
Resources
[+] AWS::S3::Bucket MyNewBucket MyNewBucket12345
[~] AWS::Lambda::Function MyLambda MyLambda67890
└─ [~] MemorySize
├─ 128
└─ 512
위 예시는 람다에게 S3 읽기 권한을 추가하고 새 버킷을 만들며 람다 메모리를 512MB로 올린다는 의미이다.
cdk diff --context env=prod: 특정 컨텍스트(운영 환경 등)를 기준으로 비교한다.cdk diff MyStackName: 여러 스택 중 특정 스택 하나만 비교한다.cdk diff는 내가 코드를 고친 의도와 실제 반영될 내용이 일치하는지 최종 확인하는 체크리스트이다.