Lambda를 활용한 Tag Automation
AWS SDK로 리소스 태그 관리를 자동화하는 방법과 Lambda 설정 과정을 설명합니다.
Overview
조직의 태그 정책을 활용하지 못하는 상황에서 모든 리소스에 태그 적용하기 위한 방안을 고민하였습니다.
AWS SDK 중 리소스 탐색기와 resourcegroupstaggingapi의 조합을 통해 태그를 Lambda로 스케줄하여 자동화시킬 수 있다는 것을 확인하였고 이를 테스트하고 배포하는 과정을 정리하였습니다.
Process
1. 리소스 탐색기 활성화
API 검색을 위해 Resource Explorer 활성화가 필요합니다.
- 추가 비용은 발생하지 않습니다.
- 집계자 인덱스 리전을 서울(ap-northeast-2)로 설정해야합니다.
- 서울(ap-northeast-2)로 설정하지 않는다면 Lambda 함수 내에서 리전을 변경해야하는 작업이 필요합니다.

리소스 탐색기를 활성화한다면 다음과 같이 데이터가 수집되며 이때부터 API를 통한 데이터 수집이 가능합니다. 활성화 후 데이터를 가져오는데 시간이 소요될 수 있습니다.
따라서 초기 Lambda 동작 시 모든 리소스에 태그가 등록되지 않을 수 있다는 점 참고해주세요.

2. Tag Editor 실행(Option)
Lambda로 실행하는 경우 태그 설정이 가능한 모든 리소스에 대해 태그 설정을 시도합니다. 하지만 리소스가 많은 경우 API Call 제한으로 인해 Lambda Timeout(15Min)이 발생할 수 있습니다.
따라서 Lambda를 설정하기 전에 Tag Editor로 기존의 모든 리소스를 등록하는 작업이 필요합니다.

하지만 Tag editor를 사용하지 않아도 약 3~4번 실행(약 6~8일)정도면 모든 리소스가 등록될 수 있습니다. 즉각적인 태그 등록이 필요하다면 우선 Tag editor를 통해 태그를 등록하고 그렇지 않다면 일주일간 태그가 정상 등록되고 있는지 모니터링을 수행해야합니다.
3. CloudFormation 배포
Tag Key와 Tag Value를 등록합니다.quicklink 상에서는 하나의 태그만 등록할 수 있지만 이후 EventBridge를 수정하여 여러 태그를 등록할 수 있도록 수정할 수 있습니다.

이후 스택을 생성하면 됩니다.
스택이 생성되면 다음과 같이 구성됩니다.

Lambda를 확인합니다. EventBridge와 통합되어 있으며 2일에 한 번씩 일정을 수행합니다.


대상의 상수를 확인하여 등록한 태그를 확인하고 수정할 수 있습니다.

태그를 추가하거나 값을 수정할 수 있습니다.

주의사항
ECS Fargate를 사용하는 경우
ECS Fargate의 경우 최소 작업 단위가 Task로 Task에 태그가 등록되어야만 비용 산정이 가능합니다. 하지만 Resource Explorer상에서는 task 단위로 조회되지않아 서비스 및 Task Job 배포시 태그 전파 작업이 필요합니다.


해당 작업은 새로운 서비스 및 태스크 Job, 서비스, 태스크 업데이트 등 배포할 때마다 확인되고 실행해야합니다. 따라서 사용하는 고객에게 안내가 필요합니다.
Reference
- https://docs.aws.amazon.com/ko_kr/resource-explorer/latest/userguide/using-search-query-syntax.html
- https://docs.aws.amazon.com/ko_kr/resource-explorer/latest/userguide/supported-resource-types.html
- https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html
- https://docs.aws.amazon.com/ko_kr/migrationhub/latest/launchguide/map.html#map-tagging-best-practices
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/resourcegroupstaggingapi.html
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/resource-explorer-2/client/search.html