[aws] CloudFormation Drift(드리프트) 개념 및 실습

2022. 6. 12. 23:42✅ STUDY/AWS

안녕하세요 :)

오늘은 AWS CloudFormation Drift(드리프트)에 대해 알아봅시다 🎈


Drift(드리프트)

CloudFormation 템플릿에 정의된 스택 리소스 값과 이 리소스의 실제 구성 값 간의 차이


AWS CDK 또는 CloudFormation 템플릿을 구성하여, 리소스를 프로비저닝 했다고 가정합시다.
IaC로 관리되고 있는 서비스의 설정값을 누군가 AWS 콘솔에서 직접 변경했을 때, 어떻게 해야 할까요?

아래 실습에서는 Drift 상태를 고의로 만들고, CloudFormation의 Drift 감지 기능을 사용해 감지하고
실제로 리소스와 CloudFormation 리소스 간의 sync가 맞지 않는 상황에서 스택 업데이트가 가능한지 알아보려고 합니다 .


Drift(드리프트) 실습

CdkWorkshopStack으로 만들어진 mjkim-queue의 설정값을 CloudFormation 템플릿이 아닌, 직접 콘솔에서 변경해볼게요.

아래 사진처럼, mjkim-queue의 visibilityTimeout은 현재 200으로 설정되어 있습니다.

 

직접 SQS 콘솔로 들어가, 200초를 300초로 변경하였습니다.

 

[Drift(드리프트) 감지 기능]

CloudFormation 콘솔에서 스택을 선택 한 후, Stack actions에서 Detect drift를 클릭합니다.


이후, Stack actions에서 View drift results를 클릭합니다.


Drift 감지한 결과를 확인할 수 있습니다.

현재 Drift status를 보면, "DRIFTED" 상태이며, queue에서 MODIFIED가 일어났다는 것을 알 수 있습니다.


queue를 선택한 후, View drift details를 클릭해 자세한 정보를 확인합니다.


queue의 visibilityTimeout 값이 기대되는 값은 200이지만, 현재 300으로 설정되어 있다는 것을 알 수 있습니다.

 


만약, Drift(드리프트) 상태의 스택을 업데이트하려고 하면 어떻게 될까요?

Drift 상태인 CdkWorkshopStack을 배포한 CDK 개발 코드에서 visibilityTimeout을 120초로 변경해보겠습니다.


CDK 코드를 변경한 후, cdk deploy를 통해 스택을 업데이트 하였습니다.
실제 CdkWorkshopStack이 업데이트 되었으며, 템플릿에도 120초로 변경된 것을 확인할 수 있습니다.


실제 SQS 콘솔에서 확인해보면, 300이라는 값이 120으로 변경된 것을 알 수 있습니다.


Drift 상태였던 CdkWorkshopStack도 IN SYNC 상태로 정상 상태로 돌아오게 됩니다.


결과 정리

IaC로 관리되고 있는 서비스의 설정값을 누군가 AWS 콘솔에서 직접 변경했을 때, CloudFormation Drift 감지 기능을 사용해 변경된 부분을 확인할 수 있습니다.

Drift 상태인 CloudFormation 스택을 AWS CDK 또는 CloudFormation 템플릿으로 업데이트해도 정상적으로 업데이트 된다는 것을 알 수 있습니다.


참고) https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html#what-is-drift

 

스택 및 리소스에 대한 비관리형 구성 변경 감지 - AWS CloudFormation

CloudFormation에서 스택 템플릿을 통해 또는 템플릿 파라미터 지정을 통해 명시적으로 설정된 속성 값에 대한 드리프트만을 감지합니다. 여기에는 리소스 속성에 대한 기본값이 포함되지 않습니다

docs.aws.amazon.com