本页介绍了使用 VPC Service Controls 边界时为 Google Cloud 项目执行定期 Cloud Run 作业的最佳实践。
Cloud Scheduler 无法在 VPC Service Controls 边界内触发作业。您必须执行额外的步骤才能设置定期作业。具体而言,您必须通过其他组件代理请求。我们建议您使用 Cloud Run 服务作为代理。
下图展示了此架构:
准备工作
为 VPC Service Controls 设置 Cloud Run。这是一次性设置,所有后续的安排作业都会使用。您还必须稍后进行一些按服务的设置,具体说明请参阅以下说明。
设置定期作业
如需在 VPC Service Controls 边界内设置定时作业,请执行以下操作:
创建作业,并记下作业的名称。
完成针对每个作业的 Cloud Run 专用 VPC Service Controls 设置。您需要将作业连接到 VPC 网络,并通过该网络路由所有流量。
如果您没有要触发的现有 Cloud Run 作业,请将示例 Cloud Run 作业容器
us-docker.pkg.dev/cloudrun/container/job:latest
部署到 Cloud Run 以测试此功能。部署用作代理的 Cloud Run 服务。如需查看用于响应请求而触发 Cloud Run 作业的示例服务,请参阅代理服务示例。部署后,控制台会在文本网址:旁边显示服务的网址。
完成针对每个 Cloud Run 服务的 VPC Service Controls 设置。您需要将该服务连接到 VPC 网络,并通过该网络路由所有流量。请务必将 ingress 设置为内部。
创建用于触发 Cloud Run 代理服务的 Cloud Scheduler Cron 作业:
点击创建作业。
为名称、地区、频率和时区字段输入所需的值。如需了解详情,请参阅使用 Cloud Scheduler 创建 Cron 作业。
点击配置执行。
选择“目标类型”HTTP。
对于网址,请输入您在上一步中记下的 Cloud Run 代理服务网址。
对于 HTTP 方法,选择 Get。
对于身份验证标头,选择添加 OIDC 令牌
对于“服务账号”,请选择 Compute Engine 默认服务账号或具有
run.routes.invoke
权限或Cloud Run Invoker
角色的自定义服务账号。对于“受众群体”,请输入您在上一步中记下的 Cloud Run 代理服务网址。
将其他所有字段留空。
点击创建以创建 Cloud Scheduler Cron 作业。
代理服务示例
以下部分展示了一个 Python 服务示例,该服务会代理请求并触发 Cloud Run 作业。
创建一个名为
main.py
的文件,并将以下代码粘贴到其中。将作业名称、区域和项目 ID 更新为所需的值。import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
创建名为
requirements.txt
的文件,并将以下代码粘贴到其中:google-cloud-run flask
创建一个包含以下内容的 Dockerfile:
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python3", "main.py"]
构建并部署容器。由于需要设置 Cloud Build 自定义工作器,因此在 VPC Service Controls 环境中设置基于源代码的部署可能很困难。如果您已有现有的构建和部署流水线,请使用该流水线将源代码构建到容器中,并将容器部署为 Cloud Run 服务。
如果您没有现有的构建和部署设置,请在本地构建容器并将其推送到 Artifact Registry,例如:
PROJECT_ID=YOUR_PROJECT_ID REGION=YOUR_REGION AR_REPO=YOUR_AR_REPO CLOUD_RUN_SERVICE=job-runner-service docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE
记下部署命令返回的服务网址。
后续步骤
使用此功能后,请阅读以下内容了解详情: