パートナーイベントソースと EventBridge イベントバスの関連付けを Terraform で実施する
概要
EventBridge のパートナーイベントソースを利用することで、AWS 外の SaaS からイベントを受信して EventBridge で処理することができます。

Amazon EventBridge での SaaS パートナーからのイベントの受信
この際、まず SaaS 側でイベントを出力する設定をしてから、AWS 側でパートナーイベントソースと EventBridge Bus の関連付けを行う必要があります。
マネジメントコンソールから実施すると下記のような作業です。

この作業を実施することでカスタムイベントバスが作成されて、イベントを受信できるようになります。
この作業を IaC で行い、EventBridge イベントバスも IaC 管理することができるようです。
ということで、SaaS は Okta、IaC ツールは Terraform で試してみます。
やってみた
まず、Okta 公式ドキュメント にしたがって Okta 側でログストリーミング設定を行います。

続いて、Terraform で EventBridge Bus を作成します。
この際、SaaS ごとに決まった命名規則で作成する必要があり、Okta だと下記のような形式になります。
aws.partner/okta.com/{okta_subdomain}/{event_source_name}
問題はこの命名規則をどうやって取得すれば良いのかです。
各 SaaS 側のドキュメントを漁ったり、実際に設定して命名規則を判断するしかなさそうでした...
Okta の場合は 公式ドキュメント に書いてあり、ログストリーミング設定時に指定した AWS Event Source Name とサブドメイン名を利用します。
aws.partner/okta.com/yourOktaSubdomain/yourAWSEventSourceName
SaaS ごとの命名規則が決まれば、 aws_cloudwatch_event_bus の name 属性と event_source_name 属性に同じ値を指定してリソースを作成するだけです。
resource "aws_cloudwatch_event_bus" "okta_partner_event_bus" {
name = "aws.partner/okta.com/${var.okta_sub_domain}/${var.event_source_name}"
event_source_name = "aws.partner/okta.com/${var.okta_sub_domain}/${var.event_source_name}"
description = "EventBridge Bus for Okta Partner Event Source"
}
terraform diff は下記のようになりました。
Terraform will perform the following actions:
# aws_cloudwatch_event_bus.okta_partner_event_bus will be created
+ resource "aws_cloudwatch_event_bus" "okta_partner_event_bus" {
+ arn = (known after apply)
+ description = "EventBridge Bus for Okta Partner Event Source"
+ event_source_name = "aws.partner/okta.com/trial-xxxxxx/okta-system-log"
+ id = (known after apply)
+ name = "aws.partner/okta.com/trial-xxxxxx/okta-system-log"
+ region = "ap-northeast-1"
+ tags_all = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
terraform apply すると無事パートナーイベントソースが「アクティブ」になりました!

最後に
このくらいの作業なら IaC 管理外にしちゃっても良いんですけどね。
可能な限り IaC 管理したい場合は試してみて下さい!







