AWS BackUpでEC2のバックアップに失敗した時に、自分のslackに通知が来るようにする
要件
AWS BackUpで失敗した時に、自分のslakcに通知が来るようにする
タスク
AWS BackUpで失敗した時に、自分のslakcに通知が来るようにする
参考記事
▼いきなりterrafromで実装が難しければ、まずはここから!
学べること
AWS Backupの自動バックアップに失敗した時に、自分のslackに通知が来るようにする
terraformでSNSを立ち上げる方法
AWS BackとSNSの連携のやり方
SNS とlambdaの連携のやり方
lambdaとslackの連携のやり方
ヒント
main.tf
##########################################
# SNS
##########################################
# ------------------------------
# SNSトピックの作成
# ------------------------------
resource "aws_sns_topic" "main" {
name = "notification_of_AWSBackup_failure"
fifo_topic = false
}
# ------------------------------
# aws_backupからSNSに通知するためのポリシー
# ------------------------------
data "aws_iam_policy_document" "sns_policy_document" {
policy_id = "__default_policy_ID"
statement {
actions = [
"SNS:Publish",
]
effect = "Allow"
principals {
type = "Service"
identifiers = ["backup.amazonaws.com"]
}
resources = [
aws_sns_topic.main.arn,
]
sid = "__default_statement_ID"
}
}
resource "aws_sns_topic_policy" "sns_policy" {
arn = aws_sns_topic.main.arn
policy = data.aws_iam_policy_document.sns_policy_document.json
}
# ------------------------------
# Vaultと SNS topicの紐付け
# ------------------------------
resource "aws_backup_vault_notifications" "backup_vault_notification" {
backup_vault_name = aws_backup_vault.this.name
sns_topic_arn = aws_sns_topic.main.arn
backup_vault_events = ["BACKUP_JOB_COMPLETED"]
}
# ------------------------------
# snsからlambdaに通知設定
# ------------------------------
resource "aws_sns_topic_subscription" "sns_to_subscription" {
topic_arn = aws_sns_topic.main.arn
protocol = "lambda"
endpoint = aws_lambda_function.sample_app.arn
filter_policy = <<EOF
{
"State": [
{
"anything-but": "COMPLETED"
}
]
}
EOF
}
# ------------------------------
# lambdaとSNSの紐付け
# ------------------------------
resource "aws_lambda_permission" "main" {
statement_id = "AllowExecutionFromSNS"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.sample_app.arn
principal = "sns.amazonaws.com"
source_arn = aws_sns_topic.main.arn
}
ハマりポイント
以前の記事で、AWS Backupとlambdaをterraformを行ったが
今回行うのは、以下の2つの中間にSNSを入れとこの2つを繋げるのだが、このSNSがなかなか大変、、
AWS BackUp => SNS => lambda