Terraform 코드: Lambda Warm-Up 설정
provider "aws" {
region = "ap-northeast-2"
}
# Lambda Function
resource "aws_lambda_function" "warm_up_lambda" {
function_name = "warm-up-function"
runtime = "python3.9"
handler = "lambda_function.lambda_handler"
# Lambda 코드 (간단한 워밍업용 코드)
filename = "lambda_function.zip" # 패키징된 zip 파일
source_code_hash = filebase64sha256("lambda_function.zip") # 파일 무결성 확인
role = aws_iam_role.lambda_execution_role.arn
}
# Lambda Execution Role
resource "aws_iam_role" "lambda_execution_role" {
name = "warm-up-lambda-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
}
]
})
}
# Lambda Policy (CloudWatch Logs에 기록 가능하도록 설정)
resource "aws_iam_role_policy" "lambda_policy" {
role = aws_iam_role.lambda_execution_role.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
Effect = "Allow"
Resource = "arn:aws:logs:*:*:*"
}
]
})
}
# CloudWatch Event Rule (5분마다 트리거)
resource "aws_cloudwatch_event_rule" "warm_up_schedule" {
name = "warm-up-schedule"
description = "Trigger Lambda every 5 minutes for warming up"
schedule_expression = "rate(5 minutes)"
}
# Event Rule to Lambda Target
resource "aws_cloudwatch_event_target" "warm_up_target" {
rule = aws_cloudwatch_event_rule.warm_up_schedule.name
target_id = "warm-up-lambda-target"
arn = aws_lambda_function.warm_up_lambda.arn
}
# Lambda Permission for CloudWatch Events
resource "aws_lambda_permission" "allow_cloudwatch" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.warm_up_lambda.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.warm_up_schedule.arn
}
Terraform 코드 설명
- Lambda 함수 정의 (aws_lambda_function)
- lambda_function.zip 파일은 간단한 Python 스크립트가 들어간 Lambda 패키지입니다.
- 이 함수는 콜드 스타트를 방지하기 위해 호출만 수행하며, 아무 동작도 하지 않을 수 있습니다.
- IAM 역할 및 정책 (aws_iam_role, aws_iam_role_policy)
- Lambda 함수가 CloudWatch Logs에 기록할 수 있도록 정책을 추가합니다.
- CloudWatch Event Rule (aws_cloudwatch_event_rule)
- schedule_expression으로 rate(5 minutes)를 지정하여 5분마다 Lambda를 트리거합니다.
- Event Target 설정 (aws_cloudwatch_event_target)
- CloudWatch Event Rule과 Lambda 함수를 연결합니다.
- Lambda Permission (aws_lambda_permission)
- EventBridge(CloudWatch Events)가 Lambda를 호출할 수 있도록 권한을 부여합니다.
Lambda 코드 예제 (lambda_function.py)
패키징된 lambda_function.zip의 Python 코드 예제입니다.
def lambda_handler(event, context):
print("Lambda is warmed up!")
return {"statusCode": 200, "body": "Warmed up"}
배포 방법
- lambda_function.py를 패키징:
zip lambda_function.zip lambda_function.py
- Terraform 코드 적용:
terraform init
terraform apply
비용 고려
- CloudWatch Events: 1,000,000개의 이벤트 호출당 약 $1.
- Lambda 호출: 호출 횟수 및 실행 시간에 따라 비용 발생. 워밍용 Lambda는 초 단위로 실행되므로 비용이 미미합니다.
결론
CloudWatch Events를 사용한 Lambda 워밍업은 비용 효율적이고, 구현이 간단하여 소규모 또는 간헐적 트래픽 처리에 적합합니다. SnapStart와 같은 최신 기술과는 달리 모든 언어에서 사용 가능하며, AWS 리소스를 최소화할 수 있습니다.
'AWS' 카테고리의 다른 글
AWS Nat 구성 (0) | 2025.01.04 |
---|---|
Lambda Cold Start CloudWatch Events vs EventBridge (0) | 2024.12.12 |
Lambda Cold Start 해결 방법 (Snapstart) (0) | 2024.12.12 |
Lambda Cold Start 해결 방법 (0) | 2024.12.12 |
AWS Lambda Log 동적 변경 (1) | 2024.11.29 |