CDK(Python)でEventBridge構築時に入力トランスフォーマーの記載に手こずったこと
こんにちは、ゲームソリューション部の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構築時に入力トランスフォーマーの記載に手こずったことについて記載しました。
どなたかの参考になると幸いです。