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 代理进行连接。在后一种情况下,CloudSQLHook 使用 CloudSqlProxyRunner 自动准备和使用临时 Postgres 或 MySQL 连接,该连接将使用代理进行连接(通过 TCP 或 UNIX 套接字)。

配置连接

主机 (必填)

要连接的主机。

模式 (可选)

指定要在数据库中使用的模式名称。

登录名 (必填)

指定要连接的用户名。

密码 (必填)

指定要连接的密码。

额外 (可选)

指定可以在 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} 变量中),您应该按照数据库连接的标准语法指定它,其中 extras 作为 URI 的参数传递。请注意,URI 的所有组件都应进行 URL 编码。

例如

export AIRFLOW_CONN_GOOGLE_CLOUD_SQL_DEFAULT='gcpcloudsql://user:[email protected]:3306/mydb?database_type=mysql&project_id=example-project&location=europe-west1&instance=testinstance&use_proxy=True&sql_proxy_use_tcp=False'

配置和使用 IAM 身份验证

警告

此功能需要 gcloud 命令 (Google Cloud SDK) 必须安装在 Airflow 工作程序上 安装

警告

IAM 身份验证仅适用于 Google 服务帐户。

在 Google Cloud IAM 端配置服务帐户

要通过 IAM 连接,您需要使用服务帐户。它可以是您用于 gcloud 身份验证的同一服务帐户,也可以是另一个帐户。如果您决定使用不同的帐户,则应从用于 gcloud 身份验证的帐户模拟此帐户,并授予 Service Account Token Creator 角色。有关如何授予角色的更多信息,请参阅此处

此外,应将服务帐户配置为与 IAM 一起使用。以下是描述启动前应完成的操作的链接:PostgreSQLMySQL

配置启用了 IAM 的 gcpcloudsql 连接

要使用 IAM,您需要在 extra 字段中启用 "use_iam": "True"。并在 login 字段中指定 IAM 帐户,格式为 USERNAME@PROJECT_ID.iam.gserviceaccount.com,并在 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",
    },
}

此条目是否有帮助?