Closed10

【Terraform】SNSの通知をEventBridgeの入力トランスフォーマーでわかりやすくする

not75743not75743

どこで設定する?

コンソールの場合、ターゲット入力を設定から入力トランスフォーマーを選択することで設定できました

not75743not75743

設定

  • サンプルイベント
    • スポットインスタンスの中断イベントであるEC2 Spot Instance Interruption Warningを選択
{
  "version": "0",
  "id": "1e5527d7-bb36-4607-3370-4164db56a40e",
  "detail-type": "EC2 Spot Instance Interruption Warning",
  "source": "aws.ec2",
  "account": "123456789012",
  "time": "1970-01-01T00:00:00Z",
  "region": "us-east-1",
  "resources": ["arn:aws:ec2:us-east-1b:instance/i-0b662ef9931388ba0"],
  "detail": {
    "instance-id": "i-0b662ef9931388ba0",
    "instance-action": "terminate"
  }
}
  • ターゲット入力トランスフォーマー
    • 以下のようにします
{
    "Instance": "$.detail.instance-id",
    "InterruptionNotice": "$.time"
}
  • スポットインスタンスの中断イベントからinstance-idtimeを抜き出し、InstanceInterruptionNoticeに格納します。
  • テンプレート
    • 以下のようにします
"インスタンスID: <Instance>"
"通知を受け取った時間: <InterruptionNotice>"
  • 先程設定したInstanceInterruptionNoticeをテンプレートに設定します
not75743not75743

プレビュー

出力を生成することで出力を確認することができます

インスタンスIDと通知時間が正常に出力されることを確認します

インスタンスID: i-0b662ef9931388ba0"
"通知を受け取った時間: 1970-01-01T00:00:00Z
not75743not75743

実際にメールを飛ばす

テンプレート通りの通知がきました!

not75743not75743

Terraform化

Terraformでも設定できるようにしておきます。
ドキュメントにサンプルがあったのでパクリましょう
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_target#input-transformer-usage---json-object

resource "aws_cloudwatch_event_target" "sns" {
  rule = aws_cloudwatch_event_rule.spot-interruption-rule.name
  arn  = aws_sns_topic.topic.arn

  input_transformer {
    input_paths = {
      Instance = "$.detail.instance-id",
      InterruptionNotice  = "$.time",
    }
    input_template = <<EOF
"インスタンスID: <Instance>"
"通知を受け取った時間: <InterruptionNotice>"
EOF
  }
}

見やすくするためにヒアドキュメントを使用しています。
https://developer.hashicorp.com/terraform/language/expressions/strings#heredoc-strings

not75743not75743

所感

  • Lambdaを設定する必要がない
  • しかしLambdaのように値の加工はできない、あくまでイベントの値だけ使用可能
  • カスタマイズが必須の場合Lambdaを使う、イベントの値だけで目的を満たせるのであればEventBridgeの入力トランスフォーマーで操作する
このスクラップは2023/06/26にクローズされました