[アップデート] Amazon AppFlow に新しいコネクタが追加されたので Google Calendar と JDBC コネクターを試してみた

2023.01.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon AppFlow がアップデートされ新しいコネクターが 10 追加されました。
re:Invent 2022 前後から AppFlow のコネクター追加がかなり進んでいて良い感じです。

今回追加されたコネクターは以下です。

ほとんどが送信元としてのみ利用が出来ますが、JDBC のみ送信先のみ指定出来て汎用的に利用出来るコネクターになっています。

今回は以下のように送信元に Google Calendar、送信先に JDBC として Azure Database for MySQL を指定して試してみました。

Google Calendar の接続設定

まず、以下を参考に Google Cloud での Google Calendar API を有効化し、OAuth クライアントの構成を行います。

OAuth クライアントではアプリケーションの種類に「ウェブアプリケーション」を選択し、承認済みのリダイレクト URL は AppFlow のリージョンに合わせたリダイレクト URI を指定します。
私は今回東京リージョンで構築したので、https://ap-northeast-1.console.aws.amazon.com/appflow/authとなります。

AppFlow コンソールで接続を構成する際に、クライアント ID とクライアントシークレットの入力が必要になるので、認証情報をダウンロードしておきます。

AppFlow コンソールでクライアント ID とシークレットを入力します。
アクセスタイプは本日時点では offline のみ選択出来ました。

接続するボタンを押すと、対象の Google アカウントの選択し、認可フローが発生するので許可操作を行います。

これで対象のクライアントが、選択した Google アカウントのカレンダー情報にアクセス出来る状態となりました。 AppFlow コンソール上で対象の Google Calendar オブジェクトを選択します。サポートされているオブジェクトはAccess Control List Rule, Calendar, Event, My Calendarです。

JDBC の接続設定

本日時点で JDBC コネクタでサポートされているドライバーは MySQL と PostgreSQL の 2 つです。最初 SQL Server いけるか?と思ったのですが本日時点ではダメそうでした。

パブリックアクセスを有効化した Azure Database for MySQL を作成しておきます。
AppFlow からはインターネット経路でのアクセスになるためパブリックアクセスが必要なのと、アクセス元の IP アドレスを意識する必要があります。
AppFlow のアクセス元の IP アドレス範囲は以下で説明されています。

MySQL サーバーが用意出来たら、AppFlow の送信先となるデータベースとテーブルを作成しておきます。
これらは自動で作成されないので事前準備が必要です。

% mysql -u hoge0124user -h hoge0124mysql.mysql.database.azure.com -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

:

mysql> create database hogedb;
Query OK, 1 row affected (0.07 sec)

mysql> use hogedb;
Database changed
mysql> create table hogetable (value1 TEXT, value2 TEXT, value3 TEXT);
Query OK, 0 rows affected (0.11 sec)

AppFlow コンソールでは通常の DB 接続に必要な情報を入力します。

接続に成功するとオブジェクトを選択することが出来ます。
オブジェクトがデータベースで、サブオブジェクトがテーブルとなっています。

マッピングとフィルタリング

送信元と送信先の構成が出来たら、両者のエンティティのフィールドマッピングを行います。
ここでは適当に用意した MySQL テーブルにあわせて情報が判別出来そうなそれっぽい文字列フィールドをいくつか選択しました。

また、初回試した際に結構な量のイベントがインポートされました。
ここでは AppFlow のフィルター機能を使って今週のイベントのみを取り込むように制御してみたいと思います。

トリガーはオンデマンドにしましたので、構成出来たらフローを実行しましょう。

フローの完了時間は取り込み件数やコネクターの種類によりますが、Google Calendar イベントが 100 件程度で 1 分程度、5000 件ほどでも 2~3 分でした。

完了後に MySQL のテーブルを確認してみるとイベントがレコードとして取り込まれていることが確認出来ました。(適当な文字列に変更しています)

mysql> select value1 from hogetable where value1 is not null limit 5;
+-----------------------------------------------------------------------+
| value1                                                                |
+-----------------------------------------------------------------------+
| aaaabbbbccccddddeeee1                                                 |
| aaaabbbbccccddddeeee2                                                 |
| aaaabbbbccccddddeeee3                                                 |
| aaaabbbbccccddddeeee4                                                 |
| aaaabbbbccccddddeeee5                                                 |
+-----------------------------------------------------------------------+
5 rows in set (0.03 sec)

さいごに

本日は Amazon AppFlow に新しいコネクタが追加されたので Google Calendar と JDBC コネクターを試してみました。

以前は他社の SaaS コネクターと比較すると Amazon AppFlow はサポート製品が少なめだと感じていましたが、最近かなりの数が追加されてきてなんだか存在感を増してきた気がします。

JDBC のような汎用コネクタが追加されたのも活用の幅が広がって良いですね。
JDBC 単体で見ると Glue でも良い気もしますが、サードパーティ SaaS と JDBC との接続で考えると AppFlow でのサポートはありがたいなと思いました。