ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 속성에는 해당 규칙의 이름을 전달하여 이벤트 규칙에 대한 대상을 정의한다.
Designed by Tistory.