MySQL データベースでの CRUD オペレーションの実行
このチュートリアルでは、サンプル統合から MySQL データベース インスタンスに接続し、MySQL データベース テーブルに対して取得、作成、更新、削除オペレーションを行う方法について説明します。
このチュートリアルを完了するには、次のタスクを行います。
- MySQL サーバーでデータベースとテーブルを設定する
- MySQL 接続を作成する
- MySQL 接続を使用するように統合を構成する
- 統合をテストする
- MySQL データベース テーブルにその他のオペレーションを実行する
始める前に
- 統合へのアクセス権があることを確認します。
-
Google Cloud プロジェクトで次の操作を行います。
- 接続の作成に使用するサービス アカウントに次のロールを付与します。
roles/secretmanager.viewer
roles/secretmanager.secretAccessor
- 次のサービスを有効にします。
secretmanager.googleapis.com
(Secret Manager API)connectors.googleapis.com
(Connectors API)
以前にプロジェクトでこうしたサービスを有効にしていない場合は、[接続を作成] ページで接続を作成するときに有効にするよう求められます。
- 接続の作成に使用するサービス アカウントに次のロールを付与します。
- データベースの作成に使用できる MySQL サーバーにアクセスできることを確認します。
MySQL サーバーでデータベースとテーブルを設定する
MySQL サーバーに接続し、このチュートリアルで使用するデータベースとテーブルを作成します。-
MySQL サーバーに接続するには、MySQL クライアントがインストールされているシステムから次のコマンドを実行します。
mysql --host=MySQL server host name or IP address --port=MySQL server port number -uusername -ppassword
この例では、次のように置き換えます。-
MySQL server host name or IP address
: MySQL サーバーの名前または IP アドレス。 -
MySQL server port number
: MySQL サーバーのポート番号。 -
username
: MySQL サーバーのユーザー名。 -
password
: MySQL サーバーのパスワード。
-
-
このチュートリアルで使用する MySQL データベースを作成するには、MySQL クライアントから次のコマンドを実行します。
CREATE DATABASE tutorialDB;
-
このチュートリアルで使用するテーブルを作成するには、MySQL クライアントから次のコマンドを実行します。
create table employee ( employee_id int auto_increment primary key, employee_first_name varchar(500) NOT null, employee_last_name varchar(500) NOT null, employee_emailID varchar(500) );
-
作成した
employee
テーブルに行を追加するには、MySQL クライアントから次のコマンドを実行します。INSERT INTO employee (employee_first_name,employee_last_name,employee_emailID) values ("Peter","Dilliard","test-01@test.com"); INSERT INTO employee (employee_first_name,employee_last_name,employee_emailID) values ("Meaghan","Webb","test-02@test.com");
- 次のコマンドを実行して、テーブルが作成され、行が追加されていることを確認します。
SELECT * FROM employee;
次のテーブル行が表示されます。+-------------+---------------------+--------------------+------------------+ | employee_id | employee_first_name | employee_last_name | employee_emailID | +-------------+---------------------+--------------------+------------------+ | 1 | Peter | Dilliard | test-01@test.com | | 2 | Meaghan | Webb | test-02@test.com | +-------------+---------------------+--------------------+------------------+
MySQL 接続を作成する
統合で MySQL データベースに接続できるようにするには、MySQL データベースへの新しい接続を作成します。
- [+ 新規作成] をクリックして [接続を作成] ページを開きます。
- [ロケーション] ステップで、接続のロケーションを選択します。
- [リージョン] リストから、接続を作成するリージョンを選択します。
サポートされているすべてのリージョンの一覧については、ロケーションをご覧ください。
- [次へ] をクリックします。
- [リージョン] リストから、接続を作成するリージョンを選択します。
- [接続の詳細] セクションに、次の詳細を入力します。
- [コネクタ] リストから [MySQL(プレビュー)] を選択します。
- [Connector version] リストから、コネクタのバージョンを選択します。
- [接続名] フィールドに、接続インスタンスの名前を入力します。
接続名は次の条件を満たす必要があります。
- 英字、数字、ハイフンを使用してください。
- 英字は小文字のみを使用できます。
- 名前の先頭は英字、末尾は英字または数字にします。
- 名前は 63 文字以下で指定してください。
- 省略可: [説明] フィールドに、接続インスタンスの説明を追加します。
- 省略可: Cloud Logging を有効にします。
- [サービス アカウント] リストから、必要なロールを持つサービス アカウントを選択します。
- [データベース名] フィールドに、MySQL データベースの名前を入力します。
- 必要に応じて、接続ノードの設定を構成します。
- ノードの最小数: 接続ノードの最小数を入力します。
- ノードの最大数: 接続ノードの最大数を入力します。
ノードは、トランザクションを処理する接続の単位(またはレプリカ)です。1 つの接続でより多くのトランザクションを処理するには、より多くのノードが必要になります。逆に、より少ないトランザクションを処理するには、より少ないノードが必要になります。ノードがコネクタの料金に与える影響については、接続ノードの料金をご覧ください。値を入力しない場合は、デフォルトで最小ノード数は 2 に設定され(可用性を高めるため)、最大ノード数は 50 に設定されます。
- プロキシを使用: このチェックボックスを選択して、接続用のプロキシ サーバーを構成し、次の値を構成します。
-
Proxy Auth Scheme: プロキシ サーバーで認証する認証タイプを選択します。次の認証タイプがサポートされています。
- 基本: 基本的な HTTP 認証。
- ダイジェスト: ダイジェスト HTTP 認証。
- Proxy User: プロキシ サーバーでの認証に使用されるユーザー名。
- プロキシ パスワード: ユーザーのパスワードの Secret Manager シークレット。
-
Proxy SSL Type: プロキシ サーバーへの接続時に使用する SSL タイプ。次の認証タイプがサポートされています。
- 自動: デフォルトの設定。URL が HTTPS URL の場合は、[トンネル] オプションが使用されます。URL が HTTP URL の場合、[なし] オプションが使用されます。
- 常に: 接続は常に SSL 対応です。
- なし: 接続は SSL に対応していません。
- トンネル: 接続はトンネリング プロキシ経由で行われます。プロキシ サーバーがリモートホストへの接続を開き、トラフィックはプロキシを経由するようになります。
- [Proxy Server] セクションで、プロキシ サーバーの詳細を入力します。
- [+ 宛先を追加] をクリックします。
- [宛先の種類] を選択します。
- Host address: 宛先のホスト名または IP アドレスを指定します。
バックエンドへのプライベート接続を確立する場合は、次のようにします。
- PSC サービス アタッチメントを作成します。
- エンドポイント アタッチメントを作成し、続いて [Host address] フィールドにあるエンドポイント アタッチメントの詳細を入力します。
- Host address: 宛先のホスト名または IP アドレスを指定します。
- 省略可: 接続にラベルを追加するには、[+ラベルを追加] をクリックします。
- [次へ] をクリックします。
- [宛先] セクションに、接続するリモートホスト(バックエンド システム)の詳細を入力します。
- [宛先の種類] リストからホストアドレスを選択します。
- リストから [ホストアドレス] を選択して、宛先のホスト名または IP アドレスを指定します。
- バックエンド システムへのプライベート接続を確立する場合は、リストからエンドポイント アタッチメントを選択し、次にエンドポイント アタッチメントリストから必要なエンドポイント アタッチメントを選択します。
セキュリティをさらに強化してバックエンドシステムへのパブリック接続を確立する場合は、接続用の静的アウトバウンド IP アドレスの構成を検討してから、特定の静的 IP アドレスのみを許可リストに登録するようファイアウォール ルールを構成します。
他の宛先を入力するには、[+ 宛先を追加] をクリックします。
- [次へ] をクリックします。
- [宛先の種類] リストからホストアドレスを選択します。
- [認証] セクションで、認証情報を指定できます。
- [ユーザー名] フィールドに、接続に使用する MySQL ユーザー名を入力します。
- [パスワード] フィールドに、MySQL ユーザー名に関連付けられたパスワードを含む Secret Manager シークレットを入力します。
- 以前に作成したシークレットがリストにない場合は、[シークレットを手動で入力] を選択します。[リソース ID による Secret の追加] ダイアログで、Secret Manager からリソース ID をコピーして貼り付けます。
- 最新バージョンを使用するには、親シークレットからリソース ID をコピーして
"projects/project-number/secrets/secret-name"
の形式で貼り付けます。 - 特定のバージョンを選択するには、特定バージョンのリソース ID をコピーして
"projects/project-number/secrets/secret-name/versions/1"
の形式で貼り付けます。
シークレットを追加するには、[シークレットの追加] をクリックします。
- 最新バージョンを使用するには、親シークレットからリソース ID をコピーして
- MySQL で使用するためのシークレットを作成していない場合は、[新しいシークレットを作成] をクリックします。[シークレットの作成] ダイアログで、次の詳細を入力します。
- [名前] フィールドに、シークレットの名前を入力します。
- [シークレットの値] フィールドに、シークレットの内容を入力するか、シークレットを含むファイルをアップロードします。
- [シークレットの作成] をクリックします。
- 以前に作成したシークレットがリストにない場合は、[シークレットを手動で入力] を選択します。[リソース ID による Secret の追加] ダイアログで、Secret Manager からリソース ID をコピーして貼り付けます。
- [シークレット バージョン] プルダウンの使用可能なバージョンのリストからパスワード シークレットのバージョンを選択します。
- [次へ] をクリックします。
- [確認] セクションで、接続と認証の詳細を確認します。
- [作成] をクリックします。
認証を構成する
使用する認証に基づいて詳細を入力します。
- ユーザー名とパスワード
- ユーザー名: 接続に使用する Mysql ユーザー名。
- パスワード: Mysql ユーザー名に関連付けられたパスワードを含む Secret Manager のシークレット。
MySQL 接続を使用するように統合を構成する
統合で作成した MySQL 接続を使用するには、統合に API トリガーとともにコネクタ タスクを追加します。API トリガーは、Edge 接続を使用してコネクタ タスクに接続します。
新しい統合を作成する
- Google Cloud コンソールで、[Integration Connectors] ページに移動します。
- ナビゲーション メニューで [統合] をクリックします。
[統合リスト] ページが表示されます。
- 既存の統合を選択するか、[CREATE INTEGRATION] をクリックして新しい統合を作成します。
これにより、統合エディタページで統合が開きます。
- 統合エディタで、[+ Add a task/trigger] > [Tasks] をクリックして使用可能なタスクのリストを表示します。
- [CREATE NEW] をクリックします。
- [Create Integration] ダイアログに名前と説明(省略可)を入力します。
- [Create] をクリックしてインテグレーション デザイナーを開きます。
API トリガーを追加して構成する
統合に API トリガーを追加して構成するには、次のようにします。
- 統合エディタで、[タスク / トリガーを追加] > [トリガー] を選択して、使用可能なトリガーのリストを表示します。
- [API Trigger] 要素を統合エディタにドラッグします。
コネクタタスクを追加して構成する
employee
テーブルのすべてのエンティティを一覧表示するようにコネクタタスクを構成するには、次の操作を行います。
- 統合エディタで [+ Add a task/trigger] > [Tasks] の順に選択して、利用可能なタスクのリストを表示します。
- Connectors 要素を統合エディタにドラッグします。
- デザイナーで [Connectors] タスク要素をクリックして、タスク構成ペインを表示します。
- [Configure task] をクリックします。
[Configure connector task] ダイアログが表示されます。
- [Configure connector task] ダイアログで、次の操作を行います。
- MySQL 接続を作成した接続リージョンを選択します。
- リージョンを選択すると、[Connection] 列が表示されます。使用可能な接続のリストから、作成した MySQL 接続を選択します。
- 接続を選択すると、[タイプ] 列が表示されます。[Entities] を選択し、使用可能なエンティティのリストから [employee] を選択します。
- タイプが選択されると、[Operation] 列が表示されます。[List] を選択します。
- [Done] をクリックして接続の構成を完了し、ダイアログを閉じます。
API トリガー要素をコネクタタスク要素に接続する
次に、エッジ接続を追加して、API トリガーをコネクタタスクに接続します。エッジ接続は、統合の 2 つの要素間の接続です。エッジとエッジの条件の詳細については、エッジをご覧ください。
エッジ接続を追加するには、API Trigger 要素の下部にある [Fork] コントロール ポイントをクリックします。Connectors task 要素の上部にある [Join] コントロール ポイントでエッジ接続をドラッグ&ドロップします。
統合をテストする
統合をテストするには、次の手順を行います。
- 統合エディタのツールバーで、[Test] ボタンをクリックします。
- 必要に応じて [Execution Deadline (in minutes)] の値を変更し、[Test Integration] をクリックします。
- 統合が正常に完了すると、[Test Integration] ペインに「Integration execution succeeded」というメッセージが表示されます。ログを表示するには、[View logs] をクリックします。
- [Response Parameters] の [Connector output payload] に次の出力が表示されます。
[ { "employee_id": 1.0, "employee_first_name": "Peter", "employee_last_name": "Dilliard", "employee_emailID": "test-01@test.com" }, { "employee_id": 2.0, "employee_first_name": "Meaghan", "employee_last_name": "Webb", "employee_emailID": "test-02@test.com" } ]
MySQL データベース テーブルにその他のオペレーションを実行する
統合でコネクタタスクを構成するときに、次のいずれかのオペレーションを選択できます。
- List
- Get
- 作成
- 更新
- Delete
List オペレーションを使用して employee
テーブルのすべての行を表示しました。このチュートリアルの以降のセクションでは、Get、Create、Update、Delete の各オペレーションを使用して、employee
テーブルの行を追加、変更、削除します。
テーブルから行を取得する
フェッチする行のエンティティ ID(または主キー)がわかっている場合は、その値を統合の Get オペレーションの入力として指定します。Get オペレーションによって返される詳細は、List オペレーションによって返される詳細と類似しています。List オペレーションは指定されたクエリに一致するすべてのテーブル行の詳細を取得しますが、Get オペレーションは指定されたエンティティ ID に一致するテーブル行の詳細のみを取得します。
List オペレーションではテーブル内のすべての行がデフォルトで返されますが、Get オペレーションでは検索パラメータとしてエンティティ ID が必要です。したがって、Get オペレーションを使用するには、取得する行のエンティティ ID を確認するか、エンティティ ID のデフォルト値を指定する必要があります。
指定した行の詳細を取得するには、前の手順で作成したコネクタタスクを構成します。
- デザイナーで [Connectors] タスク要素をクリックして、タスク構成ペインを表示します。
- [Configure task] をクリックします。
[Configure connector task] ダイアログが表示されます。
- [Configure connector task] ダイアログの [Operation] 列で [Get] を選択してから、[Done] をクリックします。
- タスク構成ペインの [Task Input] で、[Entity ID] をクリックします。
- [Configure Variable] ダイアログで、[Use as an input to integration] を選択し、[Save] をクリックします。
- 統合エディタのツールバーで、[Test] ボタンをクリックします。
- 必要に応じて、[Execution Deadline (in minutes)] の値を変更します。
- 詳細を取得するエンティティのエンティティ ID を入力します。「2」と入力します。
- [Test Integration] をクリックします。
- 統合が正常に完了すると、[Test Integration] ペインに「Integration execution succeeded」というメッセージが表示されます。ログを表示するには、[View logs] をクリックします。
- [Response Parameters] の [Connector output payload] に次の出力が表示されます。
[ { "employee_id": 2.0, "employee_first_name": "Meaghan", "employee_last_name": "Webb", "employee_emailID": "test-02@test.com" } ]
- ここに表示される情報が、MySQL テーブルの対応する行の情報と一致していることを確認します。MySQL テーブルでこの情報を表示するには、MySQL クライアントから次のコマンドを実行します。
SELECT * FROM employee WHERE employee_id=2;
次のテーブル行が表示されます。+-------------+---------------------+--------------------+------------------+ | employee_id | employee_first_name | employee_last_name | employee_emailID | +-------------+---------------------+--------------------+------------------+ | 2 | Meaghan | Webb | test-02@test.com | +-------------+---------------------+--------------------+------------------+
テーブルに行を追加する
Create オペレーションを使用すると、テーブルに行を追加できます。Create オペレーションを使用する場合は、コネクタ入力ペイロードでエンティティのすべての値を指定する必要があります。
Create オペレーションを使用して行を追加するには、前の手順で作成したコネクタタスクを構成します。
- デザイナーで [Connectors] タスク要素をクリックして、タスク構成ペインを表示します。
- [Configure task] をクリックします。
[Configure connector task] ダイアログが表示されます。
- [Configure connector task] ダイアログの [Operation] 列で [Create] を選択してから、[Done] をクリックします。
- タスク構成ペインの [Task Input] で、[Connector input payload] をクリックします。
- [Configure Variable] ダイアログで、[Use as an input to integration] を選択し、[Save] をクリックします。
- 統合エディタのツールバーで、[Test] ボタンをクリックします。
- 必要に応じて、[Execution Deadline (in minutes)] の値を変更します。
- 作成するエンティティの詳細を入力します。たとえば、
employee
テーブルに新しい従業員を追加するには、次の JSON を入力します。{ "employee_first_name": "Mary", "employee_last_name": "Smith", "employee_emailID": "test-03@test.com" }
- [Test Integration] をクリックします。
- 統合が正常に完了すると、[Test Integration] ペインに「Integration execution succeeded」というメッセージが表示されます。ログを表示するには、[View logs] をクリックします。
- [Response Parameters] の [Connector input payload] で、指定したペイロードが表示されます。
{ "employee_first_name": "Mary", "employee_last_name": "Smith", "employee_emailID": "test-03@test.com" }
[Connector output payload] で、エンティティ ID が出力として表示されます。{ "employee_id": 3.0 }
-
MySQL テーブルで行が追加されたことを確認できます。MySQL テーブルでこの情報を表示するには、MySQL クライアントから次のコマンドを実行します。
SELECT * FROM employee;
次のテーブル行が表示されます。+-------------+---------------------+--------------------+------------------+ | employee_id | employee_first_name | employee_last_name | employee_emailID | +-------------+---------------------+--------------------+------------------+ | 1 | Peter | Dilliard | test-01@test.com | | 2 | Meaghan | Webb | test-02@test.com | | 3 | Mary | Smith | test-03@test.com | +-------------+---------------------+--------------------+------------------+
テーブル内の行を更新する
Update オペレーションを使用して、テーブル行の値を変更します。たとえば、このオペレーションを使用して、employee
テーブル内の従業員のメール ID を更新できます。更新するエンティティを指定するには、Get オペレーションの場合と同様にエンティティ ID を指定します。また、フィルタ句パラメータを使用して、テーブル行のフィルタ値を渡すことができます。これは、特定の検索条件に基づいて複数の行で同じ変更を行う場合に便利です。
テーブル行を更新するには、次の手順を行い、前に作成したコネクタタスクを構成します。
- デザイナーで [Connectors] タスク要素をクリックして、タスク構成ペインを表示します。
- [Configure task] をクリックします。
[Configure connector task] ダイアログが表示されます。
- [Configure connector task] ダイアログの [Operation] 列で [Update] を選択してから、[Done] をクリックします。
- タスク構成ペインの [Task Input] で、[Connector input payload] をクリックします。
- [Configure Variable] ダイアログで、[Use as an input to integration] を選択し、[Save] をクリックします。
- 次に、タスク構成ペインの [Task Input] で [Filter clause] をクリックします。
- [Configure Variable] ダイアログで、[Use as an input to integration] を選択し、[Save] をクリックします。
- 統合エディタのツールバーで、[Test] ボタンをクリックします。
- 必要に応じて、[Execution Deadline (in minutes)] の値を変更します。
- フィルタ条件を入力します。たとえば、メールアドレス ID が
test-03@test.com
である従業員を検索するには、次のように入力します。employee_emailID="test-03@test.com"
- 更新する値だけを入力します。たとえば、
employee
テーブル内のすべての従業員のうち、現在のメール ID がフィルタ句test-03@test.com
と一致する従業員のメール ID を更新するには、次の JSON を入力します。{ "employee_emailID": "msmith@test.com" }
- [Test Integration] をクリックします。
- 統合が正常に完了すると、[Test Integration] ペインに「Integration execution succeeded」というメッセージが表示されます。エンティティが更新されたことを確認するには、Get オペレーションを使用して、指定したエンティティの詳細を取得します。
- MySQL テーブルで行が更新されたことを確認します。MySQL テーブルでこの情報を表示するには、MySQL クライアントから次のコマンドを実行します。
SELECT * FROM employee;
次のテーブル行が表示されます。+-------------+---------------------+--------------------+------------------+ | employee_id | employee_first_name | employee_last_name | employee_emailID | +-------------+---------------------+--------------------+------------------+ | 1 | Peter | Dilliard | test-01@test.com | | 2 | Meaghan | Webb | test-02@test.com | | 3 | Mary | Smith | msmith@test.com | +-------------+---------------------+--------------------+------------------+
テーブルの行を削除する
Delete オペレーションを使用すると、テーブルの 1 つ以上の行を削除できます。エンティティ ID を指定するか、フィルタ句を使用して、削除する行を指定します。フィルタ句を使用して削除する行の条件を指定すると、そのフィルタに一致する複数の行を削除できます。特定の行のみを削除する場合は、エンティティ ID を使用します。
エンティティ ID を使用してテーブル行を削除するには、前の手順で作成したコネクタタスクを構成します。
- デザイナーで [Connectors] タスク要素をクリックして、タスク構成ペインを表示します。
- [Configure task] をクリックします。
[Configure connector task] ダイアログが表示されます。
- [Configure connector task] ダイアログの [Operation] 列で [Delete] を選択してから、[Done] をクリックします。
- タスク構成ペインの [Task Input] で、[Entity ID] をクリックします。
- [Configure Variable] ダイアログで、[Use as an input to integration] を選択し、[Save] をクリックします。
- 統合エディタのツールバーで、[Test] ボタンをクリックします。
- 必要に応じて、[Execution Deadline (in minutes)] の値を変更します。
- 削除するテーブル行のエンティティ ID を入力します。「3」と入力します。
- [Test Integration] をクリックします。
-
統合が正常に完了すると、[Test Integration] ペインに「Integration execution succeeded」というメッセージが表示されます。テーブルの行が削除されたことを確認するには、Get オペレーションを使用して、削除した行の詳細を取得します。指定したエンティティ ID に対してエラーが返されます。
また、List オペレーションを使用して、削除したテーブル行(複数可)をフィルタ句に指定します。残りの行のリストが返されます(リストが空の場合もあります)。
たとえば、エンティティ ID が 3 のテーブル行を削除した場合、フィルタ句
employee_emailID="msmith@test.com"
またはエンティティ ID 3 を List オペレーションに指定すると、ログのレスポンス パラメータは[]
を表示します。 -
MySQL テーブルで行が削除されたことを確認します。MySQL テーブルでこれを確認するには、MySQL クライアントから次のコマンドを実行します。
SELECT * FROM employee;
次のテーブル行が表示されます。+-------------+---------------------+--------------------+------------------+ | employee_id | employee_first_name | employee_last_name | employee_emailID | +-------------+---------------------+--------------------+------------------+ | 1 | Peter | Dilliard | test-01@test.com | | 2 | Meaghan | Webb | test-02@test.com | +-------------+---------------------+--------------------+------------------+