📑
WorkflowsをGoから実行する
はじめに
GCPのWorkflowsにて作成したワークフローの実行方法は2021年4月現在、
次の3種類の方法で実行することができます。
- Console
- gcloud
- REST API
Goから実行する
GoからGCPプロダクトを扱う場合、google-cloud-goを利用するのがほとんどですが、
現状はWorkflowsのパッケージがないので、 googleapis/google-api-go-client
を使用します。
以下、サンプルコード
※ projectID
とlocation
を任意の値に変更してください。
main.go
package main
import (
"context"
"fmt"
"google.golang.org/api/workflowexecutions/v1"
"google.golang.org/api/workflows/v1"
)
const (
projectID = "YOUR_PROJECT_ID"
location = "YOUR_LOCATION"
)
func main() {
ctx := context.Background()
// workflowリストを取得
var targetWorkflowName string
{
workflow, err := workflows.NewService(ctx)
if err != nil {
panic(err)
}
// 指定したプロジェクトID・ロケーションのワークフロー一覧を取得
parent := fmt.Sprintf("projects/%s/locations/%s", projectID, location)
resp, err := workflow.Projects.Locations.Workflows.List(parent).Do()
if err != nil {
panic(err)
}
for _, workflow := range resp.Workflows {
// ワークフロー名を出力
fmt.Println(workflow.Name)
// 最終ループのワークフロー名を代入(※雑なコードなのはご容赦)
targetWorkflowName = workflow.Name
}
}
// targetWorkflowNameを実行する
workflowExecService, err := workflowexecutions.NewService(ctx)
if err != nil {
panic(err)
}
// ワークフローの実行
// e.g. targetWorkflowName="projects/{PROJECT_ID}/locations/{LOCATION}/workflows/{WORKFLOW_NAME}"
exe, err := workflowExecService.Projects.Locations.Workflows.Executions.Create(targetWorkflowName, &workflowexecutions.Execution{
Name: targetWorkflowName,
}).Do()
if err != nil {
panic(err)
}
// 実行結果出力
fmt.Println(exe.Name)
}
そのほか参考リンク
Discussion