-
[80일차] Final Project Day_12교육/코드스테이츠 2023. 3. 22. 18:42
Terraform
Eventbridge Lambda 작성
resource "aws_iam_role" "cron_lambda_role" { name = "cron_lambda_role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Sid = "" Principal = { Service = "lambda.amazonaws.com" } }, ] }) } resource "aws_iam_policy" "cron_lambda_policy" { name = "cron_lambda_policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "dynamodb:Query", "dynamodb:Scan", "dynamodb:GetItem", ] Effect = "Allow" Resource = "arn:aws:dynamodb:ap-northeast-2:*:table/Products" }, ] }) } resource "aws_iam_policy" "lambda_logs_policy" { name = "lambda_logs_policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ] Effect = "Allow" Resource = "arn:aws:logs:ap-northeast-2:*:log-group:/aws/lambda/*:*" } ] }) } resource "aws_iam_policy" "ses_policy" { name = "ses-policy" description = "Allows sending email using SES" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "ses:SendEmail", "ses:SendRawEmail", ] Resource = "*" }, ] }) } resource "aws_lambda_function" "cron_lambda" { filename = "./check-stock.zip" function_name = "check-stock-quantity" role = aws_iam_role.cron_lambda_role.arn handler = "index.handler" runtime = "nodejs14.x" environment { variables = { TABLE_NAME = "Products" } } } resource "aws_lambda_permission" "my_permission" { statement_id = "AllowExecutionFromCloudWatch" action = "lambda:InvokeFunction" function_name = aws_lambda_function.cron_lambda.function_name principal = "events.amazonaws.com" source_arn = aws_cloudwatch_event_rule.cron_check.arn } resource "aws_iam_role_policy_attachment" "lambda_policy_attachment" { policy_arn = aws_iam_policy.cron_lambda_policy.arn role = aws_iam_role.cron_lambda_role.name } resource "aws_iam_role_policy_attachment" "lambda_logs_policy_attachment" { policy_arn = aws_iam_policy.lambda_logs_policy.arn role = aws_iam_role.cron_lambda_role.name } resource "aws_iam_role_policy_attachment" "ses_policy_attachment" { policy_arn = aws_iam_policy.ses_policy.arn role = aws_iam_role.cron_lambda_role.name }
aws_iam_role 리소스
- IAM 역할을 생성하고, 해당 역할을 Lambda 함수에 할당한다.
aws_iam_policy 리소스
- cron_lambda_policy, lambda_logs_policy, ses_policy라는 IAM 정책을 정의하여 설정한다.
- DynamoDB 테이블에 대한 쿼리 및 스캔 권한을 갖도록 허용한다.
- CloudWatch Logs에 로그를 작성할 수 있도록 허용한다.
- Lambda 함수에서 Amazon SES를 사용하여 이메일을 보낼 수 있도록 허용한다.
aws_lambda_function 리소스
- 실제 Lambda 함수를 생성하고, 함수 코드가 포함된 ZIP 파일을 지정한다. 이 리소스에서는 IAM 역할도 지정하며, 해당 역할이 Lambda 함수에서 사용할 수 있는 권한을 정의한다.
aws_lambda_permission 리소스
- CloudWatch 이벤트 규칙에서 Lambda 함수를 호출할 수 있도록 권한을 부여한다.
aws_iam_role_policy_attachment 리소스
- 역할과 정책을 연결하여 IAM 역할이 정책의 권한을 상속할 수 있도록 한다. 이 리소스는 역할 정책 별로 세 개가 있다.
SES
aws_ses_configuration_set
- 이메일 구성 세트는 이메일 메시지에 적용할 수 있는 여러 종류의 규칙, 알림 및 수신자 지정 등을 설정한다.
aws_ses_email_identity
- SES에서 보낼 수 있는 이메일 주소를 나타내며, 이메일 신뢰성을 확보하기 위한 방법 중 하나입니다.
Eventbridge
aws_cloudwatch_event_rule
- schedule_expression 속성에 cron 표현식을 사용하여 이벤트가 트리거되는 일정을 정의하여 CloudWatch 이벤트 규칙을 생성한다.
- 0 19 * * ? * 표현식을 사용하여 매일 19시 0분에 이벤트가 트리거된다.
aws_cloudwatch_event_target
- arn 속성에는 Lambda 함수의 ARN을 전달하고, rule 속성에는 해당 규칙의 이름을 전달하여 이벤트 규칙에 대한 대상을 정의한다.
'교육 > 코드스테이츠' 카테고리의 다른 글
[81일차] Final Project 프로젝트 정리 (0) 2023.03.23 [79일차] Final Project Day_11 (0) 2023.03.21 [78일차] Final Project Day_10 (0) 2023.03.20 [77일차] Final Project Day_09 (0) 2023.03.18 [76일차] Final Project Day_07 ~ 08 (0) 2023.03.16