0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[GCP] Workflows機能x実装

Posted at

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を使用することで、効率的なタスク実行と制御を実現することができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?