AWS EC2 인스턴스를 생성할 때마다, 자동으로 인스턴스의 Private IP를 태그로 추가하고 싶었던 적 있으신가요?
이 글에서는 EC2 인스턴스가 생성될 때 자동으로 다음과 같은 태그를 추가하는 자동화 방법을 소개합니다:
- Owner: 인스턴스를 생성한 사용자 정보
- Create_time: 인스턴스 생성 일자 (KST 기준)
- Private_IP: 인스턴스의 Private IP 주소
✅ 왜 자동 태그가 필요할까?
운영 환경에서 EC2 인스턴스가 자주 생성되다 보면, 누가 만들었는지, 언제 만들었는지, 어떤 IP를 갖고 있는지를 추적하는 게 어려워집니다. 이를 해결하기 위해, EC2 생성 시 자동 태그 추가는 매우 유용한 방식입니다.
⚙️ 사전 준비
- AWS 계정
- Lambda 실행 역할 (IAM Role)
- CloudTrail 활성화 (EventBridge 트리거용)
- EC2 인스턴스를 생성하는 환경
🛠️ 구성 개요
- AWS EventBridge: EC2 인스턴스가 생성되었는지 감지
- AWS Lambda: 이벤트를 감지하면 태그 추가
- AWS IAM Role: Lambda가 EC2에 접근할 수 있는 권한 부여
🚀 구현 아키텍처
- EventBridge: EC2 인스턴스 생성(RunInstances) 이벤트 감지
- Lambda: EC2 인스턴스 정보를 조회해 태그 추가
이 구조는 EC2 인스턴스 생성 시 자동으로 Lambda가 실행되어 Private_IP, Owner, Create_time 태그를 인스턴스에 추가합니다.
📦 구현 절차
1. Lambda 함수 코드
다음 코드를 사용해 Lambda를 생성합니다. 이 함수는 EC2 인스턴스 ID와 Private IP를 가져와 태그를 자동으로 붙입니다.
import boto3
from datetime import datetime, timedelta
current_time_KST = datetime.now() + timedelta(hours=9)
time = current_time_KST.strftime('%Y-%m-%d')
def lambda_handler(event, context):
resource = event["detail"]["responseElements"]["instancesSet"]["items"][0]["instanceId"]
user_type = event["detail"]["userIdentity"]["type"]
if user_type == 'IAMUser':
user = event["detail"]["userIdentity"]["userName"]
elif user_type == 'AssumedRole':
user = 'UserName: ' + event["detail"]["userIdentity"]['principalId'].split(':')[1] + ', Role: ' + event["detail"]["userIdentity"]['sessionContext']['sessionIssuer']['userName']
elif user_type == 'Root':
user = 'root'
else:
user = ''
try:
ec2 = boto3.client('ec2', region_name='ap-northeast-2')
# Private IP 조회
response = ec2.describe_instances(InstanceIds=[resource])
instance = response['Reservations'][0]['Instances'][0]
private_ip = instance.get('PrivateIpAddress', 'unknown')
# 태그 추가
ec2.create_tags(
Resources=[resource],
Tags=[
{'Key': 'Owner', 'Value': user},
{'Key': 'Create_time', 'Value': time},
{'Key': 'Private_IP', 'Value': private_ip}
]
)
print(f"Tagged {resource} with Owner={user}, Private_IP={private_ip}")
except Exception as e:
print(f"Error tagging instance {resource}: {e}")
2. Lambda 실행 권한 (IAM Role 설정)
Lambda에 아래와 같은 IAM 정책을 부여해야 EC2 정보 조회 및 태그 추가가 가능합니다.
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:CreateTags"
],
"Resource": "*"
}
3. EventBridge 규칙 생성
다음과 같은 이벤트 패턴으로 EventBridge 규칙을 생성하세요. 이 패턴은 EC2 인스턴스 생성(RunInstances)을 감지합니다.
{
"source": ["aws.ec2"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventName": ["RunInstances"]
}
}
이 규칙이 트리거되면, Lambda가 실행되어 자동으로 태그를 붙이게 됩니다.
✅ 결과 예시
인스턴스 생성 후 자동으로 아래와 같은 태그가 붙습니다:
Owner | iam_user_name 또는 Role 정보 |
Create_time | 2025-03-21 |
Private_IP | 10.0.1.15 (예시) |
✅ 기대 효과
- 자동화된 리소스 관리: 사람이 실수로 빠뜨리는 태그 작업을 자동화
- 운영 효율 향상: Private IP 기반으로 리소스 필터링 및 감사가 쉬움
- 비용 분석 최적화: 태그 기반 비용 추적 가능
📌 마무리
이렇게 설정해두면, 더 이상 수동으로 태그를 관리할 필요가 없습니다.
자동화된 태깅으로 운영 효율성은 물론, 보안 및 자원 추적 관리까지 깔끔하게 해결할 수 있습니다.
클라우드 인프라의 첫걸음은 "관리 가능한 구조"에서 시작됩니다. 지금 바로 도입해보세요!
궁금한 점이나 확장하고 싶은 기능이 있다면 댓글로 남겨주세요! 😊
'Tech > AWS' 카테고리의 다른 글
🎯 Terraform 변수 참조 구조 제대로 이해하기 (모듈 + 환경 구성 예시 기반) (0) | 2025.04.03 |
---|---|
AWS CLI로 생성 되어 있는 EC2 인스턴스에 Private IP 태그 자동 추가하는 방법 (실습 스크립트 포함) (0) | 2025.03.24 |
AWS Resource Explorer를 활용한 AWS 리소스 검색 및 태그 정보 수집 (0) | 2025.03.22 |