最近,我开始使用 GCP 工作流程和功能。我们使用无服务器框架来执行这些功能,我们可以使用命令在计算机上运行它们,serverless invoke local --function <function_name>
这样我们就不必花费云执行时间。
我现在正在寻找的是是否有一种方法可以对 GCP 工作流程执行相同的操作,在我们自己的计算机中运行它们,而不是在云中调用它们。
我已经阅读了来自谷歌和许多不同文章的资源,但我仍然没有找到窍门(如果它确实存在)
我习惯于在 Cloud Run 上使用 CI/CD 架构进行部署。每次部署时,我都必须手动检索通过电子邮件发送给员工的 URL。我的目标是使用 Google Workflow 自动执行此任务。如何使用 Google Workflow 检索新服务的网址或 Cloud Run 服务的标签?
执行工作流程时,有一个唯一的Execution ID
. 是否可以从工作流程中访问该值。例如,如果我要在步骤中使用执行 ID 作为文件名:
url: https://storage.googleapis.com/upload/storage/v1/b/bucketname/o
headers:
Content-Type: application/json
query:
uploadType: media
name: ${string(EXECUTION_ID) + ".json"}
```
Run Code Online (Sandbox Code Playgroud) 在 GCP 内:
如果我使用具有“Cloud Functions Invoker”权限的服务帐户,为什么会出现 403 错误?如果我禁用该功能的身份验证,它可以工作,但我需要身份验证,因为它不是公共 API。
google-cloud-platform google-cloud-functions google-workflows
我正在开发一个 python 脚本,允许我触发云工作流服务。
在脚本中,我在调用
projects/{project}/locations/{location}/workflows/{workflow}/executions
端点时传递一些参数。
但我没有找到如何在 YAML 中使用这些参数。
我正在测试谷歌工作流程,并想从另一个工作流程调用工作流程,但作为一个单独的流程(不是子工作流程)
我可以开始执行,但目前无法检索返回值。我收到了一个执行实例:
{
"argument": "null",
"name": "projects/xxxxxxxxxxxx/locations/us-central1/workflows/child-workflow/executions/9fb4aa01-2585-42e7-a79f-cfb4b57b22d4",
"startTime": "2020-12-09T01:38:07.073406981Z",
"state": "ACTIVE",
"workflowRevisionId": "000003-cf3"
}
Run Code Online (Sandbox Code Playgroud)
父工作流.yaml
main:
params: [args]
steps:
- callChild:
call: http.post
args:
url: 'https://workflowexecutions.googleapis.com/v1beta/projects/my-project/locations/us-central1/workflows/child-workflow/executions'
auth:
type: OAuth2
scope: 'https://www.googleapis.com/auth/cloud-platform'
result: callresult
- returnValue:
return: ${callresult.body}
Run Code Online (Sandbox Code Playgroud)
子工作流.yaml:
- getCurrentTime:
call: http.get
args:
url: https://us-central1-workflowsample.cloudfunctions.net/datetime
result: CurrentDateTime
- readWikipedia:
call: http.get
args:
url: https://en.wikipedia.org/w/api.php
query:
action: opensearch
search: ${CurrentDateTime.body.dayOfTheWeek}
result: WikiResult
- returnOutput:
return: ${WikiResult.body[1]}
Run Code Online (Sandbox Code Playgroud)
另外还有一个问题:如何从变量创建动态 url。${} 似乎在那里不起作用
我正在尝试使用 GCP 工作流程调用云运行端点。尽管云运行的最大超时为 1 小时,但工作流程给我带来了如下错误
请求超时为 2500 秒,最大允许超时为 1800 秒
这是特定于工作流程的吗?在文档中找不到这一点,有人可以确认一下吗?
我试图在执行谷歌云工作流程时包含运行时变量。除非您使用 REST API,否则我找不到执行此操作的文档。
这是我的代码,主要来自他们的文档,我只是得到了 null 参数。我认为这可能是它在 createExecution 上期望的第二个参数,名为执行,但我无法弄清楚。
const { ExecutionsClient } = require('@google-cloud/workflows');
const client = new ExecutionsClient();
const execute = () => {
return client.createExecution(
{
parent: client.workflowPath('project_id', 'location', 'name'),
},
{
argument: {
users: ['info here'],
},
},
);
};
module.exports = execute;
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
我计划有一个云调度程序,每天早上 8 点调用 GCP 工作流程。我的 GCP 工作流程将有大约 15 个不同的工作流程steps
,并且仅在 BigQuery 上进行转换(更新、删除、添加)。有些查询会很长,我想知道是否有办法将.sql
文件加载到 GCP 工作流程中task1.yaml
?
#workflow entrypoint
ProcessItem:
params: [project, gcsPath]
steps:
- initialize:
assign:
- dataset: wf_samples
- input: ${gcsPath}
- sqlQuery: QUERY HERE
...
Run Code Online (Sandbox Code Playgroud) 鉴于工作流执行失败(由工作流 ID 和执行 ID 标识),我需要一种相对快速且简单的方法来使用 CLI 工具 ( ) 使用相同的输入有效负载
重新运行它。
询问谷歌并在 stackoverflow 上搜索并没有给我带来任何简单的方法来做到这一点。gcloud
从现在开始,我使用 Cloud Build 作为普通 CICD 来运行 terraform 和构建基础设施(有时我需要构建 Docker 容器,有时则没有)。
既然云工作流程可用,我想知道这是否是一个更好的工具,用于管道化原子步骤执行,以便轻松和更好的控制(例如条件执行、错误处理等、集中日志推送等)
我认为上述所有内容都可以在 Cloud Build 中完成,但这通常并不简单。
工作流程可以吗?如果不行,这个新工具的最佳用例是什么?
google-cloud-platform terraform-provider-gcp google-workflows