Amazon Route 53のパブリックホストゾーンの作成に合わせてNotionデータベースにページを追加してみる

Amazon Route 53 のパブリックホストゾーン作成時に Amazon EventBridge を用いて Notion API に接続し、ホストゾーン一覧を管理する Notion データベースへのページ追加を試してみました。
2022.09.06

Amazon Route 53 のパブリックホストゾーンの作成時に、Notion API と連携してデータベースにホストゾーン名のページに追加する仕組みを試してみました。Amazon EventBridge の API 送信機能を用いて実現しました。

やってみた

システム構成のイメージです。Amazon Route 53 のパブリックホストゾーンの作成イベントに対して、Amazon EventBridge の API 送信機能で Notion API に接続します。

パブリックホストゾーンに関する Notion データベースです。Route 53 でパブリックホストゾーンがされると自動でデータベースのデータ(ページ)が追加されるようにします。

なお、今回はホストゾーンの削除時に Notion データベースのページ削除までは行っていません。Notion API でデータベースのページを削除する場合はPage IDを指定する必要があり、ホストゾーンとPgae IDの関連付けを把握しておく必要があります。そのため、Amazon EventBridge の API 送信機能だけでは実現できず、別の仕組みで実現する必要があります。またの機会にしたいと思います。

2022年9月21日追記
データベースのページ削除まで行ったブログを公開しました


Notion データベースの作成

Amazon Route 53 のパブリックホストゾーンの管理用データベースを次の図の通り作成します。Account ID のプロパティタイプはテキストにしています。


Ntoion API の設定

Notion API のインテグレーション設定は次のページで行います。

Notion API Integration

「新しいインテグレーション」から作成します。

基本情報は次の通り設定しました。機能としては、データベースにページを追加するための「コンテンツを挿入」のみとしており、ユーザー機能も「ユーザー情報なし」としています。

シークレットのトークン情報が表示されるため大切に管理します。

次に、前項で作成した Notion データベースに対して共有設定を行います。

データベースのページの「共有」を選択して、上記で作成したインテグレーションを選択して招待します。

設定後に「共有」メニューから付与している権限をデータベースのページから確認することもできます。

以上で Notion 側の設定は完了です。

なお、Notion API のリファレンスは次のページで公開されています。

Introduction

試しにローカル環境からデータベースにページを追加してみます。

curlコマンドでデータベースにページを追加してみます。データベースの各データの実態はページなので、ページを追加する API を利用します。後ほど、Amazon EventBridge の API 送信設定を行う際はこの形式になるように整形します。

curl -X POST https://api.notion.com/v1/pages \
  -H "Authorization: Bearer secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Notion-Version: 2022-06-28" \
  --data '{
    "parent": { "database_id": "f5a676459b664c4784854ffe5example" },
    "properties": {
      "Public Hosted Zone": {
        "title": [
          {
            "text": {
              "content": "example.net."
            }
          }
        ]
      },
      "Account ID": {
        "rich_text": [
          {
            "text": {
              "content": "111122223333"
            }
          }
        ]
      }
    }
  }'

ページ作成に関する API は次のページに記載があり、パラメータの確認ができます。

Create a page

Authorizationに Notion の API を設定した際のトークン情報を利用します。

Notion-Versionは次のページを参考に設定します。

Changes by version

database_idは Notion データベースの URL におけるnotion.so/?v=xxxxxの間の32桁の文字列が該当します。

コマンド実行後にデータベースにページが追加されていることを確認できました。最終更新者が作成したインテグレーションになっていることも確認できます。


Amazon EventBridge の設定

Route 53 のパブリックホストゾーン作成を契機に Notion API と連携する EventBridge の設定を行います。

作業前にリージョンをバージニア北部に変更します。Route 53 はグローバルサービスのため、バージニア北部リージョンでイベントが発行されるためです。

始めに API の送信先と接続の設定を作成します。EventBridge の「API の送信先」メニューから「API 送信先を作成」から行います。

接続の設定です。「新しい接続を作成」を選択します。

入力後に「作成」を選択すれば完了です。

API 送信先で設定している内容は下表の通りです。

設定項目名 補足説明
API 送信先エンドポイント https://api.notion.com/v1/pages
HTTP メソッド POST

接続の API キーで設定している内容は下表の通りです。

API キー名 補足説明
Authorization Bearer secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 値は自身のトークン情報を入力


次にルールの設定です。EventBridge の「ルール」メニューから「ルールを作成」から行います。

イベントパターンの設定では、イベントソースとして「AWS イベントまたは EventBridge パートナーイベント」を選択します。

イベントパターンには次の値を設定します。プライベートホストゾーンの作成を対象外とするためにprivateZoneパラメータがfalseであることを条件にしています。

{
  "source": ["aws.route53"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["route53.amazonaws.com"],
    "eventName": ["CreateHostedZone"],
    "responseElements": {
      "hostedZone": {
        "config": {
          "privateZone": [false]
        }
      }
    }
  }
}

ターゲットの選択では上記で作成した API の送信先を指定します。

ヘッダーパラメータで設定している内容は下表の通りです。

キー 補足説明
Content-Type application/json
Notion-Version 2022-06-28

追加設定における「ターゲット入力を設定」のプルダウンから「入力トランスフォーマー」を選択します。その後、「入力トランスフォーマーを設定」をクリックして入力パスとテンプレートに次の値を設定します。テンプレートのdatabase_idは自身の Notion データベースの ID に置き換える必要があります。

入力パス

{
  "AccountId": "$.account",
  "HostedZoneName": "$.detail.responseElements.hostedZone.name"
}

テンプレート

{
  "parent": { "database_id": "f5a676459b664c4784854ffe5example" },
  "properties": {
    "Public Hosted Zone": {
      "title": [
        {
          "text": {
            "content": "<HostedZoneName>"
          }
        }
      ]
    },
    "Account ID": {
      "rich_text": [
        {
          "text": {
            "content": "<AccountId>"
          }
        }
      ]
    }
  }
}

入力トランスフォーマーを設定後に「次へ」を選択して次に進みます。

タグ設定と設定内容の確認を行い、ルールを作成すれば EventBridge の完了です。


動作確認

動作確認のために Route 53 のパブリックホストゾーンを作成します。

Notion データベースを確認したところ、先程作成したパブリックホストゾーンtest.example.net.のページが追加されていました!

以上で終了です。


さいごに

Notion API を利用して、Amazon Route 53 のパブリックホストゾーン作成に合わせて Notion データベースのページ作成を試してみました。今回はパブリックホストゾーンで試しましたが、購入・移管したドメインの管理や EC2 インスタンスの名簿作成など他の用途でも活用できそうです。