Google cloud platform 云编写器问题加载DAG连接到云SQL

Google cloud platform 云编写器问题加载DAG连接到云SQL,google-cloud-platform,airflow,google-cloud-composer,cloud-sql-proxy,Google Cloud Platform,Airflow,Google Cloud Composer,Cloud Sql Proxy,我制作了一个DAG,它通过安装在GCE上的云SQL代理连接到云SQL(MySQL)。它读取一个表列表,并基于这些表生成许多任务。我已经在我的机器上成功地在Airflow本地运行了这个DAG,但是一旦我尝试将它部署到Cloud Composer实例中,DAG似乎无法正确加载到Airflow Web UI中。DAG的唯一可用选项是刷新和删除,而不是所有其他选项 DAG是由调度器找到的,我可以在日志中看到连接到CloudSQL,检索表,但出于某种原因,Airflow web UI不喜欢它。日志中没有错

我制作了一个DAG,它通过安装在GCE上的云SQL代理连接到云SQL(MySQL)。它读取一个表列表,并基于这些表生成许多任务。我已经在我的机器上成功地在Airflow本地运行了这个DAG,但是一旦我尝试将它部署到Cloud Composer实例中,DAG似乎无法正确加载到Airflow Web UI中。DAG的唯一可用选项是刷新和删除,而不是所有其他选项

DAG是由调度器找到的,我可以在日志中看到连接到CloudSQL,检索表,但出于某种原因,Airflow web UI不喜欢它。日志中没有错误

我知道这里描述的Composer的体系结构:,我想知道它是否与租户项目中的管理web UI有关。不过,我曾尝试对来自世界各地的所有连接短暂地打开防火墙,看看这是否是防火墙问题,但没有成功。所以我认为这可能是一个路由问题

连接到云SQL代理的代码如下所示:

with connection.cursor(pymysql.cursors.DictCursor) as cursor:
    sql = "select <redacted>"
    cursor.execute(sql)
    result = cursor.fetchall()
gcloud composer environments create comp-etl-runner \
--disk-size="30GB" --location="europe-west1" --zone="europe-west1-b" \
--machine-type="n1-standard-1" --node-count=3 \
--service-account="<redacted>" \
--python-version=3 --image-version="composer-1.7.2-airflow-1.10.2" --network="dev-network-1" \
--subnetwork="dev-subnet-3"
gcloud beta composer environments create comp-etl-runner \
--disk-size="30GB" --location="europe-west1" --zone="europe-west1-b" \
--machine-type="n1-standard-1" --node-count=3 \
--service-account="<redacted>" \
--python-version=3 --image-version="composer-1.7.2-airflow-1.10.2" --network="dev-network-1" \
--subnetwork="dev-subnet-3" \
--enable-ip-alias \
--cluster-ipv4-cidr="10.207.0.0/19" \
--services-ipv4-cidr="10.207.32.0/19"
但随后环境创建就失败了


我正在撕扯我的头发,因为我的DAG在我的机器上的气流中工作得很好,但在Cloud Composer中却不行。因此,任何想法都将不胜感激。

我认为最合适的解决方法是在同一个GKE集群中部署一个自我管理的Web服务器(as),以便能够通过云SQL代理


另一种选择是为您的CloudSQL实例使用,并将所有可在公共internet上访问的内容列为白名单。不过,我不确定在您的用例中您是否能够负担得起。如果选择此选项,则应将实例配置为最大限度地提高安全性

“未正确加载”是指DAG出现在UI中,但没有“准备就绪”吗?此外,运行SQL代理的实例是否具有公共IP地址?您是否使用任何服务发现机制?如果GCE实例没有公共IP,您是否使用VPC对等或类似的方式连接到SQL代理?是的,它出现在UI中,但尚未准备就绪。但是没有错误。SQL代理确实有一个公共IP,但我连接到了私有IP。这在k8s集群中起作用。我没有使用任何服务发现机制。我还没有设置任何VPC对等编号。奖金信息:我可以通过CLI手动运行DAG并成功。只是用户界面不起作用。嗯。。。还有几个问题可以确定:这是一个私有IP环境吗?GCE实例(带有SQL代理)是否与Composer GKE群集位于同一VPC中?是的,它是一个私有IP环境,是的,SQL代理GCE与Composer GKE群集位于同一VPC中。GKE集群可以连接到SQL代理,但据我了解,文档中的Airflow Web UI位于租户项目中,因此不在我的VPC中。我想这就是为什么会有问题。你可能是对的,这可能是最好的办法。
--enable-private-environment \
--master-ipv4-cidr="10.207.64.0/19" \