我制作了一个 DAG,它通过安装在 GCE 上的 Cloud SQL 代理连接到 Cloud SQL (MySQL)。它读取表列表并根据这些表生成许多任务。我已经成功地在我的机器上的本地 Airflow 中运行了这个 DAG,但是一旦我尝试将它部署为 Cloud Composer 实例,DAG 似乎无法正确加载到 Airflow Web UI 中。DAG 唯一可用的选项是刷新和删除,而不是所有其他选项。
DAG 由调度程序找到,我可以在日志中看到与 Cloud SQL 建立连接,检索表,但由于某种原因,Airflow Web UI 不喜欢它。日志中没有错误。
我知道 Composer 的架构,如下所示:https://cloud.google.com/composer/docs/concepts/overview,我想知道它是否与租户中的管理 Web UI 有关项目。然而,我试图短暂地打开防火墙到来自任何地方的所有连接,看看这是否是防火墙问题,但没有运气。所以我认为这可能是一个路由问题。
连接到 Cloud 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 aliasing 并像这样指定 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 中却没有,我正在撕扯我的头发。因此,任何想法将不胜感激。