【发布时间】:2020-10-12 20:34:14
【问题描述】:
我正在尝试自动化流数据流的功能测试。但是,流数据流正在侦听位于我们项目之外的发布子主题,并且我们无权访问发布消息以执行测试。 当我手动测试我的数据流时,我只是在本地运行它,并连接到我们可以控制发布消息的内部 pubsub 主题。 所以我想为我们的功能测试自动化同样的行为。 以下是我对此的想法,
- 在 Cloud Run 中的容器上本地运行数据流(监听内部主题)
- 通过向内部主题发布消息开始功能测试
- 等待几秒钟,然后检查消息是否已处理到 BigQuery
对于第1步,我编写了以下docker文件(为简单起见,排除了一些命令),
# Use the official lightweight Python image.
# https://hub.docker.com/_/python
FROM python:3.8-slim
# Allow statements and log messages to immediately appear in the Knative logs
ENV PYTHONUNBUFFERED True
#Install git
RUN apt-get update \
&& apt-get install -y git
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
#Change directory and clone git repo
#Set working directory and authenticate service account
# Install dependencies
RUN pip install -r requirements.txt
# Run dataflow locally
CMD ["python", "main.py", "deploy", "local"]
然后我构建了在 Container Registry 中创建镜像的镜像。 然后我去了云运行控制台并尝试用这个图像创建一个服务。 为此我收到以下错误,
Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information. Logs URL: https://console.cloud.google.com/logs/viewer?project=xxxxxxxx&resource=cloud_run_revision/service_name/consume-sales-order-functional-test/revision_name/consume-sales-order-functional-test-00002-vib&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22consume-sales-order-functional-test%22%0Aresource.labels.revision_name%3D%22consume-sales-order-functional-test-00002-vib%22
我知道我收到此错误可能是因为 Cloud run 期望我提及服务可以侦听的端口。但我的数据流并不是真正的网络应用程序,我不启动网络服务器。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
我在 Java 中构建了类似的东西。我有一个带有 HTTP 端点的网络服务器,它在直接运行器中运行光束管道。但它嵌入在网络服务器中,这是 Ahmet 提到的 Cloud Run 合同的一部分
标签: google-cloud-dataflow google-cloud-run