クイックスタート: gcloud CLI を使用してワークフローを作成する

gcloud CLI を使用してワークフローを作成する

このクイックスタートでは、Google Cloud CLI を使用して最初のワークフローを作成、デプロイ、実行する方法について説明します。ワークフローでは、リクエストをサンプル API に送信してから、レスポンスを使用することでリクエストを作成して公開 API に送信します。続いて、ワークフローは公開 API のレスポンスを返します。

すべての Workflows gcloud CLI コマンドのリストについては、Workflows gcloud CLI のリファレンス ページをご覧ください。

始める前に

組織が Google Cloud 環境に制約を適用すると、このドキュメントの一部の手順が正しく機能しない場合があります。その場合、パブリック IP アドレスやサービス アカウント キーを作成するようなタスクを完了できない場合があります。制約に関するエラーを返すリクエストを行う場合は、制約がある Google Cloud 環境でアプリケーションを開発する方法をご覧ください。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します。

    • Google Cloud プロジェクトを作成する

      gcloud projects create PROJECT_ID
    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  5. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  6. Google Cloud CLI をインストールします。
  7. gcloud CLI を初期化するには:

    gcloud init
  8. Google Cloud プロジェクトを作成または選択します。

    • Google Cloud プロジェクトを作成する

      gcloud projects create PROJECT_ID
    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  9. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  10. ワークフロー API を有効にします。

    gcloud services enable workflows.googleapis.com
  11. サービス アカウントを作成して名前を付けます。例: sa-name
    gcloud iam service-accounts create sa-name
  12. Cloud Logging にログを送信するには、サービス アカウントに roles/logging.logWriter ロールを付与します。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/logging.logWriter"
    

    サービス アカウントのロールと権限の詳細については、ワークフローに Google Cloud リソースへのアクセス権限を付与するをご覧ください。

ワークフローを作成、デプロイ、実行する

  1. ホーム ディレクトリで、myFirstWorkflow.yaml または myFirstWorkflow.json という名前の新しいファイルを作成します。

  2. 次のワークフローをコピーして新しいファイルに貼り付け、保存します。

    YAML

    main:
      params: [input]
      steps:
        - checkInputExists:
            switch:
              - condition: ${input != null}
                next: checkSearchTermInInput
            next: getCurrentTime
        - checkSearchTermInInput:
            switch:
              - condition: ${"searchTerm" in input}
                assign:
                  - searchTerm: ${input.searchTerm}
                next: readWikipedia
        - getCurrentTime:
            call: http.get
            args:
              url: https://us-central1-workflowsample.cloudfunctions.net/datetime
            result: currentDateTime
        - setFromCallResult:
            assign:
              - searchTerm: ${currentDateTime.body.dayOfTheWeek}
        - readWikipedia:
            call: http.get
            args:
              url: https://en.wikipedia.org/w/api.php
              query:
                action: opensearch
                search: ${searchTerm}
            result: wikiResult
        - returnOutput:
            return: ${wikiResult.body[1]}

    JSON

    {
      "main": {
        "params": [
          "input"
        ],
        "steps": [
          {
            "checkInputExists": {
              "switch": [
                {
                  "condition": "${input != null}",
                  "next": "checkSearchTermInInput"
                }
              ],
              "next": "getCurrentTime"
            }
          },
          {
            "checkSearchTermInInput": {
              "switch": [
                {
                  "condition": "${\"searchTerm\" in input}",
                  "assign": [
                    {
                      "searchTerm": "${input.searchTerm}"
                    }
                  ],
                  "next": "readWikipedia"
                }
              ]
            }
          },
          {
            "getCurrentTime": {
              "call": "http.get",
              "args": {
                "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
              },
              "result": "currentDateTime"
            }
          },
          {
            "setFromCallResult": {
              "assign": [
                {
                  "searchTerm": "${currentDateTime.body.dayOfTheWeek}"
                }
              ]
            }
          },
          {
            "readWikipedia": {
              "call": "http.get",
              "args": {
                "url": "https://en.wikipedia.org/w/api.php",
                "query": {
                  "action": "opensearch",
                  "search": "${searchTerm}"
                }
              },
              "result": "wikiResult"
            }
          },
          {
            "returnOutput": {
              "return": "${wikiResult.body[1]}"
            }
          }
        ]
      }
    }

    このワークフローでは、サンプル API を呼び出します。返された曜日は、Wikipedia API に渡されます。今日の曜日に関する Wikipedia の関連記事が返されます。

  3. ワークフローをデプロイし、指定されたサービス アカウントに関連付けます。

    gcloud workflows deploy myFirstWorkflow --source=myFirstWorkflow.EXTENSION \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
    

    次のように置き換えます。

    • EXTENSION: ワークフローのファイル拡張子。YAML バージョンには yaml を使用し、JSON バージョンには json を使用します。
    • PROJECT_ID: プロジェクト ID
  4. ワークフローを実行します。

    gcloud workflows run myFirstWorkflow \
        --data='DAY_OF_WEEK'
    

    DAY_OF_WEEK は、検索キーワードで置き換えます。例: {"searchTerm":"Tuesday"}{} と入力すると、現在の日付(グリニッジ標準時)が取得されます。

    実行の試行結果が返されます。出力は次のようになります。

    argument: '{"searchTerm":"Tuesday"}'
    endTime: '2022-07-19T13:50:00.452572474Z'
    name: projects/1051295516635/locations/us-central1/workflows/myFirstWorkflow/executions/9714c400-c8ce-4495-bdf8-fec3d1c4aaf7
    result: '["Tuesday","Tuesday Weld","Tuesday Night Music Club","Tuesday (iLoveMakonnen
      song)","Tuesdays with Morrie","Tuesday Knight","Tuesday Night Baseball","Tuesday
      Vargas","Tuesday Morning Quarterback","Tuesdays with Morrie (film)"]'
    startTime: '2022-07-19T13:49:59.901548541Z'
    state: SUCCEEDED
    status:
      currentSteps:
      - routine: main
        step: returnOutput
    workflowRevisionId: 000001-ac2
    

これで最初のワークフローのデプロイと実行が完了しました。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。

  1. 作成したワークフローを削除します。

    gcloud workflows delete myFirstWorkflow
    
  2. 続行を確認するメッセージが表示されたら、「y」と入力します。

ワークフローが削除されます。

次のステップ