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

此条目有帮助吗?