AWS CloudFormation에 새롭게 추가된 IaC generator 기능에 대하여

AWS CloudFormation의 신기능인 IaC Generator에 대해 간략하게 소개한 글입니다.
2024.02.20

안녕하세요 클래스메소드의 수재입니다.
이번에기존 리소스를 CFn 템플릿으로 읽어오는 AWS CloudFormation(이하 CFn)에 IaC Generator라는 기능이 추가되었습니다.
해당 기능에 대하여 알아보고 실제로 사용해보는 내용을 공유하고자 합니다.

CFn IaC Generator 란?

AWS CloudFormation은 CloudFormation 외부에서 관리되는 기존 AWS 리소스를 위한 AWS CloudFormation 템플릿과 AWS CDK 앱을 손쉽게 생성할 수 있는 새로운 기능을 출시합니다. 생성된 템플릿과 앱을 사용하면 CloudFormation 및 CDK로 리소스를 가져오거나 새로운 AWS 리전이나 계정에서 리소스를 복제할 수 있습니다. - 공식 블로그

24년 2월 5일에 아나운스 된 기능으로 기존 AWS 리소스를 CFn 템플릿이나 CDK 앱으로 생성해주는 기능입니다.
기존 리소스가 코드화 되어 있지 않은 상황에서 리소스가 점점 늘어나게 된다면 어느 시점부터 관리가 버거워지기 시작합니다.
이런 상황을 피하기 위해 기존 환경의 코드화 혹은 처음부터 코드로 환경을 구축하는 것을 권장하고 있습니다.

저는 기존 리소스를 코드화 해주는 서비스로 former2 라는 기능을 이용했었습니다.
제가 이전에 작성했던 글에서도 former2를 이용하여 기존 리소스를 terraform 코드로 변환한 적이 있었습니다.

하지만 former2는 외부 프로그램이기 때문에 리소스 구성을 외부에 공개한다는 점에서 조금 꺼려질 수 있습니다.
이를 대비하기 위해 former2를 이용할 때는 읽기 권한만 허용하여 리소스의 조작은 할 수 없게 하여 보안을 강화할 수 있습니다.
그리고 former2 측에서도 내용은 따로 저장하지 않는다고 안내하고 있습니다.
그럼에도 외부로 리소스 구성을 유출하고 싶지 않은 경우가 있기 때문에 이번 IaC Generator 기능 추가는 니즈를 만족할 수 있는 기능이라 생각됩니다.

24년 2월 20일 기준으로 기능 사용을 위한 비용은 따로 명시되어 있지 않은 것으로 보아 무료라고 생각됩니다.

사용 방법

기능 사용을 위한 전체적인 흐름은 다음과 같습니다.

  • 계정 스캔
  • 처음부터 템플릿을 생성하거나 기존 스택의 템플릿을 시작점으로 사용하여 템플릿을 생성
  • 리소스 추가 마법사를 사용하여 스캔한 리소스 및 관련 리소스를 템플릿에 추가
  • CFn에서 관리할 리소스를 스택으로 가져오거나 AWS CDK 앱으로 마이그레이션

계정의 스캔 전에 코드화 할 대상인 리소스에 특정 가능한 태그가 지정되어 있는지 확인하는 것을 추천합니다.
이유는 아래의 사용 방법에서 설명드리겠습니다.

처음부터 사용해본다는 전제하에 기능을 사용한 이미지를 참고하며 자세히 알아보도록 하겠습니다.

계정 스캔

CFn 대시보드에 접속하면 IaC Generator 기능이 패널 왼쪽에 있습니다.
한번도 기능을 시작하지 않았다면 다음 이미지와 같은 화면이 되어 있습니다.
새 스캔 시작(Start new scan)을 클릭하여 내 계정의 모든 리소스를 스캔합니다.
제가 처음 실행했을 때는 640개 리소스에 6분 정도가 소요되었습니다.1

템플릿 생성

처음 기능을 사용하면 해당 화면에 아무런 템플릿이 없습니다.
템플릿 생성(Create template)를 클릭하여 템플릿을 생성합니다.
템플릿의 이름 및 스택이 삭제/업데이트 된 경우 기존 리소스를 어떻게 할 것인지 정책을 선택합니다.

리소스 추가 마법사를 사용하여 스캔한 리소스 및 관련 리소스를 템플릿에 추가

선택 후 다음으로 넘어가면 대상 리소스를 선택할 수 있습니다.
만약 대상이 되는 리소스를 태그 등으로 한번에 선택할 수 없다면 하나하나 선택해야하기 때문에 조금 힘듭니다... 이번에는 "iacgen"이라는 태그 키를 가진 리소스를 모두 선택하였습니다.
스택으로 관리되어 있는지도 함께 확인할 수 있습니다.

선택 후 다음으로 넘어가면 해당 리소스를 불러옵니다.
불러온 리소스를 확인해보면 단순히 스캔에서 선택한 리소스 뿐만 아니라 이와 관련된 필요한 리소스들까지 함께 선택 된 것을 확인할 수 있습니다.

CFn에서 관리할 리소스를 스택으로 가져오거나 AWS CDK 앱으로 마이그레이션

불러온 리소스를 확인하고 문제가 없다면 다음으로 넘어가서 전체적으로 문제가 없는지 확인합니다. 문제가 없다면 템플릿 작성을 클릭합니다.
50개 리소스를 대상으로 템플릿을 작성하는데 1분 미만이 소요되었습니다.

작성된 템플릿은 YAML이나 JSON 등 확장자를 선택하여 다운로드하거나 그대로 CFn 스택으로 임포트 할 수 있습니다. 작성한 템플릿은 이후에 IaC Generator 메뉴에서 다시 확인 및 다운로드가 가능합니다.

임포트 된 후로는 대상 리소스에 CFn 스택의 태그가 추가되며 다른 CFn의 스택과 같이 해당 리소스들을 CFn에서 관리할 수 있습니다.

former2와는 무엇이 다를까?

차이점을 간단히 알아보자면 다음과 같다고 생각됩니다.

  • AWS 외부 서비스가 아니다
  • 출력은 CFn 및 CDK 코드로만 가능하다

해당 기능은 AWS 자체의 기능이므로 소유하고 있는 AWS 리소스 정보를 외부로 노출하지 않아도 됩니다.
그리고 AWS가 관리하는 기능이기 때문에 AWS 에 어떠한 릴리즈가 있다면 former2보다 빠르게 대응할 수 있다고 생각됩니다.

AWS 서비스만을 대상으로하기 출력 결과물은 CFn 및 CDK 만 대응합니다.
따라서 former2로 AWS 뿐만 아니라 다양한 서비스를 대상으로 관리하고 싶거나 CFn 보다 다른 IaC 툴에 익숙한 엔지니어라면 former2를 그대로 사용하는 것도 고려해 볼 수 있다고 생각됩니다.

결과물을 바로 CFn 스택으로 작성할 수 있다는 점이 매우 편리했습니다.
former2로 리소스를 코드화하는 경우 리소스 간의 관계나 우선 순위, 규칙 등이 제대로 설정되어 있지 않은 경우가 많아서 받은 코드 그대로 리소스를 작성하면 에러가 발생하는 경우가 있습니다.
IaC Generator는 기존 리소스들을 문제없이 CFn 스택으로 관리할 수 있기 때문에 많이 편리했습니다.

따라서 기존 리소스들을 빠르게 CFn 스택으로 관리하고 싶다 + CFn 템플릿 작성에 익숙하다 라면 해당 기능을 이용하고
AWS 이외에도 다른 서비스들을 복합적으로 이용한다 + CFn 이외의 IaC 툴로 관리 할 예정이다 라면 former2나 다른 툴을 이용하여 코드화 하는 것이 좋다고 생각됩니다.

마무리

가려운 곳을 긁어주는 듯한 업데이트라서 개인적으로는 마음에 드네요.
하지만 리소스를 선택하는 방법은 좀 더 UI를 개선해주었으면 하는 생각도 들었습니다 ㅎㅎ...

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 must01940 지메일로 보내주시면 감사합니다.

참고자료


  1. 처음 스캔 후에 다음 템플릿을 작성할 때는 소요되는 시간이 줄었습니다.