# Provider Configuration provider "aws" { region = "ap-northeast-2" } # Locals for Constants (replace values as needed) locals { prefix = "bumpsoo-menu" image_bucket_name = "${local.prefix}-img-bucket" lambda_role_name = "${local.prefix}-lambda-role" lambda_function_name = "${local.prefix}-lambda" lambda_filename = "artifacts.zip" # Zip file containing Lambda code lambda_handler = "lambda_function.lambda_handler" # Replace with your handler weekday_rule_name = "${local.prefix}-weekday-image-upload" } # S3 Bucket (Publicly Accessible) resource "aws_s3_bucket" "image_bucket" { bucket = local.image_bucket_name acl = "public-read" # Policy for public read access to objects policy = jsonencode({ Version = "2012-10-17" Statement = [ { Sid = "PublicReadGetObject" Effect = "Allow" Principal = "*" Action = "s3:GetObject" Resource = "arn:aws:s3:::${aws_s3_bucket.image_bucket.bucket}/*" } ] }) } # IAM Role for Lambda (EventBridge Permissions) resource "aws_iam_role" "lambda_role" { name = local.lambda_role_name assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Principal = { Service = "lambda.amazonaws.com" } Effect = "Allow" } ] }) # Policy to allow EventBridge rule creation/management inline_policy { name = "lambda_eventbridge_policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "events:PutRule", "events:PutTargets" ] Resource = "*" } ] }) } } # Lambda Function resource "aws_lambda_function" "image_lambda" { function_name = local.lambda_function_name filename = local.lambda_filename role = aws_iam_role.lambda_role.arn handler = local.lambda_handler runtime = "python3.11" } # EventBridge Rule resource "aws_cloudwatch_event_rule" "weekday_rule" { name = local.weekday_rule_name description = "Trigger Lambda at 10 AM on weekdays" schedule_expression = "cron(0 10 ? * MON-FRI *)" # 10 AM every workday in KST timezone } # EventBridge Target (Lambda) resource "aws_cloudwatch_event_target" "lambda_target" { rule = aws_cloudwatch_event_rule.weekday_rule.name target_id = "lambda" arn = aws_lambda_function.image_lambda.arn }