python - 如何使用自定义容器镜像部署谷歌云功能
问题描述
为了在我的谷歌云功能中启用 webdriver,我使用 docker 文件创建了一个自定义容器:
FROM python:3.7
COPY . /
WORKDIR /
RUN pip3 install -r requirements.txt
RUN apt-get update
RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libcairo2 libcups2 libfontconfig1 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libxss1 fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
#download and install chrome
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install
#install python dependencies
COPY requirements.txt requirements.txt
RUN pip install -r ./requirements.txt
# Downloading gcloud package
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
# Installing the package
RUN mkdir -p /usr/local/gcloud \
&& tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz \
&& /usr/local/gcloud/google-cloud-sdk/install.sh
# Adding the package path to local
ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin
#some envs
ENV PORT 5000
#copy local files
COPY . .
CMD exec gunicorn --bind :${PORT} --workers 1 --threads 8 main:app
ENTRYPOINT ["webcrawler"]
我在这个 docker 中安装了 gcloud,这样我就可以gcloud deploy
用来部署我的云功能。然后,我使用这个 cloudbuild.yaml 部署我的脚本:
steps:
- name: 'us-central1-docker.pkg.dev/$PROJECT_ID/webcrawler-repo/webcrawler:tag1'
entrypoint: 'gcloud'
args: ['functions', 'deploy', 'MY_FUN', '--trigger-topic=MY_TOPIC', '--runtime=python37', '--entry-point=main', '--region=us-central1', '--memory=512MB', '--timeout=540s']
id: 'deploying MY_FUN'
dir: 'MY_DIR'
但是,我最终在部署时遇到了这个错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: invalid storage source object "MY_FUN-ba7acf95-4297-46b3-b76e-1c25ba21ba03/version-14/function-source.zip" in bucket "gcf-sources-967732204245-us-central1": failed to get storage object: Get "https://storage.googleapis.com/storage/v1/b/gcf-sources-967732204245-us-central1/o/MY_FUN-ba7acf95-4297-46b3-b76e-1c25ba21ba03%2Fversion-14%2Ffunction-source.zip?alt=json&prettyPrint=false": RPC::UNREACHABLE: gslb: no reachable backends
ERROR
ERROR: build step 0 "us-central1-docker.pkg.dev/PROJECT_ID/webcrawler-repo/webcrawler:tag1" failed: step exited with non-zero status: 1
知道如何解决这个问题吗?
谢谢!
解决方案
云函数允许您仅部署您的代码。使用 buildpack 打包到容器中会自动为您执行。
如果您已经有一个容器,最好的解决方案是将其部署在Cloud Run上。如果您的网络服务器侦听端口 5000,请不要忘记在部署期间覆盖此值--port
(使用参数)。
要将您的 PubSub 主题插入您的 Cloud Run 服务,您有 2 个解决方案
- 您可以手动创建对 Cloud Run 服务的 PubSub 推送订阅
- 或者您可以使用EventArc 将其插入您的 Cloud Run 服务
在这两种情况下,您都需要在传递给 PubSub 推送订阅或 EventArc 的 Cloud Run 服务上使用具有 run.invoker 角色的服务帐户来确保安全性
推荐阅读
- html - 设置默认选择的选项 - Angular JS
- regex - 正则表达式苦苦挣扎
- micronaut - 如何在 Micronaut 中读取应用程序属性?
- java - 如何将原始pdf从服务器转换为pdf文档
- python - 为什么发送的邮件没有主题?
- java - 无法使用下载的java文件
- mysql - Teradata 和 MySQL 在 OVER() 和 Partition By () 子句中的行为不同
- r - R ggmap 以经度 180 度为中心
- python - 如何重命名文件并保留原始文件
- javascript - 使用 Reactjs 选择 Ctrl/Shift+Click