こんにちは、ゲームソリューション部のsoraです。
今回は、CDK(Python)でEventBridge構築時に入力トランスフォーマーの記載に手こずったことについて書いていきます。
EventBridgeとは何かについては、ここでは記載しません。
EventBridgeの入力トランスフォーマーとは
EventBridgeの入力トランスフォーマーとは、ターゲットへの出力時のメッセージを変換できる仕組みです。
例えば、以下のようなものを
{
"version": "0",
"source": "aws.config",
"account": "<アカウントID>",
"region": "ap-northeast-1",
"detail-type": "Config Rules Compliance Change",
"time": "2023-03-20T05:48:47Z",
"resources": [
"<リソース>"
]
}
以下のような読みやすい形に変換することができます。
"タグが付与されていないリソースを検知しました。"
"<ルール違反のリソース情報>"
"リソースタイプ: AWS::EC2::RouteTable"
"リソースID : <リソースID>"
"非準拠判定日時: 2023-03-20T05:59:22.954Z"
JSONを使わない場合に手こずったこと
CDK(Python)でEventBridgeを構築する際に、L2コンストラクトでは細かい設定ができなかったため、L1コンストラクトで定義しました。
以下は上手くいったコードの抜粋です。
events.CfnRule(self, "tag-required-eventbridge",
name="tag-required-rule",
event_pattern=events.EventPattern(
source=["aws.config"],
detail_type = ["Config Rules Compliance Change"],
detail = {
"messageType": ["ComplianceChangeNotification"],
"configRuleName": ["required-tags"],
"newEvaluationResult": {
"complianceType": ["NON_COMPLIANT"]
}
}
),
targets=[events.CfnRule.TargetProperty(
arn = topic.topic_arn,
id = "tag-required-target",
input_transformer=events.CfnRule.InputTransformerProperty(
input_template="\"タグが付与されていないリソースを検知しました。\"\n\"<ルール違反のリソース情報>\"\n\"リソースタイプ: <resourceType>\"\n\"リソースID : <resourceId> \"",
input_paths_map={
"resourceId": "$.detail.resourceId",
"resourceType": "$.detail.resourceType"
}
)
)]
)
つまづいたのはinput_templateの部分です。
公式ページのExamplesのTransform input into a stringを参考にしたものの、input_templateが上手く通らず困っていました。(私の当時の書き方が悪かった可能性もなくはないです)
ダブルクォーテーションが多くてわかりづらいですが細かく見ていきます。
input_template="\"タグが付与されていないリソースを検知しました。\"\n\"<ルール違反のリソース情報>\"\n\"リソースタイプ: \"\n\"リソースID : \""
値がStringのため全体をダブルクォーテーションで囲み、文字列の各行がダブルクォーテーションで囲まれてる必要があるため、\"
として"
を入れる必要があります。
最後に
今回は、CDK(Python)でEventBridge構築時に入力トランスフォーマーの記載に手こずったことについて記載しました。
どなたかの参考になると幸いです。