이 모듈은 AWS Lambda를 사용하여 CloudWatch 로그를 S3로 주기적으로 내보내는 자동화 인프라를 손쉽게 구축할 수 있도록 도와줍니다.
- Lambda 함수 자동 배포 (코드 패키징 포함)
- IAM Role 연결
- EventBridge(CloudWatch Events)로 스케줄링
- S3 버킷으로 로그 내보내기
- (선택) VPC 설정 지원
prod/lambda/
├── code/ # Lambda 소스코드 디렉토리 (예: python 코드)
├── modules/
│ └── cw-export/ # 본 Terraform 모듈
└── S3_Loggroup/
├── main.tf # 모듈을 실제로 사용하는 예시
└── vars.tf # 변수값 정의
main.tf에서 아래와 같이 모듈을 호출합니다:
module "cw_export" {
source = "../modules/cw-export"
function_name = var.function_name
handler = var.module_handler
runtime = var.module_runtime
role_arn = var.role_arn
schedule_cron = var.module_schedule_cron
bucket = var.bucket
prefix = var.module_prefix
source_dir = var.module_source_dir
# (선택) VPC 설정
enable_vpc = var.enable_vpc
vpc_subnet_ids = var.vpc_subnet_ids
vpc_security_group_ids = var.vpc_security_group_ids
}variable function_name" {
type = string
default = "ExportCWLogs"
description = "Lambda 함수 이름"
}
variable role_arn" {
type = string
description = "Lambda 실행 역할 ARN (필수)"
}
variable bucket" {
type = string
default = "{버킷이름}"
description = "CloudWatch 로그를 저장할 S3 버킷 이름"
}
variable module_handler" {
type = string
default = "lambda_function.lambda_handler"
description = "Lambda 핸들러 경로"
}
variable module_runtime" {
type = string
default = "python3.9"
description = "Lambda 런타임 버전"
}
variable module_schedule_cron" {
type = string
default = "cron(0 0 * * ? *)"
description = "스케줄 cron 식"
}
variable module_prefix" {
type = string
default = "cw-backup"
description = "S3 prefix"
}
variable module_source_dir" {
type = string
default = "../code/python"
description = "Lambda 소스 디렉토리 경로"
}
# (선택) VPC 설정
variable enable_vpc" {
type = bool
default = false
description = "Lambda를 VPC에 연결할지 여부"
}
variable vpc_subnet_ids" {
type = list(string)
default = []
description = "VPC 서브넷 ID 목록"
}
variable vpc_security_group_ids" {
type = list(string)
default = []
description = "VPC 시큐리티 그룹 ID 목록"
}source_dir에 지정한 경로에 Python 등 Lambda 코드를 준비하세요.- 예시:
prod/lambda/code/python/lambda_function.py
role_arn등 환경에 맞는 값을 반드시 지정해야 합니다.- 나머지는 default 값이 있으므로 필요시만 수정하세요.
terraform init
terraform apply| 변수명 | 설명 | 필수/옵션 | 기본값 |
|---|---|---|---|
| function_name | Lambda 함수 이름 | 필수 | 없음 |
| handler | Lambda 핸들러 경로 | 필수 | 없음 |
| runtime | Lambda 런타임 버전 | 필수 | 없음 |
| role_arn | Lambda 실행 역할 ARN | 필수 | 없음 |
| schedule_cron | 스케줄 cron 식 | 필수 | 없음 |
| bucket | S3 버킷 이름 | 필수 | 없음 |
| prefix | S3 prefix | 옵션 | "cw-backup" |
| source_dir | Lambda 소스 디렉토리 경로 | 옵션 | "../code/python" |
| enable_vpc | Lambda를 VPC에 연결할지 여부 | 옵션 | false |
| vpc_subnet_ids | VPC 서브넷 ID 목록 | 옵션 | [] |
| vpc_security_group_ids | VPC 시큐리티 그룹 ID 목록 | 옵션 | [] |
Q. Lambda 코드는 어디에 두나요?
A. source_dir에 지정한 경로(예: ../code/python)에 Lambda 코드를 두세요.
Q. IAM Role은 어떻게 만드나요?
A. Lambda 실행에 필요한 권한을 가진 IAM Role을 별도로 생성하고, 그 ARN을 role_arn에 입력하세요.
Q. 여러 Lambda를 배포하고 싶으면?
A. main.tf에서 모듈을 여러 번 호출하면 됩니다. 변수만 다르게 지정하세요.
- 모듈 사용 중 궁금한 점이나 개선 요청은 인프라 담당자에게 문의하세요.