本页面介绍了使用 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 网络,并通过该网络路由所有流量。请务必将入站流量设置为“内部”。
创建 Cloud Scheduler Cron 作业以触发 Cloud Run 代理服务:
点击创建作业。
为名称、区域、频率和时区字段输入所需的值。如需了解详情,请参阅使用 Cloud Scheduler 创建 Cron 作业。
点击配置执行。
选择目标类型 HTTP。
对于网址,请输入您在上一步中记下的 Cloud Run 代理服务网址。
对于 HTTP 方法,请选择 Get。
对于 Auth 标头,请选择添加 OAuth 令牌。
对于“服务账号”,请选择 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"]
构建并部署容器。在 VPC Service Controls 环境中设置基于源代码的部署可能很困难,因为需要设置 Cloud Build 自定义工作器。如果您已有构建和部署流水线,请使用该流水线将源代码构建到容器中,并将该容器部署为 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
记下部署命令返回的服务网址。
后续步骤
使用此功能后,阅读以下内容来了解详情: