Cloud SQL に接続する
BigQuery 管理者は、接続を作成して Cloud SQL データにアクセスできます。この接続により、データ アナリストは Cloud SQL のデータにクエリを実行できるようになります。Cloud SQL に接続する手順は次のとおりです。
始める前に
- Cloud SQL データベースを含むプロジェクトを選択します。
- BigQuery Connection API を有効にします。
- Cloud SQL インスタンスにパブリック IP 接続またはプライベート接続が設定されていることを確認します。
Cloud SQL インスタンスを保護するために、承認済みアドレスを使用せずにパブリック IP 接続を追加できます。これにより、公共のインターネットからインスタンスにアクセスできなくなりますが、BigQuery からはクエリを実行できます。
プライベート接続を介して BigQuery から Cloud SQL データにアクセスするには、新規または既存の Cloud SQL インスタンスのプライベート IP 接続を構成し、Google Cloud サービスのプライベート パスのチェックボックスをオンにします。このサービスは、Virtual Private Cloud 内のプライベート IP アドレスの代わりに、内部直接パスを使用します。
-
Cloud SQL 接続の作成に必要な権限を取得するには、そのプロジェクトで BigQuery Connection 管理者(
roles/bigquery.connectionAdmin
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
Cloud SQL 接続を作成する
ベスト プラクティスとして、Cloud SQL への接続時には、接続を使用してデータベース認証情報を処理します。接続は暗号化され、BigQuery Connection のサービスに安全に保存されます。ユーザー認証情報がソース内の他のデータに対して有効であれば、接続を再利用できます。たとえば、1 つの接続を使用して、同じ Cloud SQL インスタンスに存在する複数のデータベースにクエリを実行できる場合があります。
次のいずれかのオプションを選択して、Cloud SQL 接続を作成します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインで、
[データを追加] をクリックします。[データを追加] ダイアログで、[外部データソースへの接続] をクリックします。
[外部データソース] ペインで、次の情報を入力します。
- [接続タイプ] で、ソースのタイプ(MySQL、Postgres など)を選択します。
- [接続 ID] に、接続リソースの識別子を入力します。文字、数字、アンダースコアを使用できます。例:
bq_sql_connection
- [データのロケーション] で、外部データソースのリージョンと互換性のある BigQuery ロケーション(またはリージョン)を選択します。
- 省略可: [わかりやすい名前] に、わかりやすい接続名を入力します(例:
My connection resource
)。後で修正が必要になった場合、わかりやすい名前だと接続リソースを簡単に識別できます。 - 省略可: [説明] に、この接続リソースの説明を入力します。
- 省略可: 暗号化。顧客管理の暗号鍵(CMEK)を使用して認証情報を暗号化するには、[顧客管理の暗号鍵(CMEK)] を選択し、顧客管理の暗号鍵を選択します。選択しない場合、認証情報は Google が所有し、Google が管理するデフォルトの鍵によって保護されます。
- 接続タイプに Cloud SQL の MySQL または Postgres を選択した場合、[Cloud SQL 接続名] には完全な Cloud SQL インスタンスの名前を入力します(通常は
project-id:location-id:instance-id
の形式)。インスタンス ID は、クエリを実行する Cloud SQL インスタンスの詳細ページで見つけることができます。 - [データベース名] に、データベースの名前を入力します。
- [データベース ユーザー名] に、データベースのユーザー名を入力します。
[データベース パスワード] に、データベースのパスワードを入力します。
- 省略可: パスワードを表示するには、 [パスワードを表示] をクリックします。
[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
bq
bq mk
コマンドを入力して、接続フラグ --connection
を指定します。次のフラグも必要です。
--connection_type
--properties
--connection_credential
--project_id
--location
次のフラグは省略可能です。
--display_name
接続のわかりやすい名前。--description
接続の説明。
connection_id
は、コマンドの最後の引数として追加できるオプションのパラメータで、内部的な保存に使用されます。接続 ID を指定しない場合は、一意の ID が自動的に生成されます。connection_id
には文字、数字、アンダースコアを使用できます。
bq mk --connection --display_name='friendly name' --connection_type=TYPE \
--properties=PROPERTIES --connection_credential=CREDENTIALS \
--project_id=PROJECT_ID --location=LOCATION \
CONNECTION_ID
次のように置き換えます。
TYPE
: 外部データソースのタイプ。PROPERTIES
: JSON 形式で作成された接続のパラメータ。例:--properties='{"param":"param_value"}'
。接続リソースを作成するには、instanceID
、database
、type
パラメータを指定する必要があります。CREDENTIALS
: パラメータusername
とpassword
です。PROJECT_ID
: プロジェクト ID。LOCATION
: Cloud SQL インスタンスが配置されているリージョンです。CONNECTION_ID
: 接続 ID。
たとえば、次のコマンドを実行すると、ID federation-test
の付いたプロジェクトに my_new_connection(わかりやすい名前: 「My new connection」)という名前の接続リソースが新規に作成されます。
bq mk --connection --display_name='friendly name' --connection_type='CLOUD_SQL' \
--properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' \
--connection_credential='{"username":"myusername", "password":"mypassword"}' \
--project_id=federation-test --location=us my_connection_id
API
BigQuery Connection API では、ConnectionService
内で CreateConnection
を呼び出して接続をインスタンス化できます。詳しくは、クライアント ライブラリのページをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
サービス アカウントへのアクセスを許可する
プロジェクト内で Cloud SQL への最初の接続を作成すると、サービス アカウントが自動的に作成されます。サービス アカウントの名前は BigQuery Connection Service エージェントです。サービス アカウント ID を取得するには、接続の詳細を表示します。サービス アカウント ID は以下の形式です。
service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com
Cloud SQL に接続するには、新しい接続に Cloud SQL への読み取り専用アクセス権を付与し、BigQuery がユーザーに代わってファイルにアクセスできるようにする必要があります。このサービス アカウントには次の権限が必要です。
cloudsql.instances.connect
cloudsql.instances.get
接続に関連付けられているサービス アカウントに、これらの権限が割り当てられている Cloud SQL クライアント IAM ロール(roles/cloudsql.client
)を付与できます。サービス アカウントに必要な権限がすでにある場合は、この手順を省略できます。
コンソール
[IAM と管理] ページに移動します。
[
アクセス権を付与] をクリックします。[プリンシパルを追加] ダイアログが開きます。
新しいプリンシパル フィールドに、サービス アカウントの名前( BigQuery Connection Service エージェント、または接続情報から取得したサービス アカウント ID)を入力します。
[ロールを選択] フィールドで [Cloud SQL] を選択し、[Cloud SQL クライアント] を選択します。
[保存] をクリックします。
gcloud
gcloud projects add-iam-policy-binding
コマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:SERVICE_ACCOUNT_ID --role=roles/cloudsql.client
次の値を指定します。
PROJECT_ID
: Google Cloud プロジェクト ID。SERVICE_ACCOUNT_ID
: 接続情報から取得したサービス アカウント ID。
ユーザーと接続を共有する
次のロールを付与することで、ユーザーがデータをクエリして接続を管理できます。
roles/bigquery.connectionUser
: ユーザーが接続を使用して外部データソースに接続し、クエリを実行できるようにします。roles/bigquery.connectionAdmin
: ユーザーが接続を管理できるようにします。
BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続は、プロジェクトで外部接続というグループに一覧表示されます。
[エクスプローラ] ペインで、[プロジェクト名] > [外部接続] > [接続] の順にクリックします。
[詳細] ペインで、[共有] をクリックして接続を共有します。次に、以下の操作を行います。
[接続の権限] ダイアログで、プリンシパルを追加または編集して、他のプリンシパルと接続を共有します。
[保存] をクリックします。
bq
bq コマンドライン ツールを使用して接続を共有することはできません。接続を共有するには、Google Cloud コンソールまたは BigQuery Connections API メソッドを使用します。
API
BigQuery Connections REST API の projects.locations.connections.setIAM
メソッドを使用して、policy
リソースのインスタンスを指定します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次のステップ
- さまざまな接続タイプについて確認する。
- 接続の管理について確認する。
- 連携クエリについて確認する。
- Cloud SQL データのクエリを実行する方法を確認する。