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",
},
}