Google Cloud SQL 連線¶
gcpcloudsql:// 連線被 airflow.providers.google.cloud.operators.cloud_sql.CloudSQLExecuteQueryOperator 使用,用於在 Google Cloud SQL 資料庫上執行查詢。Google Cloud SQL 資料庫可以是 Postgres 或 MySQL,因此這是一種“元”連線型別。它為 MySQL 和 Postgres 引入了通用模式,包括應使用何種連線型別。Google Cloud SQL 支援透過公網 IP 或透過 Cloud SQL Proxy 進行連線。在後一種情況下,CloudSQLHook 使用 CloudSqlProxyRunner 自動準備和使用臨時的 Postgres 或 MySQL 連線,該連線將使用代理進行連線(可透過 TCP 或 UNIX socket)。
配置連線¶
- 主機 (必填)
要連線的主機。
- 模式 (可選)
指定要在資料庫中使用的模式名稱。
- 登入名 (必填)
指定要連線的使用者名稱。
- 密碼 (必填)
指定要連線的密碼。
- Extra 引數 (可選)
指定可在 Google Cloud SQL 連線中使用的額外引數(作為 JSON 字典)。
extra欄位支援的所有引數的詳細資訊可在CloudSQLHook中找到。“extras” 欄位示例
{ "database_type": "mysql", "project_id": "example-project", "location": "europe-west1", "instance": "testinstance", "use_proxy": true, "sql_proxy_use_tcp": false }
當將連線指定為 URI(在
AIRFLOW_CONN_{CONN_ID}變數中)時,您應遵循標準的資料庫連線語法進行指定,其中 extra 引數作為 URI 的引數傳遞。請注意,URI 的所有組成部分都應進行 URL 編碼。例如
export AIRFLOW_CONN_GOOGLE_CLOUD_SQL_DEFAULT='gcpcloudsql://user:XXXXXXXXX@1.1.1.1:3306/mydb?database_type=mysql&project_id=example-project&location=europe-west1&instance=testinstance&use_proxy=True&sql_proxy_use_tcp=False'
配置和使用 IAM 認證¶
警告
此功能要求 Airflow worker 上必須安裝 gcloud 命令 (Google Cloud SDK)。
警告
IAM 認證僅適用於 Google Service Accounts。
在 Google Cloud IAM 端配置 Service Accounts¶
要透過 IAM 連線,您需要使用 Service Account。它可以是您用於 gcloud 認證的同一 Service Account,也可以是另一個賬戶。如果您決定使用不同的賬戶,則該賬戶應被用於 gcloud 認證的賬戶模擬,並授予 Service Account Token Creator 角色。有關如何授予角色的更多資訊,請參見此處。
此外,Service Account 應配置為與 IAM 配合使用。以下是描述開始前應完成事項的連結:PostgreSQL 和 MySQL。
配置啟用 IAM 的 gcpcloudsql 連線¶
要使用 IAM,您需要在 extra 欄位中啟用 "use_iam": "True"。並在 login 欄位中以 USERNAME@PROJECT_ID.iam.gserviceaccount.com 格式指定 IAM 賬戶,在 password 欄位中留空字串。
例如
tests/system/google/cloud/cloud_sql/example_cloud_sql_query_iam.py
CONNECTION_WITH_IAM_KWARGS = {
"conn_type": "gcpcloudsql",
"login": CLOUD_IAM_SA,
"password": "",
"host": CLOUD_SQL_IP_ADDRESS,
"port": CLOUD_SQL_PUBLIC_PORT,
"schema": CLOUD_SQL_DATABASE_NAME,
"extra": {
"database_type": DATABASE_TYPE,
"project_id": PROJECT_ID,
"location": REGION,
"instance": CLOUD_SQL_INSTANCE_NAME,
"use_proxy": "False",
"use_ssl": "True",
"use_iam": "True",
},
}