【小ネタ】 EventBridge InputTransformer の複数行テンプレートで SNS メールにダブルクォートが残った話
はじめに
こんにちは、クラスメソッドの板倉です。
Security Hub の検出結果を EventBridge → SNS 経由でメール通知する仕組みを CLI で構築していたところ、InputTransformer の複数行テンプレートで AWS 公式ドキュメント通りに書いたのに、配信されたメール本文に ダブルクォートがそのまま残ってしまう 事象に遭遇しました。
小ネタですが備忘も兼ねてブログにしてみました。
結論
- EventBridge
InputTransformerのInputTemplateに複数行プレーンテキストを入れる場合、各行をダブルクォート (") で囲む のが公式仕様 - この ダブルクォートは配信時に除去されない
- コンソール のプレビュー画面でも同じ結果になるため、コンソール / API の挙動差ではなく仕様
- メール本文を綺麗に整形したい場合は EventBridge → Lambda → SNS のように Lambda を挟む必要がある
やりたかったこと
Security Hub Findings を以下のようなフォーマットでメール通知したかったです。
[Security Hub] CRITICAL - S3.1
Account: 1234XXXXXXXX
Region: ap-northeast-1
Title: S3.1 S3 General purpose buckets should have block public access settings enabled
Resource: arn:aws:s3:::example-bucket
This control checks whether ...
Finding ID: arn:aws:securityhub:...
▼ コントロール詳細ページ
https://ap-northeast-1.console.aws.amazon.com/securityhub/home?region=ap-northeast-1#/controls/S3.1
Security Hub Findings - Imported イベントを EventBridge Rule で拾い、InputTransformer で整形して SNS Topic に送る構成です。

公式ドキュメントの記載
Amazon EventBridge input transformation には複数行プレーンテキストについてこう書いてあります。
For (non-JSON) text output as multi-line strings, wrap each separate line in your input template in double quotes.
つまり「複数行プレーンテキストにしたいなら、各行をダブルクォートで囲んで並べる」ということです。例も以下のように書かれています。
"<severity> severity finding <title>"
"Description: <description>"
"ARN: \"<arn>\""
"Type: <type>"
素直に読めば「ダブルクォートは囲み文字として処理される、出力には残らない」と解釈しませんか…?
公式仕様で書いてみた結果
検証は CLI から aws events put-targets --targets file://... で JSON ファイル経由で InputTemplate を投入し、テスト用 EventBridge Rule → SNS Topic → Email サブスクライブで配信メールを確認する構成で実施しました。
公式ドキュメントに沿って、各行をダブルクォート (") で囲んで実改行で連結する形で書きます。
lines = [
'"[Security Hub] <severity> - <controlId>"',
'""',
'"Account: <account>"',
'"Region: <region>"',
...
]
"InputTemplate": '\n'.join(lines)
→ put-targets は成功、改行も意図通り出力される。ですが、メール本文には 各行のダブルクォートがそのまま残った状態 で配信されました。

つまり改行はちゃんとできるけど、" も付いてくる…。
AWS コンソール のプレビューでも同じ
「もしかして CLI と コンソール で挙動が違うのでは?」と思い、AWS コンソール の EventBridge Rule 編集画面で Input transformer の Template 欄に同じ内容(各行 "...")を直接入力し、Output 欄のプレビューを確認しました。
結果は Output 欄でもダブルクォートが残ったまま表示。コンソール と CLI で挙動差はなく、ダブルクォート除去は AWS 側で実装されていないようです。
ちなみに Template 欄に外側ダブルクォートなしの素のテキスト を貼り付けた場合は、コンソール 側で「文字列テンプレートには引用符が必要です」とエラーになります。"..." で囲むのは必須仕様ということですね。
回避策
1. ダブルクォート残存を許容する
「メール本文に " が残るが情報はちゃんと伝わる」という割り切りができるなら、追加実装ゼロで済みます。フィールド名・値が " で囲まれた YAML / JSON ライクな見た目になるので、これはこれで構造化メッセージとして読めなくはない・・・ということで許容できるならこのままでも良いかと思います。
2. Lambda を挟んで自由に整形する
完全に綺麗な本文にしたい場合は、EventBridge → Lambda → SNS の構成にすることで、InputTransformer の制約から離れて Lambda 内でメール本文を自由に整形できます。
まとめ
- EventBridge
InputTransformerで複数行プレーンテキストを生成するには、公式仕様通り 各行をダブルクォート (") で囲んで並べる 必要がある - ただし配信時にダブルクォートは除去されず、メール本文にそのまま残る(AWS コンソール プレビューでも同じ)
- 完全に整形された通知メールがほしい場合は Lambda を挟む 必要がある
- ダブルクォート残存を許容するか、Lambda を挟むかはユースケース次第
この挙動を事前に知っておけば設計時に Lambda を挟むかどうかの判断ができるかなと思います。
どなたかの参考になれば幸いです。
以上、クラウド事業本部 コンサルティング部のいたくら(@itkr2305)でした!






