GCPのWorkflowsについて
GCPのWorkflowsは、タスクの実行と制御のための単純で柔軟な実行環境です。このサービスを使用することで、異なるサービスやAPIの呼び出しや、条件に基づいた制御フローの定義が可能。
機能
1. ワークフローの定義と制御
GCPのWorkflowsでは、YAML形式でワークフローを定義することができる。この定義には、各タスクの手順と条件、依存関係などを設定する。また、複数のタスクを直列に実行したり、並行して実行したりすることもできる。
2. サードパーティのAPIとの連携
Workflowsは、様々なサードパーティのAPIとの連携をサポートしている。RESTやgRPCで公開されたAPIを使用する場合、タスクとして呼び出しを追加することができる。また、自動的に再試行やエラーハンドリングを行ってくれるため、信頼性の高いAPI呼び出しを簡単に実現することができる。
3. 高度な制御フロー
Workflowsでは、条件に基づいた処理や反復処理を簡単に定義することができる。たとえば、ある条件が成立した場合のみ特定のタスクを実行したり、リストやマップなどのデータ構造を使用して繰り返し処理を行ったりすることができる。
4. ログとデバッグのサポート
ワークフローの実行状況やログは、Cloud ConsoleやStackdriver Loggingなどのツールを使用して確認することができる。また、デバッグ時にはステップごとの出力を表示することも可能できる。
サンプルコード
Java
import com.google.api.services.workflows.v1beta.model.*;
String sourceCode = "execution:\n" +
" - call: test_task\n" +
" - return:\n" +
" status: \"Success\"";
Workflow workflow = new Workflow();
workflow.setSourceCode(sourceCode);
WorkflowServiceClient client = WorkflowServiceClient.create();
CreateWorkflowRequest request = CreateWorkflowRequest.newBuilder()
.setParent("projects/my-project/locations/us-central1")
.setWorkflow(workflow)
.build();
Workflow response = client.createWorkflow(request);
System.out.println("Workflow created: " + response.getName());
Go
package main
import (
"context"
"fmt"
"io/ioutil"
"log"
workflowpb "google.golang.org/genproto/googleapis/cloud/workflows/v1beta"
"google.golang.org/grpc"
)
func main() {
ctx := context.Background()
conn, err := grpc.Dial("workflow.googleapis.com:443", grpc.WithInsecure())
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer conn.Close()
client := workflowpb.NewWorkflowsClient(conn)
sourceCode, err := ioutil.ReadFile("workflow.yaml")
if err != nil {
log.Fatalf("Failed to read source code: %v", err)
}
req := &workflowpb.CreateWorkflowRequest{
Parent: "projects/my-project/locations/us-central1",
Workflow: &workflowpb.Workflow{
SourceCode: string(sourceCode),
},
}
res, err := client.CreateWorkflow(ctx, req)
if err != nil {
log.Fatalf("Failed to create workflow: %v", err)
}
fmt.Printf("Workflow created: %s", res.GetName())
}
C#
using System;
using Google.Api.Gax.Grpc;
using Google.Cloud.Workflows.V1Beta;
string projectId = "my-project";
string location = "us-central1";
var client = new WorkflowServiceClientBuilder().Build();
string sourceCode = "execution:\n" +
" - call: test_task\n" +
" - return:\n" +
" status: \"Success\"";
var workflow = new Workflow
{
SourceCode = sourceCode
};
var request = new CreateWorkflowRequest
{
Parent = WorkflowName.Format(projectId, location),
Workflow =workflow,
};
var response = client.CreateWorkflow(request);
Console.WriteLine($"Workflow created: {response.Name}");
以上はGCPのWorkflowsの概要と機能についての解説と、Java、Go、C#のサンプルコードです。Workflowsを使用することで、効率的なタスク実行と制御を実現することができる。