Cloud Composer 加载连接到云的 DAG 时出现问题 SQL

Cloud Composer issue loading DAG connecting to Cloud SQL

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

DAG 由调度程序找到,我可以在日志中看到已与 Cloud SQL 建立连接,正在检索表,但出于某种原因 Airflow 网络 UI 没有不喜欢。日志中没有错误。

我知道此处描述的 Composer 架构:https://cloud.google.com/composer/docs/concepts/overview,我想知道它是否与租户项目中的管理 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"

我试过启用 ip 别名并指定 ip 范围,如下所示:

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"

但这并没有什么不同。

我也试过添加这两个参数:

--enable-private-environment \
--master-ipv4-cidr="10.207.64.0/19" \

但是环境创建失败了。

我的 DAG 在我的机器上的 Airflow 中完美运行,但在 Cloud Composer 中运行不佳,这让我很紧张。所以任何想法将不胜感激。

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

另一种选择是使用 Public IP for your CloudSQL instance and whitelist everything making it accessible on the public internet. I am not sure if you can afford this in your use case though. If you choose this option, you should configure your instance to use SSL 来最大化安全性。