LoginSignup
4
2

Workflows で Connector を使って Cloud Run を実行する

Posted at

記事の背景

Workflows で 標準ライブラリ関数 (HTTPリクエスト) Cloud Run を実装した記事はよく見かけたのですが、Connector で実装した記事があまりなかったので書いてみました

前提:

  • Steps 構文の記述の仕方など基本的な Workflows のYAMLファイルの構文を理解している
  • Cloud Run Jobs の使い方をある程度理解している

Workflows では Calls 構文を使用して Cloud Functions や Cloud Run などの他のサービスを呼び出すことができます。呼び出し方には次の3つがあります(Google Cloud Workflows - Calls参照)。

  1. Connectors を使った呼び出し
  2. HTTP リクエストによる呼び出し
  3. Subworkflows を使った呼び出し

本記事では、「1.Connectors を使った呼び出し」について取り上げます。

Workflows で Connectors を使って Cloud Run Jobs を実行する

先ほど上記の3つの呼び出し方法で列記した「2. HTTP リクエストによる呼び出し」が Workflows の Calls 構文でよく使われます。しかし、 この方法は、Cloud Run Service では使用できますが、 Cloud Run Jobs ではこの呼び出し方法は使用できません。

ここで、本記事では Cloud Run Jobs を Workflows で実行したい場合について取り上げます。

注意
Cloud Run には 「service」と「Jobs」の2つの種類があります。本記事では、Cloud Run Jobsについて取り上げます

Cloud Run Jobs を Calls 構文で使用したい場合は Connectors を使う

Connectors とは

Connectors とは 他の Google Cloud APIs と接続し、 Workflow の中で他のGoogle Cloud サービスを使用することができる方法です。

Connectors can be used to connect to other Google Cloud APIs within a workflow, and to integrate your workflows with those products, allowing you to perform operations from other Google Cloud services.

Workflows における Connectors の使い方の公式ドキュメント(Cloud Run 以外にもWorkflows 上で Connectors を使って呼び出せる Google Cloud サービスの一覧が記載されています)

ワークフロー(YAML)の記述例

以下の例は、 作成した Cloud Run jobs 「cloud-run-testjob」 を Cloud Run Jobs に設定している環境変数 TARGET_NAME に target_name に指定している3つのリストを設定して並列実行するワークフローの記述の例です。

main:
  steps:
  - init:
      assign:
        - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_NUMBER")}
        - job_name: cloud-run-testjob
        - job_location: asia-northeast1
        - target_name: ["huga", "hoge", "hihi"]

    # shard_nums のリストをfor文で環境変数に引き渡して並列実行するステップ
  - step_name:
      parallel:
        for:
          value: run_target
          in: ${target_name}
          steps:
            - parallel_job_name:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    connector_params:
                        timeout: 7200
                    body:
                        overrides:
                            # Cloud Run で設定している環境変数に任意の値を引き渡す
                            containerOverrides:
                                env:
                                    - name: TARGET_NAME # 環境変数名
                                      value: ${run_target} # 環境変数の設定値


  - finish_output:
        return: "This workflow has been successfully completed."

Cloud Run Jobs を Connector を使用してCallで呼び出す

call に googleapis.run.v1.namespaces.jobs.run を指定すれば Workflow上で Cloud Run Jobs を実行することができます

Steps:
    - parallel_job_name:
        call: googleapis.run.v1.namespaces.jobs.run
        args:
            name: ${"namespaces/" + project_id + "/jobs/" + job_name}
            location: ${job_location}

Cloud Run Jobs の実行時間が1800秒以上かかる場合

Cloud Run Jobs 自体の設定でタイムアウトを指定していても、 実行時間が1800秒以上を要する場合はWorkflows 上で timeout のフィールドでタイムアウト時間を明示し直す必要があります。

steps:
- parallel_job_name:
    call: googleapis.run.v1.namespaces.jobs.run
    args:
        name: ${"namespaces/" + project_id + "/jobs/" + job_name}
        location: ${job_location}
        connector_params:
            timeout: 7200

Cloud Run Jobs に設定した環境変数を Workflow 上で引き渡す

Workflow で Cloud Run を実行する時、Cloud Run で作成した環境変数、その他のパラメータ指定を指定し直して実行することができます。

steps:
- parallel_job_name:
    call: googleapis.run.v1.namespaces.jobs.run
    args:
        name: ${"namespaces/" + project_id + "/jobs/" + job_name}
        location: ${job_location}
        connector_params:
            timeout: 7200
        body:
            overrides:
                # Cloud Run で設定している環境変数に任意の値を引き渡す
                containerOverrides:
                    env:
                        - name: TARGET_NAME # 環境変数名
                          value: ${run_target} # 環境変数の設定値

Workflows で Cloud Run Jobs を実行する時の落とし穴

最後に個人的にハマったところなので、列記しておきます(公式ドキュメントにはきちんと書かれておりました)。

  1. Workflows における Cloud Run の実行のタイムアウトはデフォルトで1800秒とされている
  2. Cloud Run Jobs の設定項目でtimeoutを1800秒以上に設定していても、Workflows ではCloud Run のタイムアウトは無視され、Workflows 上で Cloud Run 実行から1800秒経過した場合、Workflows上ではタイムアウトエラーとして例外処理が発生する

Workflows における Cloud Run のデフォルトのタイムアウトについて

4
2
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
4
2