Blog

Notion×DynamoDB連携を模索してみる(前編)

ニフティ株式会社新卒2年目で会員システムグループの松阪です。
昨年度末に社内でNIFTY TechDay 2022が開催され、私もNotionについて少しお話ししました。本記事ではNotionと様々なツールとの連携の中でも、特に感動したDynamoDBとの連携についてご紹介します。

Notionたのしぃ

昨年11月頃から、ニフティにもConfluenceからNotionに乗り換えるビックウェーブが巻き起こり、現在も変革期の最中にいます。

Notionには魅力的で楽しいと感じる箇所は多いですが、特に他サービスとの連携が容易である点が挙げられるのではないでしょうか。

Zapierなどのツールを使うとSlackやNotion、Googleフォーム、GitHubなどをそれぞれの特性を活かした連携がノーコードで容易に実現でき、業務改善も捗ります。
様々なツールとの連携
例えば、企画から開発への依頼時にSlackワークフローを使用していましたが、活発なチャンネルではすぐに依頼が流されて行ってしまうという課題がありました。しかし、依頼をNotionのDBに貯め込むように連携してから劇的に依頼の見落としが減少しました。
Zapierを用いたSlackとNotion連携

Zapierすげ〜

ニフティには、業務に関連する書籍購入費用の一部または全額を会社が負担してくれる書籍購入補助制度というものがあります。
さらにこの制度を利用して購入した書籍を管理するbotがあり、このbotはDynamoDBに書籍データや感想を保持するようになっています。このDynamoDBに貯め込んだデータを社員が自由に閲覧できるように、Notionに連携させることにしました。
さすがにDynamoDBはZapierではできないだろうな・・・と思いました?思いましたよね?
実は・・・できるんです!
https://zapier.com/apps/dynamodb/integrations

※Premium機能のため契約プランによっては使用不可

つくり方

あらかじめDynamoDBを用意しておく

ZapierでDynamoDBを扱うとき、新しく追加されたアイテムを探すために以下の条件の主キーまたはローカルセカンダリインデックスを含む必要があります。
  • UNIXタイムスタンプを含む
  • number型
条件に合致するインデックスがない場合、プライマリキーとしてidを含む最短の名前のインデックスを使用しますが、こちらもnumber型である必要があります。 https://zapier.com/help/doc/how-get-started-dynamodb

どれも無い場合はDynamoDBの該当テーブルにUNIXタイムスタンプを格納するためのカラムを作成し、以下のようなローカルセカンダリインデックスを作成します。

Zapsを作成する

  1. Zapsの「Create Zap」から新規作成します。
  2. TriggerからDynamoDBを選択します。
  3. Trigger Eventとして新規アイテムか新規テーブルを選択できるので、今回は新規アイテムを選択します。
  4. DynamoDBにアクセスするためのアカウント(IAMユーザー)を要求されるので、「Connect a new account」を選択しましょう。
    • AWSコンソールを開き、使用したいDynamoDBがあるAWSアカウントのIAMユーザーを新規作成し、アクセス権限には以下の2つをアタッチします。
      • AmazonSQSFullAccess:Zapierがトリガーを検知するために必要
      • AmazonDynamoDBFullAccess:ZapierがDynamoDBのデータを取得するために必要
    • Zapierの画面に戻り、先ほど作成したIAMユーザーのリージョン、アクセスキー、シークレットキーを入力し、「Yes, Continue」で元の画面に戻ります。
    • Amazon DynamoDB accountの「Choose an account…」のプルダウンに先ほど追加したアカウントが現れるので、選択します。
  5. トリガーを設定します。Tableには検知するテーブル名、Timestamp Fieldにはタイムスタンプに該当するカラムを指定します。
  6. Testトリガーを動かす前に、AWSコンソール上などから適当にテスト用のアイテムを追加します。追加した後にテストトリガーを動かすとDynamoDBのデータが取れていることが確認できます。
  7. 取得したデータをNotionのデータベースに追加していきます。 ActionにNotionを追加し、「Create Database Item」を選択します。
  8. 今回追加したいNotion データベースにのみアクセスできる権限をつけたアカウントを作成し、選択します。
  9. 作成するNotionデータベースアイテムにDynamoDBで取得したデータを入れ込んでいきます。
    「プロパティの種類」にユーザーを指定している箇所にユーザーを入れたい場合は、DynamoDBに保存しているユーザー名とNotion上のユーザー名が一致している必要があります。
これでDynamoDBとNotionデータベースを連携させることができるようになりました!
間に「Only continue if…」というフィルターアクションを挟むと条件に合致したものだけをNotionに反映させることができます。

ただ、このままでは以下のような問題点があります。
  • DynamoDBのレコードが更新された時にもトリガーしたいが、レコード作成のみしかトリガーできない
  • DyanamoDBに保持しているユーザー名(Slackユーザー名)とNotionのユーザー名の形式が完全一致していないとプロパティに指定できない
このように細かいハンドリングをするためにはコードを書く必要がありますが、こちらについては追々後編記事にて紹介します。

おわりに

Zapierが優秀すぎて、着々とノーコード化が進んでしまいますね。社内でも着々とZapierを用いた業務改善が行われています。
後編記事で詳細を書きますが、やはりZapierを使わないでNotionとDynamoDBを連携しようとするとLambdaとDynamoDB Streamなどを使って組んでいくことになり、コストやコード管理なども考える必要が出てくるのでお手軽ではないと感じます。
DynamoDBをNotionと連携したいんだよなーと考えている方がいたら、是非Zapierの連携も試してみてください!

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!