使用 Cloud Proxy 的 Google Cloud Composer 和 MS SQL

Posted

技术标签:

【中文标题】使用 Cloud Proxy 的 Google Cloud Composer 和 MS SQL【英文标题】:Google Cloud Composer and MS SQL using Cloud Proxy 【发布时间】:2020-11-28 02:46:09 【问题描述】:

我正在使用 GCP(Composer)上的 Airflow 构建 Cloud SQL(MS SQL Server)到 BigQuery 的集成。我在 GKE 集群中设置了一个云 SQL 代理,运行良好,没有错误:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: cloud-sql-proxy
  name: cloud-sql-proxy
  namespace: cloud-sql-to-bq
spec:
  replicas: 1
  selector:
    matchLabels:
      run: cloud-sql-proxy
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        run: cloud-sql-proxy
    spec:
      containers:
      - command:
        - /cloud_sql_proxy
        - -instances=[INSTANCE-NAME]=tcp:0.0.0.0:1433
        image: b.gcr.io/cloudsql-docker/gce-proxy:latest
        imagePullPolicy: IfNotPresent
        name: airflow-sqlproxy
        ports:
        - containerPort: 1433
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      restartPolicy: Always

我的 DAG:

dag = DAG('mssql-export-demo', catchup=False, default_args=default_args)
cloud_storage_bucket_name = 'mssql-export-test'


export_customers = MsSqlToGoogleCloudStorageOperator(
    task_id='export_analysis',
    sql='SELECT * FROM vwAnalysis;',
    bucket=cloud_storage_bucket_name,
    filename='data/customers/export.json',
    schema_filename='schemas/export.json',
    mssql_conn_id='cloud_sql_proxy_conn',
    dag=dag
)

我还在 Airflow 中创建了一个指向 cloud_sql_proxy_conn 的连接。 当我运行 DAG 时,我收到以下错误:

[2020-11-28 01:59:20,555] taskinstance.py:1153 ERROR - Connection to the database failed for an unknown reason.
Traceback (most recent call last)
  File "src/pymssql.pyx", line 636, in pymssql.connec
  File "src/_mssql.pyx", line 1964, in _mssql.connec
  File "src/_mssql.pyx", line 683, in _mssql.MSSQLConnection.__init_
_mssql.MSSQLDriverException: Connection to the database failed for an unknown reason

没有其他错误消息,因此调试起来非常困难。有没有人在 Cloud SQL 和 Composer 上使用 MS SQL 的经验来帮助我解决这个问题?

【问题讨论】:

【参考方案1】:

Airflow 现在提供 CloudSqlInstanceExportOperator,这意味着无需在 GKE 中设置云 SQL 代理。

【讨论】:

以上是关于使用 Cloud Proxy 的 Google Cloud Composer 和 MS SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中运行 Google Cloud Function 中的子进程

在 Google Cloud 函数上部署 python C 包时出错

从 Firebase 功能使用 Cloud SQL 代理

在本地使用 cloud_sql_proxy 获取 notAuthorized 错误

Google Cloud、Kubernetes 和 Cloud SQL 代理:默认 Compute Engine 服务帐户问题

Google Cloud Dataflow 和 Google Cloud Dataproc 有啥区别?