모니터링 인프라
이 글을 포스팅하면서 사용한 테라폼(0.13.0)에서는 SNS에서 email 기능을 지원하지 않는다.
왜냐하면 SNS에 Email을 추가하려면 기입한 Email의 승인을 받아야 하는데 그렇게 되면 테라폼에서는 ARN을 노출시킬 수가 없기 때문이란다. (테라폼의 단점...)
하지만 우리에게는 모듈이 있다. SNS에 대해서는 모듈을 사용하기로 한다. >> (모듈 github)
이 모듈은 구글에서 검색한 모듈이다. Deanwilson 이란 영국인 형님이 만든 모듈이다.
Cloudformation 스택에서 SNS를 생성시켜 ARN을 output 값으로 설정해놓은 모듈이므로 유용하게 쓸 수 있다.
# 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값은 위의 사진을 참고하자. # 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를 참고하자. 난 그냥 따라쳣다.