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 配合使用。以下是描述開始前應完成事項的連結:PostgreSQLMySQL

配置啟用 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",
    },
}

此條目有幫助嗎?