Cloud Run Job(google作业) 处理耗时任务

  最近使用google cloud的一些服务处理一些事,使用了Cloud Scheduler定时发送http请求大Cloud Function,让Cloud Function定时处理我的事。这个时候会有一个问题:超时。

  我的任务比较耗时,任务处理完了返回ok,Cloud Scheduler可能会等不到,认为超时,会重试请求。如果Cloud Function先返回ok,然后再异步处理任务,但是查了下文档,Cloud Function在返回ok后,会在一定时间内自动销毁,也就是异步处理的任务可能还没执行完,函数就被销毁了,导致任务只执行了一部分。

  这里将耗时任务调整为了:Cloud Scheduler定时 + Cloud Run Job。

 

一:本地环境

1:准备:需要一个google cloud 项目。本地安装个Google  Cloud CLI,下载地址:https://cloud.google.com/sdk?hl=zh-CN

2:文件准备,在一个文件夹下面建立3个文件:index.js,Dockerfile,.dockerignore,3个文件位于同一文件夹下。

/您的项目文件夹
├── Dockerfile
└── index.js
└── .dockerignore

index.js:

async function fetchFirestoreData() {
    console.log("----test-api-test-----");
}
async function main() {
    await fetchFirestoreData();
}
main().catch(console.error);

Dockerfile:

# 使用 Node.js 20 官方镜像
FROM node:20

# 更新 npm 到最新版本 # RUN npm install -g npm@latest # 设置工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json 文件 COPY package*.json ./ # 安装项目依赖 RUN npm install # 复制项目文件 COPY . . # 启动脚本 CMD ["node", "index.js"]

 .dockerignore  (如果这个文件夹下有不想部署的文件,可以在这里添加)

# 忽略 node_modules 文件夹
node_modules/

# 忽略不需要的 JS 文件
test.js

# 忽略操作系统生成的文件
.DS_Store
Thumbs.db

# 忽略环境变量配置文件
.env

# 忽略本地构建文件夹
dist/
build/

 

 3:(可选)如果有第3方包:在shell或者cmd中,cd到该文件夹下:


# 初始化 package.json 文件
npm init -y

# 安装 @google-cloud/tasks 和 @google-cloud/bigquery 这里用这两个举例
npm install @google-cloud/tasks @google-cloud/bigquery

 


二:配置gcloud

  1: 需要下载sdk到本地,安装:下载地址:https://cloud.google.com/sdk?hl=zh-CN

打开Google Cloud SDK Shell:

初始化:
gcloud init

然后按照出现的提示,登录,选择你的google 项目,可以选择位置,比如:
us-central1

 

 

 

        2:远程配置,在浏览器中登录到google cloud 后。在菜单选择 Artifact Registry,新建一个代码库:

 

三:上传docker

打开本地Google Cloud SDK Shell:cd 到你的文件夹下,
//配置docker,REGION是你刚刚选的代码库的区域
gcloud auth configure-docker REGION-docker.pkg.dev
//比如us-central1区域
gcloud auth configure-docker us-central1-docker.pkg.dev
//提交docker到远程(不用复制,根据你的项目设置)
gcloud builds submit --tag us-central1-docker.pkg.dev/cloud-tes/jobs-docker-repo/taskjobs
//us-central1-docker.pkg.dev: 是远程区域
//cloud-tes: 是google 项目id
//jobs-docker-repo:是刚刚建的代码库名字
//taskjobs: 远程docker名字

//如果上传的项目变化,通过这个设置切换到新项目:新项目Id: cloud-tes(测试服上传成功后,需要往正式服传时,也可以通过这个切换项目id)
gcloud config set project cloud-tes

 

然后取google cloud后台看看上传的映像:

 

四:创建作业和定时:

1:创建 Cloud Run Job: 在google cloud后台创建一个job,如图:

 

 

2:创建定时任务。创建job完成后,点开刚刚创建的job,选择-》触发器:

 

 

 

 

 五:完成:定时执行耗时任务的功能就ok了。这里的:Cloud Scheduler定时是不需要 Cloud Run Job返回的, Job执行完成后会自动关闭。

 

 

 

 

 

 

  

posted @ 2024-10-29 12:03  Joy_CShow  阅读(12)  评论(0编辑  收藏  举报