🐲

Data Cloud と AWS Aurora MySQL の連携を試してみた

2025/01/31に公開

はじめに(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