# How to ガイド - CLI におけるマルチステップアクションの実行

ここでは、Workato Gem を使用して、マルチステップアクションを実行したり、容易にデバッグしたりする方法について説明します。

# 前提条件

  • Workato SDK Gem をインストールして、実行可能であること。詳細については、「入門ガイド」を参照してください。
  • 少なくとも1つのマルチステップアクションを備えた、動作するコネクターがあること。
  • 有効な資格情報セットを所有していること。サンプルコネクターのコードを使用する場合、コネクター用に適切な資格情報を所有していることを確認してください。

# サンプルコネクター - Google BigQuery

こちらの BigQuery コネクターのサンプルをここでのサンプルとして使用します。

settings.yaml.enc に格納された資格情報です。

iss: service_account_email@example.com
private_key: "-----BEGIN PRIVATE KEY-----...-----END
  PRIVATE KEY-----\\n"
access_token: valid_access_token
expires_in: 3599
token_type: Bearer

TIP

暗号化された settings.yaml ファイルを使う場合は、workato edit <PATH> を使用して、このファイルを編集または作成する必要があります。詳細については、こちらを参照してください。

SDK Gem を使用すると、アクションの lambda 関数を個別に呼び出し、アクション各部の動作をより詳細に制御できるようになります。たとえば、input_fields lambda とは独立して execute lambda 関数を実行することができます。input_fields lambda や output_fields lambda の実行の詳細については、こちらのガイドを参照してください。

# マルチステップアクションの execute lambda の実行

マルチステップアクションでは、reinvoke_after などの特別なメソッドが、Workato のジョブを一定期間スリープさせることに注意する必要があります。

reinvoke_after(seconds: 10, continue: { current_step: current_step + 1, jobid: continue['jobid']})

TIP

Workato プラットフォームでは、ステップ時間が最低60秒に設定されています。しかし、SDK Emulator では、デバッグのため、チェック間のステップ時間をこれよりも短く設定できます。

execute lambda で上記メソッドを呼び出すと、ジョブが10秒間スリープしてから再び起動状態になり、 execute ブロックの先頭から 実行が始まることになります。SDK Gem はこの動作をエミュレートするため、Workato 上でアクションの動作を調べることができます。

この場合、ファイル bigquery_input.json の内容は以下のとおりです。

{
    "project_id": "named-reporter-237205",
    "query": "SELECT * FROM `named-reporter-237205.Lead_data.2mill_table` t1",
    "wait_for_query": "true"
}

マルチステップアクションを実行するには、通常のアクションと同じコマンドを指定します。

workato exec actions.query.execute --input='bigquery_input.json' --verbose

SETTINGS
{
  "iss": "service_account_email@example.com",
  "private_key": "-----BEGIN PRIVATE KEY-----...-----END
  PRIVATE KEY-----\\n",
  "access_token": "valid_access_token",
  "expires_in": 3599,
  "token_type": "Bearer"
}
INPUT
{
  "project_id": "named-reporter-237205",
  "query": "SELECT * FROM `named-reporter-237205.Lead_data.2mill_table` t1",
  "wait_for_query": "true"
}

RestClient.post "https://bigquery.googleapis.com/bigquery/v2/projects/named-reporter-237205/queries", "{\"query\":\"SELECT * FROM `named-reporter-237205.Lead_data.2mill_table` t1 left join `named-reporter-237205.Lead_data.2mill_table` t2 on t1.start_time = t2.start_time\",\"timeoutMs\":\"25000\",\"useLegacySql\":false}", "Accept"=>"application/json", "Accept-Encoding"=>"gzip, deflate", "Authorization"=>"Bearer ya29.c.Kp8BFQgUT1EOcK5YBwTEv60KokPYvLLWJRFsbfd9S0oGEB3cW5cp1pXTJRZreYPB4B06Z1_YdvhLQByhe9fP_FjziQc6rCtEfGs9zZdMZpXKUFHWEqzG44qxni-jibwaLEgWLw3zaqv42y00x28jUmZQdP3AQilOPdn1xRwf6s-gWi_95d1t0qDe478VnclTIrZ_SmCMtDTTbdU1yvkA80TQ...", "Content-Length"=>"207", "Content-Type"=>"application/json", "User-Agent"=>"rest-client/2.0.2 (darwin19.6.0 x86_64) ruby/2.4.10p364"
# => 200 OK | application/json 176 bytes       

RestClient.get "https://bigquery.googleapis.com/bigquery/v2/projects/named-reporter-237205/jobs/job_LnXWC2bcE64hzeBlYMPWNCsMwavn", "Accept"=>"application/json", "Accept-Encoding"=>"gzip, deflate", "Authorization"=>"Bearer ya29.c.Kp8BFQgUT1EOcK5YBwTEv60KokPYvLLWJRFsbfd9S0oGEB3cW5cp1pXTJRZreYPB4B06Z1_YdvhLQByhe9fP_FjziQc6rCtEfGs9zZdMZpXKUFHWEqzG44qxni-jibwaLEgWLw3zaqv42y00x28jUmZQdP3AQilOPdn1xRwf6s-gWi_95d1t0qDe478VnclTIrZ_SmCMtDTTbdU1yvkA80TQ...", "User-Agent"=>"rest-client/2.0.2 (darwin19.6.0 x86_64) ruby/2.4.10p364"
# => 200 OK | application/json 2062 bytes

OUTPUT
{
  "jobId": "abc123",
  "totalRows": 1000,
  "pageToken": "123abc",
  "rows": [
    ...rows...
  ],
  "manualLink": "https://www.example.com"
}

--verbose を使用して、SDK Gem が、API リクエストやレスポンスなど、より多くの情報を出力するようにしている点に注意してください。これにより、マルチステップの実際の動作を確認することもできます。ここでは、Gem によってリクエストの実行前にジョブの実行状況を調べるための待機を設定できます。

TIP

--output などのオプションを使用して、関数の出力を JSON ファイルに保存することもできます。


Last updated: 2023/8/31 1:07:14