Data Cloud と AWS Aurora MySQL の連携を試してみた
はじめに(TL;DR)
Salesforce Data Cloud(以下、Data Cloud)には数多くのコネクターが提供されています。最近、AWS Aurora MySQL(以下、MySQL)との連携を試す機会がありましたので、その際の設定手順をご紹介します。
AWS Aurora MySQLとの連携について
AWS Aurora MySQLと連携するにはMySQLコネクターを利用します。MySQLコネクターと言っても、全てのMySQLをサポートするわけではなく、AWSおよびAzure上でPaaSとして提供されているMySQLに限られ、オンプレやIaaS上にインストールされたMySQLは対応していません。詳細はこちらのページを参照してください。
上記ページのタイトルに「MySQL Connectors (Beta)」とあるように、このコネクターは現在ベータ提供の状況で、製品サポートによる正式な支援は提供されていません。コネクターについてご質問やフィードバックがある場合は、同ページに記載されているData Cloudコネクターチームのメールアドレスにお問い合わせください。
また、こちらのページにあるように、AWS Aurora MySQLは「Data In」(MySQLからのデータの取り込み)のみに対応しています。「Data Out」(MySQLへのデータの書き込み)は対応していませんのでその点ご注意ください。
MySQL側の設定
ではここから設定手順を説明します。まず、AWS Aurora MySQL側の設定です。
設定はこちらのページを参考にしました。一部異なる設定にした部分もあるので、その部分を重点的に説明します。
MySQLインスタンスの作成
まず、MySQLインスタンスを作成します。AWS Aurora MySQLはRDSのカテゴリに含まれるので、AWS管理コンソールの検索フィールドに「RDS」と入力し、「RDS」を選択します。
左側のメニューから「データベース」を選択すると、遷移後の画面右端付近に「データベースの作成」というボタンがあるので、それをクリックします。
「データベースの作成」とありますが、実際はMySQLのインスタンスが作成され、その中に既定のデータベースがいくつか作成されます。
今回は検証用ということもあり、下記の設定とし、その他については前述のページと同じか、そのページにも記載がなければデフォルトのままにしました。
「パブリックアクセス」は必ず「あり」を選択してください。これが無いと、外部のアプリケーションからMySQLに対してアクセスできなくなってしまいます。
・エンジンのタイプ:「Aurora (MySQL Compatible)」
・エンジンバージョン:「Aurora MySQL 3.08.0(compatible with MySQL 8.0.39)」
・テンプレート:「開発/テスト」
・認証情報管理:「セルフマネージド」
・インスタンスの設定:「Serverless v2」
・可用性と耐久性:「Aurora レプリカを作成しない」
ネットワークの通信制御の設定
Data CloudからMySQLに接続する場合、外部からの接続となるため、アウトバウンド(外部から)のアクセスを許可するための設定を行います。
Data CloudのIPアドレスは「Data Cloud設定」画面にて確認できます。
例えば、下図の場合、赤枠の「ホーム組織インスタンス」の部分を見ると、「CDP2-AWS-PROD1-USEAST1」とあるので、このData Cloudインスタンスは「CDP2」、AWSのus-east1リージョンであることがわかります。
次に、こちらのページ上にある表を参照して、「AWS Region」と「VPCE ID」が該当するレコードの「Source IP Addresses」に記載されているIPアドレスがあなたが利用しているData CloudのIPアドレスになります。このIPがMySQLへの接続元のIPということになります。
Data CloudのIPアドレスが取得できたので、それをMySQLのセキュリティグループに設定します。
セキュリティグループは、AWSのサービス毎に設定できる通信制御の機能です。通信の方向には外から内(インバウンド)と内から外(アウトバウンド)の設定があります。今回はData CloudからMySQLのアクセスなので、インバウンドの方に設定します。
CloudShell VPC環境の作成
今回、AWS管理コンソール上のCloudShellを利用してMySQLインスタンスに接続し、後続の作業を行いたいと思います。そのためにはMySQLインスタンスに接続できるVPC環境を作成する必要があります。
AWS管理コンソールの上部にあるコマンド画面のアイコンをクリックすると、画面の下側にCloudShellの画面が表示されるので、右側の「アクション」から「Create VPC Environment(max 2)」を選択します。
VPCの名前(任意)、VPC、Subnet、Security groupを指定して、「Create」ボタンをクリックします。
すると、処理が始まって1分ほどすると、先ほど指定した名前のタブの中にプロンプトが表示され、MySQLに対してコマンドを実行する環境ができました。
データベースやテーブルの作成
まず、MySQLインスタンスに接続します。
~ $ mysql -h database-1.xxxxxxxxxx.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 112008
Server version: 8.0.39 2f855dc7
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
接続できたら、MySQLでデータベースを作成します。
MySQL [(none)]> CREATE DATABASE TESTDB1;
Query OK, 1 row affected (0.047 sec)
データベースが作成できたら、念の為確認します。
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| TESTDB1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.056 sec)
データベースに接続します。MySQLではUSEコマンドを利用します。接続できたら、MySQL[(none)]のカッコにデータベース名が入ります。
MySQL [(none)]> use TESTDB1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
連携対象のテーブルを作成します。
MySQL [TESTDB1]> create table T1 (c1 int, c2 char(10), c3 varchar(10));
Query OK, 0 rows affected (0.571 sec)
テーブルをリストしてみます。
List tables
MySQL [TESTDB1]> show tables;
+-------------------+
| Tables_in_TESTDB1 |
+-------------------+
| T1 |
+-------------------+
1 row in set (0.002 sec)
テーブルに数件データを挿入します。最後のINSERT文は桁溢れのため、入りきらない部分は削除されているので警告が出ています。
MySQL [TESTDB1]> insert into T1 values (1, 'ABC', 'abc');
Query OK, 1 row affected (0.007 sec)
MySQL [TESTDB1]> insert into T1 values (2, 'あいう', 'アイウ');
Query OK, 1 row affected (0.011 sec)
MySQL [TESTDB1]> insert into T1 values (3, 'あいうえお', 'アイウエオ');
Query OK, 1 row affected (0.006 sec)
MySQL [TESTDB1]> insert into T1 values (4, 'あいうえおかきくけこ', 'アイウエオアイウエオ');
Query OK, 1 row affected (0.006 sec)
MySQL [TESTDB1]> insert into T1 values (5, 'あいうえおかきくけこさしすせそ', 'アイウエオアイウエオサシスセソ');
Query OK, 1 row affected, 2 warnings (0.011 sec)
最後に、テーブルにクエリを実行して、データを確認します。最後の2行のC2, C3は同じになっています。これは列に入りきらないデータがレコードの挿入時に削除されたためです。
MySQL [TESTDB1]> select * from T1;
+------+--------------------------------+--------------------------------+
| C1 | C2 | C3 |
+------+--------------------------------+--------------------------------+
| 1 | ABC | abc |
| 2 | あいう | アイウ |
| 3 | あいうえお | アイウエオ |
| 4 | あいうえおかきくけこ | アイウエオアイウエオ |
| 5 | あいうえおかきくけこ | アイウエオアイウエオ |
+------+--------------------------------+--------------------------------+
5 rows in set (0.003 sec)
Data Cloud側の設定
今回、Data Cloud上での作業は大きく以下の3点です。
・MySQLコネクタの設定
・データストリームの設定
・データの確認
MySQLコネクタの設定
Data Cloudがプロビジョンされている組織にログインし、アプリメニューから「Data Cloud」を選択します。
左側のメニューから「その他のコネクタ」を選択します。
「新規」ボタンをクリックします。
「AWS Aurora MySQL」を選択します。
ダイアログが表示されるので、必要な情報を記入します。
「ユーザ名」と「パスワード」はMySQLのユーザとパスワードです。AWSのユーザとは異なりますのでご注意ください。
「接続URL」はMySQLクラスタのエンドポイント、「データベース」には上で作成したデータベース名を指定します。
「接続をテスト」ボタンをクリックし、接続が成功した旨のメッセージが出たら、「保存」ボタンをクリックします。
データストリームの設定
Data Cloudのホーム画面上で「データストリーム」タブを選択し、「新規」ボタンをクリックすると、「新規データストリーム」ダイアログが表示されるので、「AWS Aurora MySQL」を選択し、「次へ」ボタンをクリックします。
ストリームの名前を指定し、上で作成したテーブルを選択し、「次へ」ボタンをクリックします。
カテゴリは「その他」にし、プライマリキーに「C1」を選択します。「次へ」ボタンをクリックします。
T1には差分を認識するためのタイムスタンプの列が無いので、「フル更新」一択になります。また、画面の下の方で連携スケジュールの設定ができますが、今回は「なし」のままにしておきます。
データの確認
連携されたデータを確認します。Data Cloudのホーム画面上で「データエクスプローラー」タブを選択し、「データスペース」、「オブジェクト」に必要な情報を設定します。MySQLでクエリした結果と同じデータが表示されたら正しくデータが連携されています。
まとめ
Data CloudからAWS Aurora MySQLへの接続方法をご紹介しました。ノーコード/ローコードで簡単にData Cloudにデータを連携できることがおわかりいただけたかと思います。
Data Cloudは他にも様々なコネクタを提供しているので、色々なシステムとの連携をお試しください。
※本記事は、私が所属する会社とは一切関係のない事柄です。
Discussion