Cloud Run functions:源码部署与触发

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

HTTP 函数或受支持事件处理器;先确认现有服务使用的 API / 代际。

推荐做法#

  • 源码构建身份、runtime SA、调用者分开;最小权限按对应资源授予。
  • 函数 entry point 与代码导出名匹配;HTTP 与 CloudEvent handler 按实际触发方式选择。
  • 用真实触发源验证认证、重试与业务幂等,不只测试本地 handler。

常用操作#

替换为实际资源;本段不依赖 lab.env。

PROJECT_ID='REPLACE_PROJECT_ID'
REGION='REPLACE_REGION'
SERVICE='REPLACE_SERVICE'

gcloud run services describe "$SERVICE" \
  --project="$PROJECT_ID" --region="$REGION"
# 已获 Run Invoker 时,可通过本机代理验证服务。
gcloud run services proxy "$SERVICE" \
  --project="$PROJECT_ID" --region="$REGION" --port=8085

容易踩的坑#

删除函数不等于清理全部产物。 另查 source Bucket、Artifact Registry 镜像和事件触发资源;不要删除其他服务共用的仓库。

  • 旧 Cloud Functions API 与 Cloud Run deploy 不能只按同名参数直接替换。
配置说明与完整示例(按需展开)

Lambda 的常见对应是 Cloud Run functions。它从函数源码构建服务,底层仍需理解构建身份、运行身份、HTTP/事件入口与超时。新实验使用 gcloud run deploy;接手旧项目时还可能看到 Cloud Functions v1/v2 API,先确认代际再迁移。

源码部署#

前置:环境篇。操作者需要 Cloud Run Source Developer、Service Usage Consumer 和下方两个 SA 的 actAs;创建 SA/授予角色另需管理员。

source lab.env
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com logging.googleapis.com
export FUNCTION_BUILD="lab-function-build@$PROJECT_ID.iam.gserviceaccount.com"
export FUNCTION_RUN="lab-function-run@$PROJECT_ID.iam.gserviceaccount.com"
export HUMAN_EMAIL=$(gcloud config get-value account)
gcloud iam service-accounts create lab-function-build
gcloud iam service-accounts create lab-function-run
gcloud projects add-iam-policy-binding "$PROJECT_ID" --member="serviceAccount:$FUNCTION_BUILD" --role=roles/run.builder
for sa in "$FUNCTION_BUILD" "$FUNCTION_RUN"; do
  gcloud iam service-accounts add-iam-policy-binding "$sa" --member="user:$HUMAN_EMAIL" --role=roles/iam.serviceAccountUser
done
mkdir -p function-lab
cat > function-lab/main.py <<'EOF'
import functions_framework

@functions_framework.http
def hello(request):
    return {"message": "hello function", "method": request.method}
EOF
printf 'functions-framework>=3,<4\n' > function-lab/requirements.txt
gcloud run deploy lab-function --source=function-lab --function=hello --base-image=python312 --region="$REGION" --service-account="$FUNCTION_RUN" --build-service-account="projects/$PROJECT_ID/serviceAccounts/$FUNCTION_BUILD" --no-allow-unauthenticated --min=0 --max=2

函数名 hello 必须与入口一致;私有服务不因为函数部署而自动公开。部署函数

验收#

给当前实验用户该服务的调用权限,启动本机代理:

gcloud run services add-iam-policy-binding lab-function --region="$REGION" --member="user:$HUMAN_EMAIL" --role=roles/run.invoker
gcloud run services proxy lab-function --region="$REGION" --port=8085

另一个终端 curl --fail http://127.0.0.1:8085,应返回 JSON;匿名直连服务 URL 应被拒绝。再用 Scheduler的 HTTP job 调用本服务,给 scheduler SA 单独授权 Run Invoker,并将 URI/audience 改成函数的服务 URL。

事件函数使用 CloudEvent 签名和 Eventarc,不能直接把本例 HTTP handler 当成所有事件的处理器。

清理#

停止代理,删除指向函数的专用 Scheduler job,然后:

gcloud run services delete lab-function --region="$REGION"
gcloud projects remove-iam-policy-binding "$PROJECT_ID" --member="serviceAccount:$FUNCTION_BUILD" --role=roles/run.builder
gcloud iam service-accounts delete "$FUNCTION_RUN"
gcloud iam service-accounts delete "$FUNCTION_BUILD"

源码部署会留下构建镜像与源码存储;在构建详情中确认位置,仅删除本函数的产物,不能删除其他服务共用的 cloud-run-source-deploy 仓库。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭