このリファレンスでは、ロジック アプリの基となるワークフロー定義でトリガーとアクションを指定するために使用される一般的な種類について説明します。ワークフロー定義は、ワークフロー定義言語で記述および検証されます。 ロジック アプリで使用できる特定のコネクタ トリガーとアクションを見つけるには、[ コネクタの概要] の一覧を参照してください。
トリガーの概要
すべてのワークフローにはトリガーが含まれており、ワークフローをインスタンス化して開始する呼び出しはトリガーによって定義されます。 一般的なトリガーのカテゴリを次に示します。
定期的にサービスのエンドポイントをチェックする ポーリング トリガー
プッシュ トリガー。エンドポイントへのサブスクリプションを作成し、指定されたイベントが発生したとき、またはデータが使用可能になったときにエンドポイントがトリガーに通知できるようにコールバック URL を提供します。 このトリガーは、エンドポイントの応答を待って起動します。
トリガーには次に示す最上位要素がありますが、中には省略可能のものもあります。
"<trigger-name>": {
"type": "<trigger-type>",
"inputs": { "<trigger-inputs>" },
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"conditions": [ "<array-with-conditions>" ],
"runtimeConfiguration": { "<runtime-config-options>" },
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
},
Required
| Value | タイプ | Description |
|---|---|---|
| < trigger-name> | String | トリガーの名前 |
| < trigger-type> | String | トリガーの種類 ("Http" や "ApiConnection" など) |
| < trigger-inputs> | JSON オブジェクト | トリガーの動作を定義する入力 |
| < time-unit> | String | トリガーの起動間隔を表す時間の単位: "Second"、"Minute"、"Hour"、"Day"、"Week"、"Month" |
| < number-of-time-units> | Integer | トリガーの起動間隔を frequency に基づいて指定する値。トリガーが再び起動するまで待機する、時間の単位の数です。 間隔の最小値と最大値は次のとおりです。 - Month: 1-16 か月 - Day: 1-500 日 - Hour: 1-12,000 時間 - Minute: 1-72,000 分 - Second: 1-9,999,999 秒 たとえば、interval が 6 で frequency が "Month" の場合は、繰り返しは 6 か月ごとです。 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < array-with-conditions> | Array | ワークフローを実行するかどうかを決定する 1 つ以上の 条件 を含む配列。 トリガーに対してのみ使用できます。 |
| < runtime-config-options> | JSON オブジェクト | トリガーの実行時の動作を変更するには runtimeConfiguration のプロパティを設定します。 詳細については、「実行時の構成設定」を参照してください。 |
| < splitOn-expression> | String | 配列を返すトリガーの場合に、配列の項目を複数のワークフロー インスタンスに分割つまり "バッチ解除" して処理するための式を指定できます。 |
| < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
トリガーの種類の一覧
トリガーの動作を定義するインターフェイスと入力は、トリガーの種類ごとに異なります。
組み込みトリガー
| トリガーの種類 | Description |
|---|---|
| HTTP | 任意のエンドポイントを確認または ポーリングします 。 このエンドポイントは、特定のトリガー コントラクトに準拠して 202 非同期パターンを使用するか配列を返す必要があります。 |
| HTTPWebhook | ロジック アプリのための呼び出し可能エンドポイントを作成しますが、登録または登録解除は指定された URL を呼び出して行います。 |
| Recurrence | 定義済みのスケジュールに基づいて起動されます。 このトリガーを起動する、未来の日時を設定できます。 頻度に基づいて、ワークフローを実行する時間数および日数を指定することもできます。 |
| Request | ロジック アプリのための呼び出し可能エンドポイントを作成します。"手動" トリガーとも呼ばれます。 例については、HTTP エンドポイントを使用してワークフローを呼び出す、トリガーする、または入れ子にすることに関するページを参照してください。 |
マネージド API トリガー
| トリガーの種類 | Description |
|---|---|
| ApiConnection | Microsoft が管理する API または "コネクタ" を使用してエンドポイントを確認またはポーリングします。 |
| ApiConnectionWebhook | ロジック アプリ ワークフローのための呼び出し可能エンドポイントを作成します。これは、サブスクライブとサブスクライブ解除のための Microsoft マネージド API または "コネクタ" を呼び出すことによって行われます。 |
トリガー - 詳細なリファレンス
APIConnection トリガー
このトリガーは、Microsoft が管理する API または "コネクタ" を使用してエンドポイントをチェックまたはポーリングするため、このトリガーのパラメーターはエンドポイントによって異なる場合があります。 このトリガー定義の多くのセクションは省略可能です。 このトリガーの動作は、セクションが含まれるかどうかによって異なります。
"<APIConnection_trigger_name>": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['<connection-name>']['connectionId']"
}
},
"method": "<method-type>",
"path": "/<api-operation>",
"retryPolicy": { "<retry-behavior>" },
"queries": { "<query-parameters>" }
},
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
}
Required
| Property | Value | タイプ | Description |
|---|---|---|---|
| None | < APIConnection_trigger_name> | String | トリガーの名前 |
| host.connection.name | < 接続名> | String | ワークフローが使用するマネージド API への接続の名前 |
| method | < method-type> | String | マネージド API と通信するための HTTP メソッド: GET、 PUT、 POST、 PATCH、 DELETE |
| path | < api-operation> | String | 呼び出す API 操作 |
| recurrence.frequency | < time-unit> | String | トリガーが起動する頻度を表す時間の単位: Second、 Minute、 Hour、 Day、 Week、 Month |
| recurrence.interval | < number-of-time-units> | Integer | トリガーの起動間隔を frequency に基づいて指定する値。トリガーが再び起動するまで待機する、時間の単位の数です。 間隔の最小値と最大値は次のとおりです。 - Month: 1-16 か月 - Day: 1-500 日 - Hour: 1-12,000 時間 - Minute: 1-72,000 分 - Second: 1-9,999,999 秒 たとえば、間隔が 6 で頻度が Month の場合、繰り返しは 6 か月ごとに行われます。 |
Optional
| Property | Value | タイプ | Description |
|---|---|---|---|
| retryPolicy | < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| queries | < query-parameters> | JSON オブジェクト | API 呼び出しに含めるクエリ パラメーター (ある場合)。 たとえば、"queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
| runtimeConfiguration.concurrency.runs | < max-runs> | Integer | 既定では、ワークフロー インスタンスは既定の制限まで同時に (同時または並列で) 実行 されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
| runtimeConfiguration.maximumWaitingRuns | < max-runs-queue> | Integer | ワークフローで既に最大数のインスタンスが実行されている場合、新しい実行はすべて 既定の制限までこのキューに配置されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 インスタンスの最大数を変更するには、 runtimeConfiguration.concurrency.runs プロパティの値を指定します。 注: |
| splitOn | < splitOn-expression> | String | 配列を返すトリガーの場合に、使用する配列をこの式で参照すると、配列の項目ごとにワークフロー インスタンスを作成して実行できるため、"for each" ループを使用する必要がなくなります。 たとえば、 @triggerbody()?['value'] という式は、トリガー本文の内容の中に返される配列の項目を表します。 |
| operationOptions | < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
Outputs
| Element | タイプ | Description |
|---|---|---|
| headers | JSON オブジェクト | 応答のヘッダー |
| body | JSON オブジェクト | 応答の本文 |
| 状態コード | Integer | 応答の状態コード |
Example
このトリガー定義では、職場または学校のアカウントの受信トレイ内の電子メールを毎日チェックします。
"When_a_new_email_arrives": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "get",
"path": "/Mail/OnNewEmail",
"queries": {
"fetchOnlyWithAttachment": false,
"folderPath": "Inbox",
"importance": "Any",
"includeAttachments": false
}
},
"recurrence": {
"frequency": "Day",
"interval": 1
}
}
ApiConnectionWebhook トリガー
このトリガーは、 Microsoft マネージド API を使用してエンドポイントにサブスクリプション要求を送信し、エンドポイントが応答を送信できる コールバック URL を 提供し、エンドポイントが応答するまで待機します。 詳細については、「 エンドポイント サブスクリプション」を参照してください。
"<ApiConnectionWebhook_trigger_name>": {
"type": "ApiConnectionWebhook",
"inputs": {
"body": {
"NotificationUrl": "@{listCallbackUrl()}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['<connection-name>']['connectionId']"
}
},
"retryPolicy": { "<retry-behavior>" },
"queries": "<query-parameters>"
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-run-queue>
}
},
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
}
Required
| Value | タイプ | Description |
|---|---|---|
| < 接続名> | String | ワークフローが使用するマネージド API への接続の名前 |
| < body-content> | JSON オブジェクト | マネージド API にペイロードとして送信するメッセージの内容 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| < query-parameters> | JSON オブジェクト | API 呼び出しに含めるクエリ パラメーター (ある場合) たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
| < max-runs> | Integer | 既定では、ワークフロー インスタンスは既定の制限まで同時に (同時または並列で) 実行 されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
| < max-runs-queue> | Integer |
runtimeConfiguration.concurrency.runs プロパティに基づいて変更できるインスタンスの最大数がワークフローで既に実行されている場合、新しい実行はすべて既定の制限までこのキューに格納されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
| < splitOn-expression> | String | 配列を返すトリガーの場合に、使用する配列をこの式で参照すると、配列の項目ごとにワークフロー インスタンスを作成して実行できるため、"for each" ループを使用する必要がなくなります。 たとえば、 @triggerbody()?['value'] という式は、トリガー本文の内容の中に返される配列の項目を表します。 |
| < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
Example
このトリガー定義は、Office 365 Outlook API にサブスクライブし、API エンドポイントに対してコールバック URL を提供し、新しい電子メールが到着してエンドポイントが応答するまで待ちます。
"When_a_new_email_arrives_(webhook)": {
"type": "ApiConnectionWebhook",
"inputs": {
"body": {
"NotificationUrl": "@{listCallbackUrl()}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"path": "/MailSubscription/$subscriptions",
"queries": {
"folderPath": "Inbox",
"hasAttachment": "Any",
"importance": "Any"
}
},
"splitOn": "@triggerBody()?['value']"
}
HTTP トリガー
このトリガーは、指定された繰り返しスケジュールに基づいて、指定された HTTP または HTTPS エンドポイントに要求を送信します。 その後は、応答をチェックしてワークフローを実行するかどうかを判断します。 詳細については、「Azure Logic Apps から HTTP または HTTPS でサービス エンドポイントを呼び出す」を参照してください。
"HTTP": {
"type": "Http",
"inputs": {
"method": "<method-type>",
"uri": "<HTTP-or-HTTPS-endpoint-URL>",
"headers": { "<header-content>" },
"queries": "<query-parameters>",
"body": "<body-content>",
"authentication": { "<authentication-type-and-property-values>" },
"retryPolicy": {
"type": "<retry-behavior>"
}
},
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
Required
| Property | Value | タイプ | Description |
|---|---|---|---|
method |
< method-type> | String | 発信要求の送信に使用するメソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
uri |
< HTTP または HTTPS-endpoint-URL> | String | 発信要求の送信先となる HTTP または HTTPS エンドポイント URL。 文字列の最大サイズ: 2 KB Azure のサービスまたはリソースの場合は、アクセスしたいリソースのリソース ID とパスがこの URI 構文に含まれます。 |
frequency |
< time-unit> | String | トリガーの起動間隔を表す時間の単位: "Second"、"Minute"、"Hour"、"Day"、"Week"、"Month" |
interval |
< number-of-time-units> | Integer | トリガーの起動間隔を frequency に基づいて指定する値。トリガーが再び起動するまで待機する、時間の単位の数です。 間隔の最小値と最大値は次のとおりです。 - Month: 1-16 か月 - Day: 1-500 日 - Hour: 1-12,000 時間 - Minute: 1-72,000 分 - Second: 1-9,999,999 秒 たとえば、interval が 6 で frequency が "Month" の場合は、繰り返しは 6 か月ごとです。 |
Optional
| Property | Value | タイプ | Description |
|---|---|---|---|
headers |
< header-content> | JSON オブジェクト | 要求に含める必要があるヘッダー (ある場合) 言語と種類を設定する場合の例を次に示します。 "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< query-parameters> | JSON オブジェクト | 要求の中で使用する必要があるクエリ パラメーター (ある場合) たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が要求に追加されます。 |
body |
< body-content> | JSON オブジェクト | ペイロードとして要求とともに送信するメッセージの内容 |
authentication |
< authentication-type-and-property-values> | JSON オブジェクト | この要求で外部への要求の認証に使用される認証モデル。 詳細については、「送信呼び出しに認証を追加する」を参照してください。 Scheduler 以外に、authority プロパティがサポートされています。 指定されていないときの既定値は https://management.azure.com/ ですが、別の値を使用できます。 |
retryPolicy > type |
< retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
runs |
< max-runs> | Integer | 既定では、ワークフロー インスタンスは既定の制限まで同時に (同時または並列で) 実行 されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
maximumWaitingRuns |
< max-runs-queue> | Integer |
runtimeConfiguration.concurrency.runs プロパティに基づいて変更できるインスタンスの最大数がワークフローで既に実行されている場合、新しい実行はすべて既定の制限までこのキューに格納されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
operationOptions |
< operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
Outputs
| Element | タイプ | Description |
|---|---|---|
headers |
JSON オブジェクト | 応答のヘッダー |
body |
JSON オブジェクト | 応答の本文 |
status code |
Integer | 応答の状態コード |
着信要求についての要件
エンドポイントがロジック アプリと適切に連携するためには、特定のトリガー パターンまたはコントラクトに準拠し、以下の応答プロパティを認識する必要があります。
| Property | Required | Description |
|---|---|---|
| 状態コード | Yes | 状態コード "200 OK" のときに実行が開始されます。 状態コードがその他のときは、実行は開始されません。 |
| Retry-after ヘッダー | No | ロジック アプリがエンドポイントを再度ポーリングするまでの秒数 |
| Location ヘッダー | No | 次のポーリング間隔で呼び出す URL です。 指定されていない場合は、元の URL が使用されます。 |
さまざまな要求の動作の例
| 状態コード | 再試行後 | Behavior |
|---|---|---|
| 200 | {none} | ワークフローを実行し、定義済みの繰り返し間隔の後に、まだデータがあるかどうかを再度チェックします。 |
| 200 | 10 秒 | ワークフローを実行し、10 秒後に、まだデータがあるかどうかを再度チェックします。 |
| 202 | 60 秒 | ワークフローをトリガーしません。 次の試行は、定義済みの繰り返しに従って 1 分後に行われます。 定義済みの繰り返しが 1 分未満の場合は、retry-after ヘッダーが優先されます。 それ以外の場合は、定義済みの繰り返しが使用されます。 |
| 400 | {none} | 要求が正しくないため、ワークフローを実行しません。
retryPolicy が定義されていない場合は、既定のポリシーが使用されます。 再試行回数に達した後は、定義済みの繰り返し間隔の後に、データがあるかどうかをトリガーが再度チェックします。 |
| 500 | {none} | サーバー エラーのため、ワークフローを実行しません。
retryPolicy が定義されていない場合は、既定のポリシーが使用されます。 再試行回数に達した後は、定義済みの繰り返し間隔の後に、データがあるかどうかをトリガーが再度チェックします。 |
HTTPWebhook トリガー
このトリガーを使用すると、ロジック アプリを呼び出し可能にすることができます。具体的にはエンドポイントが作成され、指定したエンドポイントの URL を呼び出してサブスクリプションを登録できます。 ワークフロー内にこのトリガーを作成すると、発信要求によってこのサブスクリプションを登録する呼び出しが行われます。 これで、トリガーはイベントのリッスンを開始できます。 操作によってこのトリガーが無効になったときは、このサブスクリプションを取り消す呼び出しが発信要求によって自動的に行われます。 詳細については、「 エンドポイント サブスクリプション」を参照してください。
HTTPWebhook トリガーで非同期制限を指定することもできます。 トリガーの動作は、どのセクションを使用または省略するかによって異なります。
"HTTP_Webhook": {
"type": "HttpWebhook",
"inputs": {
"subscribe": {
"method": "<method-type>",
"uri": "<endpoint-subscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"retryPolicy": { "<retry-behavior>" }
},
"unsubscribe": {
"method": "<method-type>",
"url": "<endpoint-unsubscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" }
}
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
<
method-type> などの一部の値は、"subscribe"オブジェクトと"unsubscribe" オブジェクトの両方で使用できます。
Required
| Value | タイプ | Description |
|---|---|---|
| < method-type> | String | サブスクリプション要求に使用する HTTP メソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
| < endpoint-subscribe-URL> | String | サブスクリプション要求の送信先であるエンドポイント URL |
Optional
| Value | タイプ | Description |
|---|---|---|
| < method-type> | String | 取り消し要求に使用する HTTP メソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
| < endpoint-unsubscribe-URL> | String | 取り消し要求の送信先であるエンドポイント URL |
| < body-content> | String | サブスクリプションまたは取り消しの要求で送信するメッセージの内容 |
| < 認証タイプ> | JSON オブジェクト | この要求で外部への要求の認証に使用される認証モデル。 詳細については、「送信呼び出しに認証を追加する」を参照してください。 |
| < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| < max-runs> | Integer | 既定では、ワークフロー インスタンスはすべて、 既定の制限まで同時に (同時または並列に) 実行されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
| < max-runs-queue> | Integer |
runtimeConfiguration.concurrency.runs プロパティに基づいて変更できるインスタンスの最大数がワークフローで既に実行されている場合、新しい実行はすべて既定の制限までこのキューに格納されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
| < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
Outputs
| Element | タイプ | Description |
|---|---|---|
| headers | JSON オブジェクト | 応答のヘッダー |
| body | JSON オブジェクト | 応答の本文 |
| 状態コード | Integer | 応答の状態コード |
Example
このトリガーは、指定されたエンドポイントへのサブスクリプションを作成し、一意のコールバック URL を提供し、新たに公開される技術情報記事を待ちます。
"HTTP_Webhook": {
"type": "HttpWebhook",
"inputs": {
"subscribe": {
"method": "POST",
"uri": "https://pubsubhubbub.appspot.com/subscribe",
"body": {
"hub.callback": "@{listCallbackUrl()}",
"hub.mode": "subscribe",
"hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
},
},
"unsubscribe": {
"method": "POST",
"url": "https://pubsubhubbub.appspot.com/subscribe",
"body": {
"hub.callback": "@{workflow().endpoint}@{listCallbackUrl()}",
"hub.mode": "unsubscribe",
"hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
}
}
}
}
繰り返しトリガー
このトリガーは、指定された繰り返しスケジュールに基づいて実行されるものであり、定期的に実行されるワークフローを作成するための簡単な方法として利用できます。
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
"startTime": "<start-date-time-with-format-YYYY-MM-DDThh:mm:ss>",
"timeZone": "<time-zone>",
"schedule": {
// Applies only when frequency is Day or Week. Separate values with commas.
"hours": [ <one-or-more-hour-marks> ],
// Applies only when frequency is Day or Week. Separate values with commas.
"minutes": [ <one-or-more-minute-marks> ],
// Applies only when frequency is Week. Separate values with commas.
"weekDays": [ "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday" ]
}
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
Required
| Value | タイプ | Description |
|---|---|---|
| < time-unit> | String | トリガーの起動間隔を表す時間の単位: "Second"、"Minute"、"Hour"、"Day"、"Week"、"Month" |
| < number-of-time-units> | Integer | トリガーの起動間隔を frequency に基づいて指定する値。トリガーが再び起動するまで待機する、時間の単位の数です。 間隔の最小値と最大値は次のとおりです。 - Month: 1-16 か月 - Day: 1-500 日 - Hour: 1-12,000 時間 - Minute: 1-72,000 分 - Second: 1-9,999,999 秒 たとえば、interval が 6 で frequency が "Month" の場合は、繰り返しは 6 か月ごとです。 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < start-date-time-with-format-YYYY-MM-DDThh:mm:ss> | String | 次の形式の開始日時: タイム ゾーンを指定する場合は YYYY-MM-DDThh:mm:ss -or- タイム ゾーンを指定しない場合は YYYY-MM-DDThh:mm:ssZ たとえば、2017 年 9 月 18 日午後 2 時の場合は、「2017-09-18T14:00:00」と指定し、タイム ゾーン (たとえば "Pacific Standard Time") を指定します。タイム ゾーンを指定しない場合は、「2017-09-18T14:00:00Z」と指定します。 注: この開始時刻には、最大で 49 年先の時刻を指定できます。また、UTC の日付と時刻の形式 (ただし、UTC オフセットを除く) で日付と時刻に関する ISO 8601 規格に従っている必要があります。 タイム ゾーンを指定しない場合は、末尾にアルファベットの "Z" を、スペースを入れずに追加する必要があります。 この "Z" は、同等の 航海時間を指します。 単純なスケジュールでは、開始日時が初回の実行ですが、複雑なスケジュールでは、トリガーが作動するのは開始日時以降となります。 開始日時の詳細については、定期的に実行されるタスクの作成とスケジュールに関するページを参照してください。 |
| < タイム ゾーン> | String | 開始時刻を指定したときに限り適用されます。このトリガーに UTC オフセットを指定することはできないためです。 適用するタイム ゾーンを指定します。 |
| < 1 つ以上の時間マーク> | 整数または整数配列 |
frequency に "Day" または "Week" を指定した場合は、ワークフローを何時に実行するかを 0 以上 23 以下の 1 つまたは複数の整数としてコンマ区切りで指定できます。 たとえば "10"、"12"、"14" を指定した場合は、午前 10 時、正午、午後 2 時となります。 |
| < 1 分以上のマーク> | 整数または整数配列 |
frequency に "Day" または "Week" を指定した場合は、ワークフローを実行する時刻の分の部分を 0 以上 59 以下の 1 つまたは複数の整数としてコンマ区切りで指定できます。 たとえば、前の例で指定した時を使用し、分を「30」と指定した場合は、午前 10:30、午後 0:30、午後 2:30 となります。 |
| weekDays | 文字列または文字列配列 |
frequency に "Week" を指定した場合は、ワークフローを実行する 1 つまたは複数の曜日 ("Monday"、"Tuesday"、"Wednesday"、"Thursday"、"Friday"、"Saturday"、および "Sunday") をコンマ区切りで指定できます。 |
| < max-runs> | Integer | 既定では、ワークフロー インスタンスはすべて、 既定の制限まで同時に (同時または並列に) 実行されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
| < max-runs-queue> | Integer |
runtimeConfiguration.concurrency.runs プロパティに基づいて変更できるインスタンスの最大数がワークフローで既に実行されている場合、新しい実行はすべて既定の制限までこのキューに格納されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
| < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
例 1
次の基本的な Recurrence トリガーは、毎日実行されます。
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Day",
"interval": 1
}
}
例 2
トリガー起動の開始日時を指定できます。 次の Recurrence トリガーは、指定された日に開始し、それ以降は毎日起動します。
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Day",
"interval": 1,
"startTime": "2017-09-18T00:00:00Z"
}
}
例 3
次の Recurrence トリガーは、2017 年 9 月 9 日午後 2 時に開始し、毎週月曜日の午前 10 時 30 分、午後 0 時 30 分、および午後 2 時 30 分 (太平洋標準時) に起動します。
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Week",
"interval": 1,
"schedule": {
"hours": [ 10, 12, 14 ],
"minutes": [ 30 ],
"weekDays": [ "Monday" ]
},
"startTime": "2017-09-07T14:00:00",
"timeZone": "Pacific Standard Time"
}
}
このトリガーに関するその他の情報と例については、定期的に実行されるタスクの作成とスケジュールに関するページを参照してください。
要求トリガー
このトリガーを使用すると、着信要求を受け入れることができるエンドポイントが作成されるため、ロジック アプリが呼び出し可能になります。 このトリガーに対しては、着信要求からトリガーが受け取るペイロード、つまり入力を記述および検証する JSON スキーマを指定します。 このスキーマには、トリガーのプロパティをワークフロー内の後続のアクションから参照しやすくするという利点もあります。
Note
要求トリガーの元の名前は手動であり、一部の場所に表示される場合があります。 この名前は、トリガーを使用してビルドするワークフロー パターンの種類に関する一貫性を高めるために変更されました。
このトリガーを呼び出すには、listCallbackUrl API を使用する必要があります。これについては、ワークフロー サービス REST API の説明を参照してください。 このトリガーを HTTP エンドポイントとして使用する方法については、HTTP エンドポイントを使用してワークフローを呼び出す、トリガーする、または入れ子にすることに関するページを参照してください。
"Request": {
"type": "Request",
"kind": "Http",
"inputs": {
"method": "<method-type>",
"relativePath": "<relative-path-for-accepted-parameter>",
"schema": {
"type": "object",
"properties": {
"<property-name>": {
"type": "<property-type>"
}
},
"required": [ "<required-properties>" ]
}
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-run-queue>
},
},
"operationOptions": "<operation-option>"
}
Required
| Value | タイプ | Description |
|---|---|---|
| < property-name> | String | ペイロードを記述する JSON スキーマ内のプロパティの名前 |
| < property-type> | String | プロパティの型 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < method-type> | String | 着信要求がロジック アプリを呼び出すために使用する必要があるメソッド: "GET"、"PUT"、"POST"、"PATCH"、"DELETE" |
| < relative-path-for-accepted-parameter> | String | エンドポイントの URL が受け入れ可能なパラメーターの相対パス |
| < required-properties> | Array | 値が必要な 1 つ以上のプロパティ |
| < max-runs> | Integer | 既定では、ワークフロー インスタンスはすべて、 既定の制限まで同時に (同時または並列に) 実行されます。 新しい <count> 値を設定してこの制限を変更するには、「 トリガーのコンカレンシーの変更」を参照してください。 |
| < max-runs-queue> | Integer |
runtimeConfiguration.concurrency.runs プロパティに基づいて変更できるインスタンスの最大数がワークフローで既に実行されている場合、新しい実行はすべて既定の制限までこのキューに格納されます。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
| < operation-option> | String | 既定の動作を変更するには operationOptions プロパティを設定します。 詳細については、「 操作オプション」を参照してください。 |
Example
このトリガーでは、着信要求がこのトリガーを呼び出すために HTTP POST メソッドを使用する必要があることが指定されており、着信要求からの入力を検証するスキーマが含まれています。
"Request": {
"type": "Request",
"kind": "Http",
"inputs": {
"method": "POST",
"schema": {
"type": "object",
"properties": {
"customerName": {
"type": "String"
},
"customerAddress": {
"type": "Object",
"properties": {
"streetAddress": {
"type": "string"
},
"city": {
"type": "string"
}
}
}
}
}
}
}
トリガー条件
どのトリガーにも、ワークフローを実行するかどうかを決める条件を表す 1 つまたは複数の式が格納された配列を含めることができ、これができるのはトリガーだけです。 ワークフロー内のトリガーに conditions プロパティを追加するには、ロジック アプリをコード ビュー エディターで開きます。
たとえば、Web サイトから内部サーバー エラーが返されたときに限ってトリガーが起動するように指定する場合は、次のようにトリガーの状態コードを conditions プロパティ内で参照します。
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Hour",
"interval": 1
},
"conditions": [ {
"expression": "@equals(triggers().code, 'InternalServerError')"
} ]
}
既定では、"200 OK" の応答を受信した後に限り、トリガーが起動します。 式でトリガーの状態コードが参照されているときは、トリガーの既定の動作が置き換えられます。 そのため、複数の状態コードに対してトリガーを起動させるには (たとえば状態コード "200" と "201")、この式を条件として含める必要があります。
@or(equals(triggers().code, 200),equals(triggers().code, 201))
配列で複数のワークフロー実行をトリガーする
ワークフローが処理のために配列を受け取るトリガーを使用するシナリオでは、 For each ループの使用に時間がかかりすぎる場合があります。 処理を高速化するには、 並列分岐を作成する方法があります。 または、トリガーで バッチ解除がサポートされている場合は、トリガーで配列項目を分割し、配列項目ごとに個別のワークフロー インスタンスを実行することができます。 このオプションは、たとえば、ポーリング間隔の間に複数の新しい項目を返すエンドポイントをポーリングする場合に便利です。
配列を受け入れて配列を返すことができるトリガーのみが、 要求、 HTTP、Azure Service Bus、Office Outlook 365 などのこの機能をサポートします。 これらのトリガーの場合、ワークフロー デザイナーで [ 分割 ] 設定をオンにして、 splitOn プロパティをトリガー定義に追加できます。
Note
トリガーの Swagger ファイルに配列であるペイロードが記述されている場合、 splitOn プロパティがトリガー定義に自動的に追加されます。 そうでない場合、トリガーは配列を受け入れることができ、デバッチする配列を含む応答ペイロードにプロパティを追加できます。
デバッチ機能を使用する前に、次の考慮事項を確認してください。
トリガーのコンカレンシーも有効になっている場合、 分割の制限 が大幅に削減されます。 項目の数がこの制限を超えた場合、 分割 機能は使用できません。
分割機能は、同期応答パターンでは機能しません。 ワークフローで 応答 アクションを使用し、 設定の分割を 有効にすると、非同期的に実行され、すぐに
202 ACCEPTED応答が送信されます。分割対象の配列項目の数に制限が存在し、1 回のワークフロー実行で処理できます。 詳細については、「 ループとバッチ処理の制限」を参照してください。
splitOnプロパティを使用してトリガー定義を使用してデバッチ処理を設定した場合、配列の外部に存在するプロパティを直接参照したり、アクセスしたりすることはできません。 エラーを回避するには、参照の前に?演算子を付けます。 例については、 トリガー定義でデバッチを有効にするを参照してください。
デザイナーでデバッチ処理を有効にする
ワークフロー デザイナーで次の手順に従って、サポートされているトリガーにデバッチ処理を設定します。
[Azure portal] で、ロジック アプリ リソースを開きます。
デザイナーでワークフローを開きます。
デザイナーで、デバッチ処理をサポートするトリガーを選択して、トリガー情報ペインを開きます。
[ 設定] タブの [ 全般] で、[ 分割] の 設定を見つけて、オンにしていない場合は設定を [オン ] に変更します。
トリガー定義でデバッチを有効にする
一部のトリガーでは配列が処理されますが、設定 の分割 はデザイナーでは使用できません。 このようなトリガーの場合は、次の手順に従って、トリガー定義に splitOn プロパティを追加します。
たとえば、ワークフローで HTTP トリガーを使用して API を呼び出し、次の応答を取得するとします。
{
"Status": "Succeeded",
"Rows": [
{
"id": 938109380,
"name": "customer-name-one"
},
{
"id": 938109381,
"name": "customer-name-two"
}
]
}
ワークフローで Rows 配列のコンテンツのみが必要な場合は、次の例に示すように、トリガー定義に splitOn プロパティを追加して設定できます。
"HTTP_trigger_debatch": {
"type": "Http",
"inputs": {
"uri": "https://mydomain.com/myAPI",
"method": "GET"
},
"recurrence": {
"frequency": "Second",
"interval": 1
},
"splitOn": "@triggerBody()?.Rows"
}
Note
splitOn プロパティを使用する場合は、配列の外部に存在するプロパティに直接アクセスしたり参照したりできないことに注意してください。 エラーを回避するには、例に示すように ? 演算子を使用します。
ワークフロー定義では、 splitOn と @triggerBody().name を使用して、 name プロパティから値を取得することもできます。 これらの値は、最初のワークフロー実行から "customer-name-one" され、2 番目のワークフロー実行から "customer-name-two" されます。 この例では、トリガーの出力は次の値のようになります。
{
"body": {
"id": 938109380,
"name": "customer-name-one"
}
}
{
"body": {
"id": 938109381,
"name": "customer-name-two"
}
}
アクションの概要
Azure Logic Apps には、さまざまなアクションの種類があり、それぞれに異なる入力が使用されてアクションの固有の動作が定義されます。 アクションには以下の上位要素がありますが、中には省略可能のものもあります。
"<action-name>": {
"type": "<action-type>",
"inputs": {
"<input-name>": { "<input-value>" },
"retryPolicy": "<retry-behavior>"
},
"runAfter": { "<previous-trigger-or-action-status>" },
"runtimeConfiguration": { "<runtime-config-options>" },
"operationOptions": "<operation-option>"
},
Required
| Value | タイプ | Description |
|---|---|---|
| < action-name> | String | アクションの名前 |
| < action-type> | String | アクションの種類 ("Http" や "ApiConnection" など) |
| < input-name> | String | アクションの動作を定義する入力の名前 |
| < input-value> | Various | 入力値。文字列、整数、JSON オブジェクトなどが可能です。 |
| < previous-trigger-or-action-status> | JSON オブジェクト | 現在のこのアクションを実行可能にするために直前に実行される必要のあるトリガーまたはアクションの名前と結果の状態 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「再試行ポリシー」を参照してください。 |
| < runtime-config-options> | JSON オブジェクト | 一部のアクションについては、runtimeConfiguration プロパティを設定してアクションの動作を実行時に変更できます。 詳細については、「実行時の構成設定」を参照してください。 |
| < operation-option> | String | 一部のアクションについては、operationOptions プロパティを設定して既定の動作を変更できます。 詳細については、「 操作オプション」を参照してください。 |
アクションの種類の一覧
よく使用されるアクションの種類を次に示します。
組み込みアクションの種類。主な例は次のとおりです。
HTTP または HTTPS 経由でエンドポイントを呼び出すための HTTP
要求に応答するための応答
JavaScript コードの実行: JavaScript コード スニペットを実行するため
Azure Functions を呼び出すための関数
別のロジック アプリ ワークフローを呼び出すためのワークフロー
マネージド API アクションの種類 (ApiConnection や ApiConnectionWebHook など) は、Microsoft が管理するさまざまなコネクタと API を呼び出します (たとえば、Azure Service Bus、Office 365 Outlook、Power BI、Azure Blob Storage、OneDrive、GitHub など)。
ワークフロー制御アクションの種類 (If、Foreach、Switch、Scope、Until など) は、その中で他のアクションが指定され、ワークフローの実行を調整するために使用できます。
組み込みアクション
| アクションの種類 | Description |
|---|---|
| Compose | 複数の入力 (それぞれ種類が異なっていてもかまいません) から、単一の出力を作成します。 |
| JavaScript コードの実行 | 特定の条件に適合する JavaScript コード スニペットを実行します。 コードの要件と詳細については、インライン コードを使用してコード スニペットを追加および実行することに関するページを参照してください。 |
| Function | Azure 関数を呼び出します。 |
| HTTP | HTTP エンドポイントを呼び出します。 |
| Join | 配列内のすべての項目から 1 個の文字列を作成し、指定された区切り文字を使ってこれらの項目を区切ります。 |
| JSON の解析 | JSON のコンテンツ内にあるプロパティから、ユーザー フレンドリなトークンを作成します。 これで、そのトークンをロジック アプリ内に含めるという方法でそのプロパティを参照できます。 |
| Query | 条件またはフィルターに基づいて配列を別の配列内の項目から作成します。 |
| Response | 着信する呼び出しまたは要求に対する応答を作成します。 |
| Select | JSON オブジェクトの配列を、指定されたマップに基づいて別の配列からの項目を変換することによって作成します。 |
| Table | CSV または HTML のテーブルを配列から作成します。 |
| Terminate | アクティブに実行中のワークフローを停止します。 |
| Wait | 指定された長さの時間が経過するまで、または指定された日時まで、ワークフローを一時停止します。 |
| Workflow | ワークフローを別のワークフローの中に入れ子にします。 |
マネージド API アクション
| アクションの種類 | Description |
|---|---|
| ApiConnection | Microsoft マネージド API を使用して HTTP エンドポイントを呼び出します。 |
| ApiConnectionWebhook | HTTP Webhook と同様に機能しますが、 Microsoft が管理する API を使用します。 |
ワークフロー制御アクション
これらのアクションは、ワークフローの実行を制御するのに利用でき、他のアクションを含めることができます。 ワークフロー制御アクションの外側から、そのワークフロー制御アクションの内側にあるアクションを直接参照できます。 たとえば、あるスコープの内側に Http アクションがある場合に、@body('Http') という式をワークフロー内のどこからでも参照できます。 ただし、ワークフロー制御アクションの内側に存在するアクションは、同じワークフロー制御構造体の中にある他のアクションの "後に実行" することしかできません。
| アクションの種類 | Description |
|---|---|
| ForEach | 同じアクションを配列内の項目それぞれに対してループ実行します。 |
| If | 指定された条件が true か false かに基づいて、アクションを実行します。 |
| Scope | 一連のアクションの結果であるグループ状態に基づいてアクションを実行します。 |
| Switch | アクションをいくつかのケースに分類し、式、オブジェクト、またはトークンの値が各ケースで指定された値と一致する場合に、そのアクションを実行します。 |
| Until | 指定された条件が true になるまで、アクションをループ実行します。 |
アクション - 詳細なリファレンス
APIConnection アクション
このアクションは 、Microsoft が管理する API に HTTP 要求を送信し、API とパラメーターに関する情報と、有効な接続への参照を必要とします。
"<action-name>": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['<api-name>']['connectionId']"
},
"<other-action-specific-input-properties>"
},
"method": "<method-type>",
"path": "/<api-operation>",
"retryPolicy": "<retry-behavior>",
"queries": { "<query-parameters>" },
"<other-action-specific-properties>"
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < action-name> | String | コネクタによって提供されるアクションの名前 |
| < api-name> | String | 接続に使用される Microsoft マネージド API の名前 |
| < method-type> | String | API を呼び出すための HTTP メソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
| < api-operation> | String | 呼び出す API 操作 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < other-action-specific-input-properties> | JSON オブジェクト | この特定のアクションに適用するその他の入力プロパティ |
| < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| < query-parameters> | JSON オブジェクト | API 呼び出しに含めるクエリ パラメーター (ある場合)。 たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
| < other-action-specific-properties> | JSON オブジェクト | この特定のアクションに適用されるその他のプロパティ (ある場合) |
Example
この定義は、Microsoft マネージド API である Office 365 Outlook コネクタに対するメールの送信アクションを記述するものです。
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "Thank you for your membership!",
"Subject": "Hello and welcome!",
"To": "Sophie.Owen@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "POST",
"path": "/Mail"
},
"runAfter": {}
}
APIConnectionWebhook アクション
このアクションは、 Microsoft マネージド API を使用して HTTP 経由でエンドポイントにサブスクリプション要求を送信し、エンドポイントが応答を送信できる コールバック URL を 提供し、エンドポイントが応答するまで待機します。 詳細については、「 エンドポイント サブスクリプション」を参照してください。
"<action-name>": {
"type": "ApiConnectionWebhook",
"inputs": {
"subscribe": {
"method": "<method-type>",
"uri": "<api-subscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"retryPolicy": "<retry-behavior>",
"queries": { "<query-parameters>" },
"<other-action-specific-input-properties>"
},
"unsubscribe": {
"method": "<method-type>",
"uri": "<api-unsubscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"<other-action-specific-properties>"
},
},
"runAfter": {}
}
<
method-type> などの一部の値は、"subscribe"オブジェクトと"unsubscribe" オブジェクトの両方で使用できます。
Required
| Value | タイプ | Description |
|---|---|---|
| < action-name> | String | コネクタによって提供されるアクションの名前 |
| < method-type> | String | エンドポイントのサブスクライブまたはサブスクライブ解除に使用する HTTP メソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
| < api-subscribe-URL> | String | API へのサブスクライブに使用する URI |
Optional
| Value | タイプ | Description |
|---|---|---|
| < api-unsubscribe-URL> | String | API のサブスクライブ解除に使用する URI |
| < header-content> | JSON オブジェクト | 要求で送信するヘッダー (ある場合) 言語と種類を要求で設定する場合の例を次に示します。 "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < body-content> | JSON オブジェクト | 要求で送信するメッセージの内容 |
| < 認証タイプ> | JSON オブジェクト | この要求で外部への要求の認証に使用される認証モデル。 詳細については、「送信呼び出しに認証を追加する」を参照してください。 |
| < retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| < query-parameters> | JSON オブジェクト | API 呼び出しに含めるクエリ パラメーター (ある場合) たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
| < other-action-specific-input-properties> | JSON オブジェクト | この特定のアクションに適用するその他の入力プロパティ |
| < other-action-specific-properties> | JSON オブジェクト | この特定のアクションに適用されるその他のプロパティ (ある場合) |
APIConnectionWebhook アクションの制限は、HTTP 非同期制限と同じ方法で指定することもできます。
作成アクション
このアクションは、複数の入力 (これには式も含まれます) から単一の出力を作成します。 出力と入力のどちらも、Azure Logic Apps でネイティブにサポートされている任意の型 (配列、JSON オブジェクト、XML、バイナリなど) を使用できます。 このアクションの出力を他のアクションで使用できます。
"Compose": {
"type": "Compose",
"inputs": "<inputs-to-compose>",
"runAfter": {}
},
Required
| Value | タイプ | Description |
|---|---|---|
| < inputs-to-compose> | Any | 単一の出力を作成するための複数入力 |
例 1
このアクション定義によって、abcdefg に後続のスペースと値 1234 が結合されます。
"Compose": {
"type": "Compose",
"inputs": "abcdefg 1234",
"runAfter": {}
},
このアクションで作成される出力は次のようになります。
abcdefg 1234
例 2
このアクション定義によって、abcdefg が格納された文字列型の変数と、1234 が格納された整数型の変数が結合されます。
"Compose": {
"type": "Compose",
"inputs": "@{variables('myString')}@{variables('myInteger')}",
"runAfter": {}
},
このアクションで作成される出力は次のようになります。
"abcdefg1234"
JavaScript コードの実行アクション
このアクションは、JavaScript コード スニペットを実行し、その結果を、ワークフロー内の後続のアクションが参照できるトークンとして返します。
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "<JavaScript-code-snippet>",
"explicitDependencies": {
"actions": [ <preceding-actions> ],
"includeTrigger": true
}
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < JavaScript-code-snippet> | Varies | 実行したい JavaScript コード。 コードの要件と詳細については、「ワークフローでコード スニペットを実行する」を参照してください。 code 属性の中のコード スニペットは、読み取り専用の workflowContext オブジェクトを入力として使用できます。 このオブジェクト内のサブプロパティにより、コードからワークフロー内のトリガーや以前のアクションの出力結果にアクセスできます。
workflowContext オブジェクトの詳細についは、「workflowContext オブジェクトを使用してトリガーとアクションの出力を参照する」を参照してください。 |
場合により必須
explicitDependencies 属性は、トリガー、前のアクション、またはその両方からの結果をコード スニペットのための依存関係として明示的に含めることを指定します。 これらの依存関係の追加の詳細については、「インライン コード アクションに依存関係をパラメーターとして追加する」を参照してください。
includeTrigger 属性には、true または false という値を指定できます。
| Value | タイプ | Description |
|---|---|---|
| < preceding-actions> | 文字列配列 | JSON 形式のアクション名を依存関係として持つ配列。 ワークフロー定義に表示されるアクション名を使用してください。アクション名には、スペース (" ") ではなくアンダースコア (_) が使用されます。 |
例 1
このアクションで実行されるコードは、ロジック アプリ ワークフローの名前を取得して、"Hello world from <logic-app-name>" というテキストを結果として返します。 この例では、コードはワークフローの名前を参照するために読み取り専用の workflowContext.workflow.name オブジェクトを介して workflowContext プロパティにアクセスします。
workflowContext オブジェクトの使用方法の詳細については、コード内でトリガーとアクションの結果を参照することについてのページを参照してください。
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "var text = \"Hello world from \" + workflowContext.workflow.name;\r\n\r\nreturn text;"
},
"runAfter": {}
}
例 2
このアクションは、Outlook アカウントに新しい電子メールが届いたときにトリガーされるロジック アプリ ワークフロー内でコードを実行します。 このワークフローでは、受信した電子メールの内容と承認要求を転送する、Office 365 Outlook の承認メールの送信アクションも使用します。
このコードは、電子メール メッセージの Body プロパティから電子メール アドレスを抽出し、そのアドレスと承認アクションの SelectedOption プロパティ値を返します。 このアクションは、承認メールの送信アクションを actions オブジェクト内の explicitDependencies オブジェクトに依存関係として明示的に含めます。
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "var myResult = /(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\r\n\r\nvar email = workflowContext.trigger.outputs.body.Body;\r\n\r\nvar reply = workflowContext.actions.Send_approval_email.outputs.body.SelectedOption;\r\n\r\nreturn email.match(myResult) + \" - \" + reply;\r\n;",
"explicitDependencies": {
"actions": [
"Send_approval_email"
]
}
},
"runAfter": {}
}
関数アクション
このアクションは、以前に作成した Azure 関数を呼び出します。
"<Azure-function-name>": {
"type": "Function",
"inputs": {
"function": {
"id": "<Azure-function-ID>"
},
"method": "<method-type>",
"headers": { "<header-content>" },
"body": { "<body-content>" },
"queries": { "<query-parameters>" }
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < Azure-function-ID> | String | 呼び出したい Azure 関数を表すリソース ID。 この値の形式は次のとおりです。 "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Web/sites/<Azure-function-app-name>/functions/<Azure-function-name>" |
| < method-type> | String | 関数を呼び出すために使用する HTTP メソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" 指定されていない場合の既定のメソッドは "POST" です。 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < header-content> | JSON オブジェクト | 呼び出しで送信するヘッダー (ある場合) 言語と種類を要求で設定する場合の例を次に示します。 "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < body-content> | JSON オブジェクト | 要求で送信するメッセージの内容 |
| < query-parameters> | JSON オブジェクト | API 呼び出しに含めるクエリ パラメーター (ある場合) たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
| < other-action-specific-input-properties> | JSON オブジェクト | この特定のアクションに適用するその他の入力プロパティ |
| < other-action-specific-properties> | JSON オブジェクト | この特定のアクションに適用されるその他のプロパティ (ある場合) |
ロジック アプリを保存すると、参照される関数に対するこれらのチェックが Azure Logic Apps によって実行されます。
ワークフローからその関数にアクセスできる必要があります。
ワークフローでは、標準 HTTP トリガーまたは汎用 JSON webhook トリガーだけを使用できます。
Azure Logic Apps によってトリガーの URL が取得されてキャッシュされ、これが実行時に使用されます。 ただし、キャッシュされた URL を無効にする操作がある場合、 関数 アクションは実行時に失敗します。 この問題を解決するには、ロジック アプリをもう一度保存します。これで、ロジック アプリによって再びトリガーの URL が取得されてキャッシュされます。
関数にルートが定義されていてはなりません。
許容される認可レベルは、"function" と "anonymous" だけです。
Example
このアクション定義は、作成済みの "GetProductID" 関数を呼び出します。
"GetProductID": {
"type": "Function",
"inputs": {
"function": {
"id": "/subscriptions/<XXXXXXXXXXXXXXXXXXXX>/resourceGroups/myLogicAppResourceGroup/providers/Microsoft.Web/sites/InventoryChecker/functions/GetProductID"
},
"method": "POST",
"headers": {
"x-ms-date": "@utcnow()"
},
"body": {
"Product_ID": "@variables('ProductID')"
}
},
"runAfter": {}
}
HTTP アクション
このアクションは、指定された HTTP または HTTPS エンドポイントに要求を送信し、応答を調べてワークフローを実行するかどうかを判断します。 詳細については、「Azure Logic Apps から HTTP または HTTPS でサービス エンドポイントを呼び出す」を参照してください。
"HTTP": {
"type": "Http",
"inputs": {
"method": "<method-type>",
"uri": "<HTTP-or-HTTPS-endpoint-URL>",
"headers": { "<header-content>" },
"queries": { "<query-parameters>" },
"body": "<body-content>",
"authentication": { "<authentication-type-and-property-values>" },
"retryPolicy": {
"type": "<retry-behavior>"
},
},
"runAfter": {}
}
Required
| Property | Value | タイプ | Description |
|---|---|---|---|
method |
< method-type> | String | 発信要求の送信に使用するメソッド: "GET"、"PUT"、"POST"、"PATCH"、または "DELETE" |
uri |
< HTTP または HTTPS-endpoint-URL> | String | 発信要求の送信先となる HTTP または HTTPS エンドポイント URL。 文字列の最大サイズ: 2 KB Azure のサービスまたはリソースの場合は、アクセスしたいリソースのリソース ID とパスがこの URI 構文に含まれます。 |
Optional
| Property | Value | タイプ | Description |
|---|---|---|---|
headers |
< header-content> | JSON オブジェクト | 要求に含める必要があるヘッダー (ある場合) 言語と種類を設定する場合の例を次に示します。 "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< query-parameters> | JSON オブジェクト | 要求の中で使用する必要があるクエリ パラメーター (ある場合) たとえば、 "queries": { "api-version": "2018-01-01" } というオブジェクトによって ?api-version=2018-01-01 が呼び出しに追加されます。 |
body |
< body-content> | JSON オブジェクト | ペイロードとして要求とともに送信するメッセージの内容 |
authentication |
< authentication-type-and-property-values> | JSON オブジェクト | この要求で外部への要求の認証に使用される認証モデル。 詳細については、「送信呼び出しに認証を追加する」を参照してください。 Scheduler 以外に、authority プロパティがサポートされています。 指定されていないときの既定値は https://management.azure.com/ ですが、別の値を使用できます。 |
retryPolicy > type |
< retry-behavior> | JSON オブジェクト | 断続的なエラー (状態コード 408、429、5XX) と接続の例外に対する再試行動作をカスタマイズします。 詳細については、「Retry policies (再試行ポリシー)」をご覧ください。 |
| < other-action-specific-input-properties> | < input-property> | JSON オブジェクト | この特定のアクションに適用するその他の入力プロパティ |
| < other-action-specific-properties> | < property-value> | JSON オブジェクト | この特定のアクションに適用されるその他のプロパティ (ある場合) |
Example
このアクション定義は、指定のエンドポイントに要求を送信して最新のニュースを取得します。
"HTTP": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "https://mynews.example.com/latest"
}
}
結合アクション
このアクションは、配列内のすべての項目から 1 個の文字列を作成し、指定された区切り文字を使ってこれらの項目を区切ります。
"Join": {
"type": "Join",
"inputs": {
"from": <array>,
"joinWith": "<delimiter>"
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < 配列> | Array | ソース項目を渡す配列または式。 式を指定する場合は、その式を二重引用符で囲みます。 |
| < デリミタ> | 1 文字の文字列 | 文字列内の各項目を区切る文字 |
Example
あらかじめ作成した "myIntegerArray" という変数があり、次の整数型配列が格納されているとします。
[1,2,3,4]
このアクション定義は、式の中で variables() 関数を使用してこの変数から値を取得し、これらの値をコンマで区切った "1,2,3,4" という文字列を作成します。
"Join": {
"type": "Join",
"inputs": {
"from": "@variables('myIntegerArray')",
"joinWith": ","
},
"runAfter": {}
}
JSON の解析アクション
このアクションにより、JSON コンテンツのプロパティからわかりやすいフィールドまたは トークン が作成されます。 そのプロパティにロジック アプリ内でアクセスするには、トークンを代わりに使用します。 たとえば、Azure Service Bus や Azure Cosmos DB などのサービスからの JSON 出力を使用したい場合に、このアクションをロジック アプリに追加すると、その出力の中のデータをより簡単に参照できます。
"Parse_JSON": {
"type": "ParseJson",
"inputs": {
"content": "<JSON-source>",
"schema": { "<JSON-schema>" }
},
"runAfter": {}
},
Required
| Value | タイプ | Description |
|---|---|---|
| < JSON ソース> | JSON オブジェクト | 解析する対象の JSON コンテンツ |
| < JSON スキーマ> | JSON オブジェクト | 基になる JSON コンテンツを記述する JSON スキーマ。このアクションでソースの JSON コンテンツを解析するために使用されます。 ヒント: ワークフロー デザイナーでは、スキーマを指定するか、アクションでスキーマを生成できるようにサンプル ペイロードを指定できます。 |
Example
このアクション定義は、ワークフローで使用できるトークンを作成しますが、 JSON の解析 アクションに従って実行されるアクションでのみ使用できます。
FirstName、LastName、Email
"Parse_JSON": {
"type": "ParseJson",
"inputs": {
"content": {
"Member": {
"Email": "Sophie.Owen@contoso.com",
"FirstName": "Sophie",
"LastName": "Owen"
}
},
"schema": {
"type": "object",
"properties": {
"Member": {
"type": "object",
"properties": {
"Email": {
"type": "string"
},
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
}
}
}
}
}
},
"runAfter": { }
},
この例では、アクションによる解析の対象である JSON コンテンツを "content" プロパティで指定しています。 スキーマを生成するためのサンプル ペイロードとして、次の JSON コンテンツを指定することもできます。
"content": {
"Member": {
"FirstName": "Sophie",
"LastName": "Owen",
"Email": "Sophie.Owen@contoso.com"
}
},
"schema" プロパティでは、JSON コンテンツを記述するために使用される JSON スキーマを指定します。
"schema": {
"type": "object",
"properties": {
"Member": {
"type": "object",
"properties": {
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
},
"Email": {
"type": "string"
}
}
}
}
}
クエリ アクション
このアクションは、指定された条件またはフィルターに基づいて配列を別の配列内の項目から作成します。
"Filter_array": {
"type": "Query",
"inputs": {
"from": <array>,
"where": "<condition-or-filter>"
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < 配列> | Array | ソース項目を渡す配列または式。 式を指定する場合は、その式を二重引用符で囲みます。 |
| < condition-or-filter> | String | ソース配列内の項目をフィルター処理するために使用される条件 注: 条件を満たす値がない場合、アクションは空の配列を作成します。 |
Example
このアクション定義は、指定された値 2 より大きい値の配列を作成します。
"Filter_array": {
"type": "Query",
"inputs": {
"from": [ 1, 3, 0, 5, 4, 2 ],
"where": "@greater(item(), 2)"
}
}
応答アクション
このアクションは、HTTP 要求に対する応答のペイロードを作成します。
"Response" {
"type": "Response",
"kind": "http",
"inputs": {
"statusCode": 200,
"headers": { <response-headers> },
"body": { <response-body> }
},
"runAfter": {}
},
Required
| Value | タイプ | Description |
|---|---|---|
| < response-status-code> | Integer | 着信要求に送信される HTTP 状態コード。 既定のコードは "200 OK" ですが、2xx、4xx、または 5xx で始まる任意の有効な状態コードを使用できます。3xxx で始まるコードは使用できません。 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < response-headers> | JSON オブジェクト | 応答に含める 1 つまたは複数のヘッダー |
| < response-body> | Various | 応答本文。文字列、JSON オブジェクト、または先行アクションからのバイナリ コンテンツを指定できます。 |
Example
このアクション定義は、指定された状態コード、メッセージ本文、メッセージ ヘッダーを使用して HTTP 要求への応答を作成します。
"Response": {
"type": "Response",
"inputs": {
"statusCode": 200,
"body": {
"ProductID": 0,
"Description": "Organic Apples"
},
"headers": {
"x-ms-date": "@utcnow()",
"content-type": "application/json"
}
},
"runAfter": {}
}
Restrictions
他のアクションとは異なり、 応答 アクションには特別な制限があります。
ワークフローで 応答 アクションを使用できるのは、ワークフローが HTTP 要求トリガーで始まる場合のみです。つまり、ワークフローは HTTP 要求によってトリガーされる必要があります。
ワークフローでは、Foreach ループ内、Until ループ (シーケンシャル ループを含む)、並列分岐を除く任意の場所で Response アクションを使用できます。
元の要求は、 応答 アクションに必要なすべてのアクションが HTTP タイムアウト制限内で完了した場合にのみ、ワークフローの応答を取得します。
ただし、ワークフローが、入れ子になったワークフローとして別のロジック アプリを呼び出す場合は、親ワークフローは入れ子になったワークフローが終了するまで、どれだけ時間がかかるかにかかわらず待機します。
ワークフローで 応答 アクションと同期応答パターンを使用する場合、そのコマンドは複数の実行を作成するため、トリガー定義で splitOn コマンドを使用することもできません。 PUT メソッドを使用する場合は、これに該当しているかどうかを調べて、該当している場合は "bad request (無効な要求)" 応答を返してください。
それ以外の場合、ワークフローで splitOn コマンドと 応答 アクションが使用されている場合、ワークフローは非同期的に実行され、すぐに "202 ACCEPTED" 応答が返されます。
ワークフローの実行が 応答 アクションに達しても、受信要求が既に応答を受信している場合、 応答 アクションは競合のために "失敗" としてマークされます。 その結果、ロジック アプリの実行も "Failed" 状態となります。
アクションの選択
このアクションは、JSON オブジェクトの配列を、指定されたマップに基づいて別の配列の項目を変換することによって作成します。 出力配列とソース配列の項目数は常に同じです。 出力配列内のオブジェクトの数は変更できませんが、これらのオブジェクトのプロパティとその値を追加または削除することはできます。
select プロパティには、キーと値のペアを少なくとも 1 つ指定し、これでソース配列内の項目を変換するためのマップを定義します。 キーと値のペアは、出力配列内のすべてのオブジェクトのプロパティとその値を表します。
"Select": {
"type": "Select",
"inputs": {
"from": <array>,
"select": {
"<key-name>": "<expression>",
"<key-name>": "<expression>"
}
},
"runAfter": {}
},
Required
| Value | タイプ | Description |
|---|---|---|
| < 配列> | Array | ソース項目を渡す配列または式。 式は必ず二重引用符で囲みます。 注: ソース配列が空の場合、アクションは空の配列を作成します。 |
| < key-name> | String |
<
expression の結果に割り当てられたプロパティ名> 出力配列内のすべてのオブジェクトに新しいプロパティを追加するには、そのプロパティの <key-name> とプロパティ値の <式> を指定します。 配列内のすべてのオブジェクトからプロパティを削除するには、そのプロパティの <key-name> を省略します。 |
| < 式 (expression)> | String | ソース配列内の項目を変換し、結果を <key-name に割り当てる式> |
Select アクションは出力として配列を作成するため、この出力を使用するアクションは配列を受け入れるか、コンシューマー アクションが受け入れる型に配列を変換する必要があります。 たとえば、出力配列を文字列に変換するには、その配列を Compose アクションに渡し、他のアクションで Compose アクションからの出力を参照します。
Example
このアクション定義は、JSON オブジェクトの配列を整数の配列から作成します。 アクションはソース配列を反復処理し、式 @item() を使用して各整数値を取得すると、各値を各 JSON オブジェクトの "number" プロパティに割り当てます。
"Select": {
"type": "Select",
"inputs": {
"from": [ 1, 2, 3 ],
"select": {
"number": "@item()"
}
},
"runAfter": {}
},
このアクションで作成される配列は次のようになります。
[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]
他のアクションでこの配列出力を使用するには、次の出力を Compose アクションに渡します。
"Compose": {
"type": "Compose",
"inputs": "@body('Select')",
"runAfter": {
"Select": [ "Succeeded" ]
}
},
その後、作成 アクションからの 出力を他のアクション ( Office 365 Outlook - メールの送信 アクションなど) で使用できます。
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{outputs('Compose')}",
"Subject": "Output array from Select and Compose actions",
"To": "<your-email@domain>"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {
"Compose": [ "Succeeded" ]
}
},
テーブル アクション
このアクションは、CSV または HTML のテーブルを配列から作成します。 JSON オブジェクトの配列の場合は、このアクションによって列ヘッダーが自動的にオブジェクトのプロパティ名から作成されます。 他のデータ型の配列の場合は、列ヘッダーと値をユーザーが指定する必要があります。 たとえば、この配列には "ID" と "Product_Name" というプロパティが含まれており、このアクションで列ヘッダー名として使用できます。
[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]
"Create_<CSV | HTML>_table": {
"type": "Table",
"inputs": {
"format": "<CSV | HTML>",
"from": <array>,
"columns": [
{
"header": "<column-name>",
"value": "<column-value>"
},
{
"header": "<column-name>",
"value": "<column-value>"
}
]
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| <CSV または HTML> | String | 作成するテーブルの形式 |
| < 配列> | Array | テーブルのソース項目を表す配列または式 注: ソース配列が空の場合、アクションによって空のテーブルが作成されます。 |
Optional
列ヘッダーと値を指定またはカスタマイズするには、columns 配列を使用します。 複数の header-value のペアのヘッダー名が同じである場合は、これらの値がそのヘッダー名の下の同じ列に表示されます。 それ以外の場合は、一意のヘッダーごとに一意の列が定義されます。
| Value | タイプ | Description |
|---|---|---|
| < column-name> | String | 列のヘッダー名 |
| < column-value> | Any | その列の中の値 |
例 1
あらかじめ作成した "myItemArray" という変数があり、現在は次の配列が格納されているとします。
[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]
このアクション定義によって、CSV テーブルが "myItemArray" 変数から作成されます。
from プロパティで使用されている式によって、variables() 関数を使用して "myItemArray" から配列が取得されます。
"Create_CSV_table": {
"type": "Table",
"inputs": {
"format": "CSV",
"from": "@variables('myItemArray')"
},
"runAfter": {}
}
このアクションで作成される CSV テーブルは次のようになります。
ID,Product_Name
0,Apples
1,Oranges
例 2
このアクション定義は、HTML テーブルを "myItemArray" 変数から作成します。
from プロパティで使用されている式によって、variables() 関数を使用して "myItemArray" から配列が取得されます。
"Create_HTML_table": {
"type": "Table",
"inputs": {
"format": "HTML",
"from": "@variables('myItemArray')"
},
"runAfter": {}
}
このアクションで作成される HTML テーブルは次のようになります。
| ID | Product_Name |
|---|---|
| 0 | Apples |
| 1 | Oranges |
例 3
このアクション定義は、HTML テーブルを "myItemArray" 変数から作成します。 ただし、この例では、既定の列ヘッダー名を "Stock_ID" と "Description" でオーバーライドし、"Description" 列の値に "Organic" という単語を追加します。
"Create_HTML_table": {
"type": "Table",
"inputs": {
"format": "HTML",
"from": "@variables('myItemArray')",
"columns": [
{
"header": "Stock_ID",
"value": "@item().ID"
},
{
"header": "Description",
"value": "@concat('Organic ', item().Product_Name)"
}
]
},
"runAfter": {}
},
このアクションで作成される HTML テーブルは次のようになります。
| Stock_ID | Description |
|---|---|
| 0 | 有機リンゴ |
| 1 | オーガニックオレンジ |
Terminate アクション
このアクションは、ワークフロー インスタンスの実行を停止し、進行中のアクションがある場合はキャンセルし、残りのアクションがある場合はスキップして、指定された状態を返します。 たとえば、ロジック アプリがエラー状態から完全に終了する必要がある場合は、 Terminate アクションを使用できます。 このアクションは既に完了したアクションには影響しません。また、順次ループを含め、 Foreach ループと Until ループ内に表示することはできません。
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "<status>",
"runError": {
"code": "<error-code-or-name>",
"message": "<error-message>"
}
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < 地位> | String | 実行に対して返す状態: "Failed"、"Cancelled"、または "Succeeded" |
Optional
"runError" オブジェクトのプロパティは、"runStatus" プロパティが "Failed" 状態に設定されている場合にのみ適用されます。
| Value | タイプ | Description |
|---|---|---|
| < error-code-or-name> | String | エラーのコードまたは名前 |
| < error-message> | String | エラーとアプリ ユーザーが実行できる対処について説明するメッセージまたはテキスト |
Example
このアクション定義は、ワークフローの実行を停止し、実行の状態を "Failed" に設定して、状態、エラー コード、およびエラー メッセージを返します。
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "Failed",
"runError": {
"code": "Unexpected response",
"message": "The service received an unexpected response. Please try again."
}
},
"runAfter": {}
}
待機アクション
このアクションは、指定された長さの時間が経過するまで、または指定された日時まで (両方は不可)、ワークフローの実行を一時停止します。
指定された間隔
"Delay": {
"type": "Wait",
"inputs": {
"interval": {
"count": <number-of-units>,
"unit": "<interval>"
}
},
"runAfter": {}
},
指定された時刻
"Delay_until": {
"type": "Wait",
"inputs": {
"until": {
"timestamp": "<date-time-stamp>"
}
},
"runAfter": {}
},
Required
| Value | タイプ | Description |
|---|---|---|
| < number-of-units> | Integer | Delay アクションの場合、待機するユニット数 |
| < 間隔> | String | Delay アクションの場合、待機する間隔: "Second"、"Minute"、"Hour"、"Day"、"Week"、"Month" |
| < date-time-stamp> | String | Delay Until アクションの場合、実行を再開する日時。 この値には UTC の日付と時刻の形式を使用する必要があります。 |
例 1
このアクション定義は、ワークフローを 15 分間一時停止します。
"Delay": {
"type": "Wait",
"inputs": {
"interval": {
"count": 15,
"unit": "Minute"
}
},
"runAfter": {}
},
例 2
このアクション定義は、ワークフローを指定の日時まで一時停止します。
"Delay_until": {
"type": "Wait",
"inputs": {
"until": {
"timestamp": "2017-10-01T00:00:00Z"
}
},
"runAfter": {}
},
ワークフロー アクション
このアクションは、作成済みの別のロジック アプリを呼び出します。つまり、他のロジック アプリ ワークフローを組み込んで再利用することができます。 子ロジック アプリが応答を返す場合は、 入れ子になった ロジック アプリに続くアクションで、子または入れ子になったロジック アプリからの出力を使用することもできます。
呼び出そうとしているトリガーへのアクセスが Azure Logic Apps によってチェックされるため、自分がそのトリガーにアクセスできることを確認してください。 また、入れ子になったロジック アプリは、以下の条件を満たす必要があります。
Azure サブスクリプションが親ロジック アプリと同じ
親ロジック アプリで入れ子になったロジック アプリからの出力を使用するには、入れ子になったロジック アプリに 応答 アクションが必要です
"<nested-logic-app-name>": {
"type": "Workflow",
"inputs": {
"body": { "<body-content" },
"headers": { "<header-content>" },
"host": {
"triggerName": "<trigger-name>",
"workflow": {
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Logic/<nested-logic-app-name>"
}
}
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < nested-logic-app-name> | String | 呼び出したいロジック アプリの名前 |
| < trigger-name> | String | 入れ子になったロジック アプリ内の、呼び出したいトリガーの名前 |
| < Azure-subscription-ID> | String | 入れ子になったロジック アプリの Azure サブスクリプション ID |
| < Azure-resource-group> | String | 入れ子になったロジック アプリの Azure リソース グループ名 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < header-content> | JSON オブジェクト | 呼び出しで送信するヘッダー (ある場合) |
| < body-content> | JSON オブジェクト | 呼び出しで送信するメッセージの内容 |
Outputs
このアクションの出力は、入れ子になったロジック アプリの Response アクションに応じて異なります。 入れ子になったロジック アプリに Response アクションが含まれていない場合、出力は空です。
Example
"Start_search" アクションが正常に完了した後に、このワークフロー アクション定義は "Get_product_information" という名前の別のロジック アプリを呼び出して、指定された入力を渡します。
"actions": {
"Start_search": { <action-definition> },
"Get_product_information": {
"type": "Workflow",
"inputs": {
"body": {
"ProductID": "24601",
},
"host": {
"id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/InventoryManager-RG/providers/Microsoft.Logic/Get_product_information",
"triggerName": "Find_product"
},
"headers": {
"content-type": "application/json"
}
},
"runAfter": {
"Start_search": [ "Succeeded" ]
}
}
},
ワークフロー制御アクションの詳細
Foreach アクション
このループ アクションは、配列を反復処理し、配列の各項目に対してアクションを実行します。 既定では、"for each" ループはループの最大数まで並列で実行されます。 この最大値については、制限と構成に関するセクションを参照してください。"for each" ループを作成する方法については、こちらを参照してください。
"For_each": {
"type": "Foreach",
"actions": {
"<action-1>": { "<action-definition-1>" },
"<action-2>": { "<action-definition-2>" }
},
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": <count>
}
},
"operationOptions": "<operation-option>"
}
Required
| Value | タイプ | Description |
|---|---|---|
| < action-1...n> | String | 配列の各項目に対して実行するアクションの名前 |
| < action-definition-1...n> | JSON オブジェクト | 実行するアクションの定義 |
| < for-each-expression> | String | 指定された配列内の各項目を参照する式 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < 数える> | Integer | 既定では、"for each" ループイテレーションは、 既定の制限まで同時に (同時または並列に) 実行されます。 新しい <count> 値を設定してこの制限を変更するには、「 各ループコンカレンシーの変更」を参照してください。 |
| < operation-option> | String | "for each" ループを並列ではなく順番に実行するには、 <operation-option>Sequential または <count> を 1に設定しますが、両方は設定しません。 詳細については、「"for each" ループを順次実行する」を参照してください。 |
Example
この "for each" ループは、配列の項目ごとに 1 通の電子メールを、受信メールからの添付ファイルを付けて送信します。 このループから送信される電子メール (添付ファイルも含まれます) の送信先は、その添付ファイルのレビュー担当者です。
"For_each": {
"type": "Foreach",
"actions": {
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@base64ToString(items('For_each')?['Content'])",
"Subject": "Review attachment",
"To": "Sophie.Owen@contoso.com"
},
"host": {
"connection": {
"id": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['Attachments']",
"runAfter": {}
}
トリガーからの出力として渡される配列のみを指定するために、この式はトリガー本体から <array-name> 配列を取得します。 配列が存在しない場合のエラーを回避するために、式では ? 演算子を使用しています。
@triggerBody()?['<array-name>']
If アクション
条件ステートメントであるこのアクションは、 条件を表す式を評価し、条件が true か false かに基づいて別の分岐を実行します。 条件が true の場合は、その条件の状態は "Succeeded" となります。 条件付きステートメントを作成する方法については、こちらを参照してください。
"Condition": {
"type": "If",
"expression": { "<condition>" },
"actions": {
"<action-1>": { "<action-definition>" }
},
"else": {
"actions": {
"<action-2>": { "<action-definition" }
}
},
"runAfter": {}
}
| Value | タイプ | Description |
|---|---|---|
| < 条件> | JSON オブジェクト | 評価する条件 (式を指定することもできます) |
| < action-1> | JSON オブジェクト | < condition>が true と評価されたときに実行するアクション |
| < action-definition> | JSON オブジェクト | アクションの定義 |
| < action-2> | JSON オブジェクト | < condition>が false と評価されたときに実行するアクション |
actions または else オブジェクト内のアクションが取る状態は次のとおりです。
- "Succeeded": 実行されて成功したとき
- "Failed": 実行されて失敗したとき
- "Skipped": 対応する分岐が実行されないとき
Example
この条件は、整数型の変数の値が 0 より大きいときに、ある Web サイトをワークフローがチェックすることを指定しています。 変数が 0 以下の場合は、ワークフローは別の Web サイトをチェックします。
"Condition": {
"type": "If",
"expression": {
"and": [ {
"greater": [ "@variables('myIntegerVariable')", 0 ]
} ]
},
"actions": {
"HTTP - Check this website": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://this-url"
},
"runAfter": {}
}
},
"else": {
"actions": {
"HTTP - Check this other website": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://this-other-url"
},
"runAfter": {}
}
}
},
"runAfter": {}
}
条件で式を使用する方法
条件で式を使用する方法の例を次に示します。
| JSON | Result |
|---|---|
| "expression": "@parameters('<hasSpecialAction>')" | ブール式の場合に限り、値が true と評価されれば条件が満たされます。 他の型をブール値に変換するには、関数 empty() または equals() を使用します。 |
| "expression": "@greater(actions('<action>').output.value, parameters('<threshold>'))" | 比較関数の場合、アクションは、 <action> からの出力が <threshold> 値を超える場合にのみ実行されます。 |
| "expression": "@or(greater(actions('<action>').output.value, parameters('<threshold>')),less(actions('<same-action>').output.value, 100))" | ロジック関数と入れ子になったブール式を作成する場合、アクションは、<action> からの出力が<しきい値> 100 未満の場合に実行されます。 |
| "expression": "@equals(length(actions('<action>').outputs.errors), 0)" | 配列に項目が存在するかどうかを確認するには、配列関数を使用できます。 アクションは errors 配列が空のときに実行されます。 |
スコープ アクション
このアクションは、アクションをスコープに論理的にグループ化し、その スコープ内のアクションの実行が完了した後に独自の状態を取得します。 このスコープの状態を使用して、他のアクションを実行するかどうかを判断できます。 スコープを作成する方法については、こちらを参照してください。
"Scope": {
"type": "Scope",
"actions": {
"<inner-action-1>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
},
"<inner-action-2>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
}
}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < inner-action-1...n> | JSON オブジェクト | スコープの内側で実行される 1 つ以上のアクション |
| < action-inputs> | JSON オブジェクト | 各アクションの入力 |
アクションの切り替え
このアクション ( switch ステートメントとも呼ばれます) は、他のアクションを ケースに編成し、既定のケースが存在する場合を除き、各ケースに値を割り当てます。 ワークフローを実行すると、 Switch アクションによって、式、オブジェクト、またはトークンの値が、各ケースに指定された値と比較されます。 Switch アクションで一致するケースが見つかると、ワークフローはそのケースのアクションのみを実行します。 Switch アクションが実行されるたびに、一致するケースが 1 つだけ存在するか、一致するものが存在しません。 一致が存在しない場合、 Switch アクションは既定のアクションを実行します。 switch ステートメントを作成する方法については、こちらを参照してください。
"Switch": {
"type": "Switch",
"expression": "<expression-object-or-token>",
"cases": {
"Case": {
"actions": {
"<action-name>": { "<action-definition>" }
},
"case": "<matching-value>"
},
"Case_2": {
"actions": {
"<action-name>": { "<action-definition>" }
},
"case": "<matching-value>"
}
},
"default": {
"actions": {
"<default-action-name>": { "<default-action-definition>" }
}
},
"runAfter": {}
}
Required
| Value | タイプ | Description |
|---|---|---|
| < expression-object-or-token> | Varies | 評価する対象の式、JSON オブジェクト、またはトークン |
| < action-name> | String | 一致するケースがある場合に実行するアクションの名前 |
| < action-definition> | JSON オブジェクト | 一致するケースがある場合に実行するアクションの定義 |
| < matching-value> | Varies | 評価された結果と比較する値 |
Optional
| Value | タイプ | Description |
|---|---|---|
| < default-action-name> | String | 一致するケースが存在しないときに実行する既定のアクションの名前 |
| < default-action-definition> | JSON オブジェクト | 一致するケースが存在しないときに実行するアクションの定義 |
Example
このアクション定義は、承認要求の電子メールに応答した担当者が "承認" オプションと "拒否" オプションのどちらを選択したかを評価します。 この選択に基づいて、 Switch アクションは一致するケースのアクションを実行します。これは、レスポンダーに別の電子メールを送信することですが、それぞれのケースで異なる文言を使用します。
"Switch": {
"type": "Switch",
"expression": "@body('Send_approval_email')?['SelectedOption']",
"cases": {
"Case": {
"actions": {
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"Body": "Thank you for your approval.",
"Subject": "Response received",
"To": "Sophie.Owen@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
},
"case": "Approve"
},
"Case_2": {
"actions": {
"Send_an_email_2": {
"type": "ApiConnection",
"inputs": {
"Body": "Thank you for your response.",
"Subject": "Response received",
"To": "Sophie.Owen@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
},
"case": "Reject"
}
},
"default": {
"actions": {
"Send_an_email_3": {
"type": "ApiConnection",
"inputs": {
"Body": "Please respond with either 'Approve' or 'Reject'.",
"Subject": "Please respond",
"To": "Sophie.Owen@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"runAfter": {
"Send_approval_email": [
"Succeeded"
]
}
}
Until アクション
このループ アクションには、指定した条件が true になるまで実行されるアクションが含まれています。 このループは、他のすべてのアクションが実行された後に、最後のステップとして条件をチェックします。 複数のアクションを "actions" オブジェクトに含めることができ、そのアクションには少なくとも 1 つの制限が定義されている必要があります。
"until" ループを作成する方法については、こちらを参照してください。
"Until": {
"type": "Until",
"actions": {
"<action-name>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
},
"<action-name>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
}
},
"expression": "<condition>",
"limit": {
"count": <loop-count>,
"timeout": "<loop-timeout>"
},
"runAfter": {}
}
| Value | タイプ | Description |
|---|---|---|
| < action-name> | String | ループ内で実行するアクションの名前 |
| < action-type> | String | 実行するアクションの種類 |
| < action-inputs> | Various | 実行するアクションへの入力 |
| < 条件> | String | ループ内のすべてのアクションの実行が終了した後に評価する条件または式 |
| < loop-count> | Integer | アクションで実行できる最大ループ回数に対する制限。 既定の制限と上限の詳細については、Azure Logic Apps の制限と構成に関する記事を参照してください。 |
| < loop-timeout> | String | ループを実行できる最長時間に対する制限。
timeout の既定値は PT1H です。これは、必須の ISO 8601 フォーマットです。 |
Note
式が Until ループ内の任意のアクションからの出力に依存している場合は、そのアクションから発生するすべてのエラーを必ず考慮に入れてください。
Example
このループ アクション定義は、以下のいずれかの条件が満たされるまで、指定された URL に HTTP 要求を送信します。
- 要求に対して状態コード "200 OK" の応答が返される。
- ループの実行回数が 60 回に達する。
- ループの実行時間が 1 時間に達する。
"Run_until_loop_succeeds_or_expires": {
"type": "Until",
"actions": {
"HTTP": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://myurl"
},
"runAfter": {}
}
},
"expression": "@equals(outputs('HTTP')['statusCode'], 200)",
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {}
}
Webhook とサブスクリプション
Webhook ベースのトリガーとアクションは、エンドポイントの定期的なチェックを行う代わりに、そのエンドポイントでの特定のイベントまたはデータを待ちます。 これらのトリガーとアクションは、エンドポイントが応答を送信できるコールバック URL を提供することで、エンドポイントをサブスクライブします。
subscribe 呼び出しは、ワークフローに何らかの変更があったとき (たとえば、資格情報が更新されたときや、トリガーまたはアクションの入力パラメーターが変更されたとき) に行われます。 この呼び出しでは、標準の HTTP アクションと同じパラメーターが使用されます。
unsubscribe 呼び出しは、以下のような操作によってトリガーまたはアクションが無効になったときに自動的に行われます。
- トリガーを削除または無効にする。
- ワークフローを削除または無効にする。
- サブスクリプションを削除または無効にする。
これらの呼び出しをサポートするために、@listCallbackUrl() 式によってトリガーまたはアクションのための一意の "コールバック URL" が返されます。 この URL は、サービスの REST API を使用するエンドポイントの一意識別子を表します。 この関数のパラメーターは、webhook トリガーまたはアクションと同じです。
非同期の継続時間を変更する
トリガーとアクションの両方について、非同期パターンの継続時間を特定の長さに制限でき、それには limit.timeout プロパティを追加します。 このようにすると、その時間が経過した時点でアクションが終了していない場合に、アクションの状態は Cancelled となり、ActionTimedOut コードが指定されます。
timeout プロパティには ISO 8601 形式を使用します。
"<trigger-or-action-name>": {
"type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
"inputs": {},
"limit": {
"timeout": "PT10S"
},
"runAfter": {}
}
実行時の構成設定
トリガーまたはアクションの定義にこれらの runtimeConfiguration プロパティを追加することによって、トリガーとアクションの既定の実行時ビヘイビアーを変更できます。
| Property | タイプ | Description | トリガーまたはアクション |
|---|---|---|---|
runtimeConfiguration.concurrency.runs |
Integer | 同時に (同時にまたは並列に) 実行できるワークフロー インスタンスの数の 既定の制限 を変更します。 この値を調整することで、バックエンド システムが受信する要求の数を制限できます。 runs プロパティを 1 に設定すると、operationOptions プロパティを SingleInstance に設定したのと同じように機能します。 どちらのプロパティも設定できますが、両方を設定することはできません。 既定の制限を変更するには、「トリガーのコンカレンシーを変更する」または「インスタンスを順次トリガーする」を参照してください。 |
すべてのトリガー |
runtimeConfiguration.concurrency.maximumWaitingRuns |
Integer | ロジック アプリで同時実行インスタンスの最大数が既に実行されているときに実行を待機する必要があるワークフロー インスタンスの数の 既定の制限 を変更します。 既定の制限を変更するには、「実行待機の制限を変更する」を参照してください。 |
すべてのトリガー |
runtimeConfiguration.concurrency.repetitions |
Integer | 同時に (同時にまたは並列に) 実行できる "for each" ループ イテレーションの数の 既定の制限 を変更します。 repetitions プロパティを 1 に設定すると、operationOptions プロパティを SingleInstance に設定したのと同じように機能します。 どちらのプロパティも設定できますが、両方を設定することはできません。 既定の制限を変更するには、「"for each" のコンカレンシーを変更する」、または「"for each" ループを順次実行する」を参照してください。 |
Action: Foreach |
runtimeConfiguration.paginationPolicy.minimumItemCount |
Integer | ページ分割をサポートし、改ページが有効になっている特定のアクションの場合、この値は取得する結果の 最小 数を指定します。 改ページ位置の自動修正を有効にするには、改ページ位置の自動修正によるデータ、アイテム、または結果の一括取得に関する記事を参照してください |
アクション: 多様 |
runtimeConfiguration.secureData.properties |
Array | 多くのトリガーおよびアクションでは、これらの設定によって入力または出力またはその両方がロジック アプリの実行履歴に表示されなくなります。 このデータの保護の詳細については、実行履歴からの入力と出力の非表示に関するページを参照してください。 |
ほとんどのトリガーとアクション |
runtimeConfiguration.staticResult |
JSON オブジェクト |
静的な結果設定をサポートし、有効にするアクションの場合、staticResult オブジェクトには次の属性があります。- name。現在のアクションの静的結果定義名を参照します。この名前は、ロジック アプリ ワークフローの staticResults 属性内の definition 属性の中に出現します。 詳細については、静的結果 - ワークフロー定義言語のスキーマ参照に関するページを参照してください。 - staticResultOptions。現在のアクションに対して静的結果が Enabled であるかどうかを指定します。 静的結果を有効にするには、静的結果を設定してモック データでロジック アプリをテストすることについての記事を参照してください。 |
アクション: 多様 |
操作オプション
トリガーまたはアクションの定義内の operationOptions プロパティを使用して、トリガーとアクションの既定の動作を変更できます。
| 操作オプション | タイプ | Description | トリガーまたはアクション |
|---|---|---|---|
DisableAsyncPattern |
String | HTTP ベースのアクションを非同期ではなく同期的に実行します。 このオプションを設定するには、アクションを同期的に実行することについての記事を参照してください。 |
Actions: ApiConnection, HTTP, Response |
IncludeAuthorizationHeadersInOutputs |
String | ロジック アプリで、要求ベースのトリガー エンドポイントへの着信呼び出しへのアクセスを認可するために Microsoft Entra ID を使用した OAuth を有効化する場合に、OAuth アクセス トークンからの Authorization ヘッダーをトリガー出力に含めます。 詳細については、「要求トリガーの出力に "Authorization" ヘッダーを含める」を参照してください。 |
Triggers: Request, HTTP Webhook |
Sequential |
String | "for each" ループの反復処理を、すべて同時に並列で実行するのではなく、一度に 1 つずつ実行します。 このオプションの機能は、 runtimeConfiguration.concurrency.repetitions プロパティを 1 に設定したときと同じです。 どちらのプロパティも設定できますが、両方を設定することはできません。 このオプションを設定するには、「"for each" ループを順次実行する」を参照してください。 |
Action: Foreach |
SingleInstance |
String | 各ロジック アプリ インスタンスのトリガーを順次実行し、直前のアクティブな実行が終了するまで待機してから、次のロジック アプリ インスタンスをトリガーします。 このオプションの機能は、 runtimeConfiguration.concurrency.runs プロパティを 1 に設定したときと同じです。 どちらのプロパティも設定できますが、両方を設定することはできません。 このオプションを設定するには、「インスタンスを順次トリガーする」を参照してください。 |
すべてのトリガー |
SuppressWorkflowHeaders |
String | 発信する要求内で x-ms-* メタデータ ヘッダーを送信しません。 既定では、ヘッダー名に x-ms- プレフィックスを付けた追加のメタデータ ヘッダーが、発信する要求の一部として Azure Logic Apps によって追加されます。 ただし、一部のレガシ サービスでは、未知のヘッダーが追加された要求は受け入れられないため、要求は失敗となります。 |
Actions: HTTP, Function, APIManagement |
SuppressWorkflowHeadersOnResponse |
String | 着信するトリガー要求への応答の中で x-ms-* メタデータ ヘッダーを送信しません。 既定では、着信する要求に対して Azure Logic Apps によって送信される応答には、ヘッダー名に x-ms- プレフィックスを付けた追加のメタデータ ヘッダーが含まれます。 ただし、一部のレガシ サービスでは、未知のヘッダーが追加された要求や応答は受け入れられないため、要求は失敗となります。 |
Triggers: Request, HTTP Webhook |
トリガーのコンカレンシーを変更する
既定では、ロジック アプリ ワークフロー インスタンスはすべて (同時にまたは並行して) 実行されます。 この動作は、直前のアクティブなワークフロー インスタンスが実行を終了する前に各トリガー インスタンスが起動することを意味します。 ただし、同時に実行されるインスタンスの数には既定の 制限があります。 同時に実行されるワークフロー インスタンスの数がこの制限に達すると、その他の新しいインスタンスは実行を待機する必要があります。 この制限を利用すると、バックエンド システムが受信する要求の数を制限できます。
トリガーのコンカレンシー制御を有効にすると、トリガー インスタンスは 既定の制限まで並列で実行されます。 既定のコンカレンシー制限を変更するには、コード ビュー エディターまたはワークフロー デザイナーのどちらを使用してもかまいません。コンカレンシーの設定をデザイナーから変更すると、基になるトリガー定義の中の runtimeConfiguration.concurrency.runs プロパティが追加または更新され、その逆も同様であるからです。 このプロパティは、並列で実行できる新しいワークフロー インスタンスの最大数を制御します。
トリガーでコンカレンシーを有効にする前に、次の考慮事項を確認してください。
コンカレンシー制御を有効にした後にコンカレンシーを無効にすることはできません。
同時トリガー実行の最大数が並列処理の最大度に達すると、後続のトリガー実行で調整または "429 - 要求が多すぎます" エラーが発生する可能性があります。 429 エラーを処理する再試行ポリシーを設定した場合、トリガーで再試行と調整の動作のサイクルが発生し、新しいトリガー要求の処理に長い遅延が発生する可能性があります。
コンカレンシーが有効になっている場合、配列のバッチ解除に対する分割の制限が大幅に削減されます。 項目の数がこの制限を超えた場合、 分割 機能は無効になります。
コンカレンシーを有効にすると、実行時間の長いロジック アプリ インスタンスによって、新しいロジック アプリ インスタンスが待機状態になることがあります。 この状態になると、Azure Logic Apps は新しいインスタンスを作成しなくなります。この状態は、同時実行の数が、指定された同時実行の最大数よりも少ない場合でも発生します。
この状態を中断するには、 まだ実行中の最も古いインスタンスを取り消します。
ロジック アプリのメニューで、[ 概要] を選択します。
[ 実行履歴 ] セクションで、実行中の最も古いインスタンスを選択します。次に例を示します。
Tip
まだ実行中のインスタンスのみを表示するには、[ すべて] 一覧を開き、[ 実行中] を選択します。
[ロジック アプリの実行] で、[実行の取り消し] を選択します。
この可能性を回避するには、これらの実行を止めさせるおそれのあるアクションにタイムアウトを追加します。 コード エディターで作業している場合は、「非同期の継続時間を変更する」を参照してください。 それ以外の場合で、デザイナーを使用している場合は、次の手順に従います。
ロジック アプリ ワークフローで、タイムアウトを追加するアクションを選択します。 アクションの右上隅にある省略記号 (...) ボタンを選択し、[ 設定] を選択します。
[ タイムアウト] で、 ISO 8601 形式でタイムアウト期間を指定します。
ロジック アプリを順番に実行するには、コード ビュー エディターまたはデザイナーを使用して、トリガーのコンカレンシーを
1に設定します。 コード ビュー エディターで、トリガーのoperationOptionsプロパティをSingleInstanceに設定しないようにしてください。 これに従わないと、検証エラーになります。 詳細については、「インスタンスを順次トリガーする」を参照してください。
コード ビューで編集する
基になるトリガーの定義で、runtimeConfiguration.concurrency.runs プロパティを追加し、トリガーのコンカレンシーの制限に基づいて値を設定します。 ワークフローを順番に実行するには、プロパティの値を 1 に設定します。
この例では、同時実行の数を 10 インスタンスに制限しています。
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 10
}
}
}
詳細については、「実行時の構成設定」を参照してください。
ワークフロー デザイナーで編集する
トリガーの右上隅にある省略記号 (...) ボタンを選択し、[ 設定] を選択します。
[ コンカレンシー制御] で、[ 制限] を [オン] に設定します。
[並列処理の次数] スライダーをドラッグして必要な値に設定します。 ロジック アプリを順番に実行するには、スライダーの値を 1 にドラッグします。
"for each" のコンカレンシーを変更する
既定では、"for each" ループの反復処理はすべて (同時にまたは並行して) 実行されます。 この動作は、前の反復処理の実行が完了する前に各反復処理の実行が開始されることを意味します。 ただし、同時に実行されるイテレーションの数には既定の 制限があります。 同時に実行される反復処理の数がこの制限に達すると、その他の反復処理は実行を待機する必要があります。
既定の制限を変更するには、コード ビュー エディターまたはワークフロー デザイナーのどちらを使用してもかまいません。コンカレンシーの設定をデザイナーから変更すると、基になる "for each" アクション定義の中の runtimeConfiguration.concurrency.repetitions プロパティが追加または更新され、その逆も同様であるからです。 このプロパティは、並列で実行できる反復処理の最大数を制御します。
Note
デザイナーまたはコード ビュー エディターを使用して "for each" アクションの順次実行を設定する場合は、コード ビュー エディターでアクションの operationOptions プロパティを Sequential に設定しないでください。 これに従わないと、検証エラーになります。 詳細については、「"for each" ループを順次実行する」を参照してください。
コード ビューで編集する
基になる "for each" 定義内で、runtimeConfiguration.concurrency.repetitions プロパティを追加または更新します。この値は 1 以上 50 以下の範囲内で指定できます。
同時実行を 10 個の反復処理に制限する例を次に示します。
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 10
}
}
}
詳細については、「実行時の構成設定」を参照してください。
ワークフロー デザイナーで編集する
[ For each ]\(各アクション\) で、右上隅にある省略記号 (...) ボタンを選択し、[ 設定] を選択します。
[ コンカレンシー制御] で、[ コンカレンシー制御 ] を [オン] に設定します。
[並列処理の次数] スライダーをドラッグして必要な値に設定します。 ロジック アプリを順番に実行するには、スライダーの値を 1 にドラッグします。
実行待機の制限を変更する
既定では、ロジック アプリ ワークフロー インスタンスはすべて (同時にまたは並行して) 実行されます。 この動作は、直前のアクティブなワークフロー インスタンスが実行を終了する前に各トリガー インスタンスが起動することを意味します。 ただし、同時に実行されるワークフロー インスタンスの数には 既定の制限 があります。 同時実行数がこの制限に達すると、その他の新しいワークフロー インスタンスは実行を待機する必要があります。 既定の制限は、待機中のワークフロー インスタンスの数にも存在します。 待機インスタンス数がこの上限に達すると、Azure Logic Apps では新しいワークフロー インスタンスの実行が承認されなくなります。 要求と webhook のトリガーは「429 - 要求が多すぎます」エラーを返し、繰り返しトリガーによるポーリングの試行がスキップされ始めます。
トリガー コンカレンシーの既定の制限を変更し、実行待機の既定の制限を変更することもできます。 ただし、この変更は主に同時実行によるプレッシャーを和らげるためにトリガーをスローダウンするものです。 たとえば、ポーリング トリガーがある場合、進行中の実行によって実行待機キューがいっぱいになると、Azure Logic Apps でポーリングが停止されます。 ワークフローが要求ベースのトリガーを使用し、実行待機キューがいっぱいになると、Azure Logic Apps で 429 エラーが返されます。 一部のシナリオでは、Azure Logic Apps がエラーを発生させることなくトリガーによるポーリングを停止させることができない場合がありますが、そのような実行は実行待機キューに追加することが選択され、呼び出し元の実行が失敗となることはありません。
基になるトリガー定義内で、runtimeConfiguration.concurrency.maximumWaitingRuns プロパティを追加します。この値は 1 以上 100 以下の範囲内で指定できます。
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"maximumWaitingRuns": 50
}
}
}
詳細については、「実行時の構成設定」を参照してください。
インスタンスを順次トリガーする
各ロジック アプリ ワークフロー インスタンスを、必ず直前のインスタンスの実行が終了してから実行するには、トリガーの順次実行を設定します。 コード ビュー エディターまたはワークフロー デザイナーのどちらを使用してもかまいません。コンカレンシーの設定をデザイナーから変更すると、基になるトリガー定義内の runtimeConfiguration.concurrency.runs プロパティの追加または更新も行われ、その逆も同様であるからです。
Note
デザイナーまたはコード ビュー エディターを使用してトリガーの順次実行を設定する場合は、コード ビュー エディターでトリガーの operationOptions プロパティを Sequential に設定しないでください。
これに従わないと、検証エラーになります。
コード ビューで編集する
トリガー定義内で、以下のプロパティのどちらか一方を設定します。両方を設定することはできません。
runtimeConfiguration.concurrency.runs プロパティを 1 に設定します。
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
}
}
-or-
operationOptions プロパティを SingleInstance に設定します。
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"operationOptions": "SingleInstance"
}
詳細については、「ランタイム構成の設定」および「操作オプション」を参照してください。
ワークフロー デザイナーで編集する
トリガーの右上隅にある省略記号 (...) ボタンを選択し、[ 設定] を選択します。
[ コンカレンシー制御] で、[ 制限] を [オン] に設定します。
[並列処理の次数] スライダーをドラッグして数値
1に設定します。
"for each" ループを順次実行する
"for each" ループを、必ず直前の反復処理の実行が終了してから実行するには、"for each" アクションの順次実行を設定します。 コード ビュー エディターまたはワークフロー デザイナーのどちらを使用してもかまいません。アクションのコンカレンシーの設定をデザイナーから変更すると、基になるアクション定義内の runtimeConfiguration.concurrency.repetitions プロパティも追加または更新され、その逆も同様であるからです。
Note
デザイナーまたはコード ビュー エディターを使用して "for each" アクションの順次実行を設定するときは、コード ビュー エディターでアクションの operationOptions プロパティを Sequential に設定しないでください。
これに従わないと、検証エラーになります。
コード ビューで編集する
アクション定義内で、以下のプロパティのどちらか一方を設定します。両方を設定することはできません。
runtimeConfiguration.concurrency.repetitions プロパティを 1 に設定します。
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
}
}
-or-
operationOptions プロパティを Sequential に設定します。
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"operationOptions": "Sequential"
}
詳細については、「ランタイム構成の設定」および「操作オプション」を参照してください。
ワークフロー デザイナーで編集する
各アクションの右上隅にある省略記号 (...) ボタンを選択し、[設定] を選択します。
[ コンカレンシー制御] で、[ コンカレンシー制御 ] を [オン] に設定します。
[並列処理の次数] スライダーをドラッグして数値
1に設定します。
同期操作パターンでアクションを実行する
既定では、Azure Logic Apps の HTTP アクションと APIConnection アクションは、標準的な非同期操作パターンに従いますが、Response アクションは同期操作パターンに従います。 非同期パターンは、アクションが指定されたエンドポイント、サービス、システム、または API に要求を呼び出すか送信した後、受信側がすぐに "202 ACCEPTED" 応答を返すように指定します。 このコードは、受信側が要求を受け入れたが、処理が完了していないことを確認します。 応答には、URL と更新 ID を指定する location ヘッダーを含めることができます。このヘッダーは、受信者が処理を停止し 、"200 OK" の成功応答またはその他の 202 以外の応答を返すまで、呼び出し元が非同期要求の状態を継続的にポーリングまたはチェックするために使用できます。 詳細については、「マイクロサービスの非同期統合によるマイクロサービスの自律性の強制」を参照してください。
ロジック アプリ デザイナーでは、HTTP アクション、APIConnection アクション、および応答アクションに 非同期パターン 設定があります。 この設定を有効にした場合、呼び出し元は処理が終了するのを待たず、次のアクションに進むことができますが、処理が停止するまで状態のチェックは続行されます。 無効にした場合、この設定は次のアクションに進む前に、呼び出し元が処理の終了を待機することを指定します。 この設定を見つけるには、次の手順を実行します。
HTTP アクションのタイトル バーで省略記号 (...) ボタンを選択すると、アクションの設定が開きます。
[非同期パターン] 設定を見つけます。
アクションの基になる JavaScript Object Notation (JSON) 定義では、HTTP アクションと APIConnection アクションは暗黙的に非同期操作パターンに従います。
シナリオによっては、代わりに同期パターンに従うアクションが必要になることがあります。 たとえば、HTTP アクションを使用する際に、以下を行いたい場合があるとします。
このような場合は、以下のオプションを使用してアクションを同期的に実行することができます。
使用可能な場合は、そのアクションのポーリングバージョンを Webhook バージョンに置き換えます。
次のいずれかのオプションを使用して、アクションの非同期動作を無効にします。
ロジック アプリ デザイナーで、非同期パターン設定をオフにします。
アクションの基になる JSON 定義で、
"DisableAsyncPattern"操作オプションを追加します。
非同期パターン設定をオフにする
ロジック アプリ デザイナーのアクションのタイトル バーで省略記号 (...) ボタンを選択すると、アクションの設定が開きます。
[非同期パターン] 設定を探し、有効な場合は設定を [オフ] にして、[完了] を選択します。
アクションの JSON 定義で非同期パターンを無効にする
アクションの基になる JSON 定義で、アクションの セクションの下に "DisableAsyncPattern"を"inputs"に追加して設定します。次に例を示します。
"<some-long-running-action>": {
"type": "Http",
"inputs": { "<action-inputs>" },
"operationOptions": "DisableAsyncPattern",
"runAfter": {}
}
トリガーとアクションを認証する
HTTP および HTTPS エンドポイントでは、さまざまな種類の認証がサポートされています。 これらのエンドポイントにアクセスする発信呼び出しまたは要求を行うために使用するトリガーまたはアクションに基づいて、さまざまな認証の種類から選択できます。 詳細については、「送信呼び出しに認証を追加する」を参照してください。
次のステップ
- ワークフロー定義言語についてさらに学習します。