CDK(Python)でEventBridge構築時にdetail-typeが正しく変換されなかったこと
こんにちは、ゲームソリューション部のsoraです。
今回は、CDK(Python)でEventBridge構築時にdetail-typeが正しく変換されなかったことについて書いていきます。
EventBridgeとは何かについては、ここでは記載しません。
L1コンストラクトでdetail-typeが正しく変換されなかった
以下コードを使用してEventBridgeを定義したところ、detail_type
が本来であればdetail-type
と変換されてほしいところ、detailType
となってしまい正常に動作しませんでした。
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" } ) )] )
以下は先ほどのCDKから生成されたEventBridgeのイベントパターン
{ "detailType": ["Config Rules Compliance Change"], "detail": { "configRuleName": ["required-tags"], "messageType": ["ComplianceChangeNotification"], "newEvaluationResult": { "complianceType": ["NON_COMPLIANT"] } }, "source": ["aws.config"] }
detailType
ではなくdetail-type
になってほしいため、本来であれば以下のようになってほしい。
{ "detail-type": ["Config Rules Compliance Change"], "detail": { "configRuleName": ["required-tags"], "messageType": ["ComplianceChangeNotification"], "newEvaluationResult": { "complianceType": ["NON_COMPLIANT"] } }, "source": ["aws.config"] }
対処
これについてはCDK側のバグっぽくて、GitHub上にもIsuueで挙げられていました。
CDK(Python)のコードを書き換えることでは改善できなかったため、暫定的な対処として以下で手動で対処しました。
- CDKでdeployした後に、EventBridgeのイベントパターンを編集する
- CDKでCloudFormationテンプレートを生成して、detailTypeをdetail-typeに修正した後にテンプレートからデプロイする
最後に
今回は、CDK(Python)でEventBridge構築時にdetail-typeが正しく変換されなかったことについて記載しました。
どなたかの参考になると幸いです。