Terraform 활용하여 AWS Media컨텐츠 제공하는 인프라 구성 - Monitoring

empty·2020년 9월 29일
0

모니터링 인프라

구성순서

모니터링 인프라

  • 1. SNS (모듈사용)
  • 2. Cloud Watch

1. SNS

문제점

이 글을 포스팅하면서 사용한 테라폼(0.13.0)에서는 SNS에서 email 기능을 지원하지 않는다.
왜냐하면 SNS에 Email을 추가하려면 기입한 Email의 승인을 받아야 하는데 그렇게 되면 테라폼에서는 ARN을 노출시킬 수가 없기 때문이란다. (테라폼의 단점...)

하지만 우리에게는 모듈이 있다. SNS에 대해서는 모듈을 사용하기로 한다. >> (모듈 github)
이 모듈은 구글에서 검색한 모듈이다. Deanwilson 이란 영국인 형님이 만든 모듈이다.

Cloudformation 스택에서 SNS를 생성시켜 ARN을 output 값으로 설정해놓은 모듈이므로 유용하게 쓸 수 있다.

모듈 I/O


sns.tf

# Use Module to use SNS
module "admin-sns-email-topic" {
  source = "github.com/deanwilson/tf_sns_email"

  display_name  = "seunghyeon-sns-test"
  email_address = "zzlinmer92@gmail.com"
  owner         = "Example.org:Admin"
  stack_name    = "seunghyeon-sns"
}
  • admin-sns-email-topic sns 토픽은 모듈을 사용하여 간단하게 생성한다. Input/Ouput값은 위의 사진을 참고하자.

2. CloudWatch

cloudwatch.tf

# Cloudwatch Setting
resource "aws_cloudwatch_event_rule" "seunghyeon-watch" {
  name          = "seunghyeon-cloudwatch-test"
  event_pattern = <<EOF
  {
"source": [
    "aws.mediaconvert"
],
"detail-type": [
    "MediaConvert Job State Change"
],
"detail": {
    "status": [
    "COMPLETE",
    "ERROR"
    ],
"userMetadata": {
    "application": [
        "VOD"
    ]
    }
}
}
EOF
}

# Target Setting
resource "aws_cloudwatch_event_target" "seunghyeon-sns" {
  ### Use Module's output to Use Target arn
  arn  = module.admin-sns-email-topic.arn
  rule = aws_cloudwatch_event_rule.seunghyeon-watch.name

  input_transformer {
    input_paths    = {"jobId":"$.detail.jobId","settings":"$.detail.userMetadata.input","application":"$.detail.userMetadata.application","status":"$.detail.status"}
    input_template = "\"Job <jobId> finished with status <status>. Job details: https://ap-northeast-2.console.aws.amazon.com/mediaconvert/home?region=ap-northeast-2#/jobs/summary/<jobId>\""
  }
  depends_on = [module.admin-sns-email-topic]
}
  • aws_cloudwatch_event_rule cloudwatch의 룰을 설정한다.
    만약 mediaconvert의 status 값이 COMPLETE/ERROR일 경우 Lambda 트리거를 발동하여 설정한 SNS로 알람이 가게 설정한다.

  • aws_cloudwatch_event_target 여기서는 타겟의 경로, 템플릿등을 지정하는데 정확한 설명은 github를 참고하자. 난 그냥 따라쳣다.

0개의 댓글