Azure Logic Apps の Standard ワークフローで PowerShell スクリプト コードを追加して実行する (プレビュー)
適用対象: Azure Logic Apps (Standard)
Note
この機能はプレビュー段階にあり、「Microsoft Azure プレビューの追加使用条件」が適用されます。
Azure Logic Apps で Standard ワークフローを使用してインラインでカスタム統合タスクを実行するには、ワークフロー内から PowerShell コードを直接追加して実行できます。 このタスクでは、PowerShell コードの実行という名前のインライン コード アクションを使います。 このアクションは PowerShell コードからの結果を返すので、この出力をワークフローの後続のアクションで使用できます。
この機能には、次の利点があります。
複雑な統合の課題を解決できるように、ワークフロー デザイナー内で独自のスクリプトを記述します。 他のサービス プランは必要ありません。
この利点により、ワークフロー開発が合理化され、より多くのサービスを管理する複雑さとコストが削減されます。
専用のコード ファイルを生成します。このファイルは、ワークフロー内でカスタマイズされたスクリプト領域を提供します。
Azure Functions PowerShell 関数と統合します。これにより、高度なタスク実行のための強力な機能と継承が提供されます。
ワークフローと共にスクリプトをデプロイします。
このガイドでは、ワークフローにアクションを追加し、実行する PowerShell コードを追加する方法について説明します。
前提条件
Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。
PowerShell スクリプトを追加する Standard ロジック アプリ ワークフロー。 このワークフローは、トリガーで既に開始されている必要があります。 詳細については、Standard ロジック アプリ ワークフロー の例の作成に関するページを参照してください。
ご自分のシナリオには任意のトリガーを使用できますが、例として、このガイドでは HTTP 要求の受信時という名前の要求トリガーと、応答アクションを使用します。 ワークフローは、別のアプリケーションまたはワークフローがトリガーのエンドポイント URL に要求を送信したときに実行されます。 サンプル スクリプトは、コード実行の結果を出力として返しますが、これは、後続のアクションで使用できます。
考慮事項
Azure portal では、スクリプトは workflow.json ファイルと同じフォルダーに PowerShell スクリプト ファイル (.ps1) として保存されます。これにはワークフローの JSON 定義が格納されており、ワークフロー定義と共にファイルがロジック アプリ リソースにデプロイされます。
.ps1 ファイル形式を使うと、記述する "定型句" が減り、PowerShell コードを書くことに集中できます。 アクションの名前を変更すると、ファイルの名前も変更されますが、その逆は行われません。 ファイルの名前を直接変更すると、名前が変更されたバージョンによって以前のバージョンが上書きされます。 アクション名とファイル名が一致しない場合、アクションはファイルを見つけられず、新しい空のファイルの作成を試みます。
スクリプトはワークフローに対してローカルです。 他のワークフローで同じスクリプトを使用するには、KuduPlus コンソールでスクリプト ファイルを表示し、スクリプトをコピーして他のワークフローで再利用します。
制限事項
名前 | Limit | メモ |
---|---|---|
スクリプトの実行期間 | 10 分 | より長い期間が必要なシナリオがある場合は、製品フィードバック オプションを使用して、ニーズに関する詳細情報を提供してください。 |
出力サイズ | 100 MB | 出力サイズは、アクションの出力サイズの制限によりますが、通常は 100 MB です。 |
PowerShell コードの実行アクションを追加する
Azure portal で、Standard ロジック アプリ リソースとワークフローをデザイナーで開きます。
デザイナーで、一般的な手順に従って、PowerShell コードの実行という名前のインライン コード操作アクションをワークフローに追加します。
アクション情報ペインが開いたら、[パラメーター] タブの [コード ファイル] ボックスで、事前に設定されたサンプル コードを独自のコードで更新します。
ワークフローから出力されたデータにアクセスするには、後の「スクリプト内のワークフロー トリガーとアクションの出力にアクセスする」をご覧ください。
スクリプトの結果または他のデータをワークフローに返すには、「ワークフローにデータを返す」をご覧ください。
次の例は、サンプル スクリプト コードを含むアクションの [パラメーター] タブを示しています。
次の例は、サンプル スクリプト コードを示しています。
# Use the following cmdlets to retrieve outputs from prior steps. # $triggerOutput = Get-TriggerOutput # $ActionOutput = Get-ActionOutput -ActionName <action-name> $customResponse = [PSCustomObject]@{ Message = "Hello world!" } # Use Write-Debug/Write-Host/Write-Output/ to log messages to Application Insights. # Write-Host/Write-Output/Write-Debug and 'return' won't return an output to the workflow. # Write-Host "Sending to Application Insight logs" # Use Push-WorkflowOutput to push outputs into subsequent actions. Push-WorkflowOutput -Output $customResponse
次に示すのは、カスタム サンプル スクリプトの例です。
$action = Get-TriggerOutput $results = "Hello from PowerShell!" Push-WorkflowOutput -Output $results
完了したら、ワークフローを保存します。
ワークフローを実行した後、Application Insights (有効になっている場合) でワークフローの出力を確認できます。 詳しくは、Application Insights での出力の表示に関する記事をご覧ください。
スクリプト内のワークフロー トリガーとアクションの出力にアクセスする
トリガーと前のアクションからの出力値は、複数のパラメーターを持つカスタム オブジェクトを使って返されます。 これらの出力にアクセスし、望む値が返されることを確認するには、Get-TriggerOutput、Get-ActionOutput、Push-WorkflowOutput コマンドレットと、後の表で説明する適切なパラメーターを使います。次はその例です。
$trigger = Get-TriggerOutput
$statusCode = $trigger.status.ToString();
$action = Get-ActionOutput -ActionName Compose
$actionOutput = $action.outputs['actionOutput'].ToString();
$populatedString = "Send the $statusCode for the trigger status and $actionOutputName."
Push-WorkflowOutput -Output $populatedString
Note
PowerShell で、複合オブジェクト内に JValue 型を含むオブジェクトを参照し、そのオブジェクトを文字列に追加すると、形式の例外が発生します。 このエラーを回避するには、ToString() を使います。
トリガーとアクション応答の出力
次の表は、Get-ActionOutput または Get-TriggerOutput を呼び出すと生成される出力の一覧です。 戻り値は PowershellWorkflowOperationResult という名前の複合オブジェクトであり、次の出力が含まれます。
名前 | 種類 | 説明 |
---|---|---|
名前 | String | トリガーまたはアクションの名前。 |
入力 | JToken | トリガーまたはアクションに渡された入力値。 |
出力 | JToken | 実行されたトリガーまたはアクションからの出力。 |
StartTime | DateTime | トリガーまたはアクションの開始時刻。 |
EndTime | DateTime | トリガーまたはアクションの終了時刻。 |
ScheduledTime | DateTime | トリガーまたはアクションを実行するようにスケジュールされた時刻。 |
OriginHistoryName | String | Split-On オプションが有効になっているトリガーの配信元履歴の名前。 |
SourceHistoryName | String | 再送信されたトリガーのソース履歴の名前。 |
TrackingId | String | 操作追跡 ID。 |
コード | String | 結果の状態コード。 |
Status | String | トリガーまたはアクションの実行状態。たとえば、Succeeded や Failed など。 |
エラー | JToken | HTTP エラー コード。 |
TrackedProperties | JToken | ユーザーが設定した追跡対象のプロパティ。 |
ワークフローに出力を返す
ワークフローに出力を返すには、Push-WorkflowOutput コマンドレットを使う必要があります。
カスタム PowerShell コマンド
PowerShell コードの実行アクションには、ワークフローやワークフロー内の他の操作とやり取りするためのカスタム PowerShell コマンド (コマンドレット)が含まれます。
Get-TriggerOutput
ワークフローのトリガーからの出力を取得します。
構文
Get-TriggerOutput
Parameters
ありません。
Get-ActionOutput
ワークフロー内の別のアクションから出力を取得し、PowershellWorkflowOperationResult という名前のオブジェクトを返します。
構文
Get-ActionOutput [ -ActionName <String> ]
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
ActionName | String | 参照する出力を含むワークフロー内のアクションの名前。 |
Push-WorkflowOutput
PowerShell コードの実行アクションからの出力をワークフローにプッシュします。任意のオブジェクト型を戻すことができます。 戻り値が null の場合、コマンドレットから null オブジェクト エラーが発生します。
Note
Write-Debug、Write-Host、Write-Output コマンドレットは、ワークフローに値を返しません。 return ステートメントも、ワークフローに値を返しません。 ただし、これらのコマンドレットを使って、Application Insights に表示されるトレース メッセージを書き込むことができます。 詳しくは、「Microsoft.PowerShell.Utility」をご覧ください。
構文
Push-WorkflowOutput [-Output <Object>] [-Clobber]
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
出力 | 状況に応じて異なります。 | ワークフローに返す出力。 この出力は任意の型にできます。 |
Clobber | 状況に応じて異なります。 | 前にプッシュされた出力をオーバーライドするために使用できるオプションのスイッチ パラメーター。 |
PowerShell を使用してマネージド ID でアクセスの認証と認可を行う
マネージド ID を使うと、コードに資格情報を含めなくても、ロジック アプリのリソースとワークフローで、Microsoft Entra 認証をサポートする任意の Azure サービスとリソースへのアクセスの認証と認可を行うことができます。
PowerShell コードの実行アクション内から、マネージド ID を使ってアクセスの認証と認可を行うことができ、アクセスを有効にした他の Azure リソースに対してアクションを実行できます。 たとえば、仮想マシンを再起動したり、別のロジック アプリ ワークフローの実行の詳細を取得したりできます。
PowerShell コードの実行アクション内からマネージド ID を使うには、次の手順のようにする必要があります。
こちらの手順に従って、ロジック アプリでマネージド ID を設定し、ターゲットの Azure リソースでマネージド ID にアクセスを許可します。
ターゲットの Azure リソースで、次の考慮事項を確認します。
[ロール] タブでは、通常、[共同作成者] ロールで十分です。
[ロールの割り当ての追加] ページの [メンバー] タブの [アクセスの割り当て先] プロパティで、[マネージド ID] を選んでいることを確認します。
[メンバーの選択] を選んだ後、[マネージド ID の選択] ペインで、使うマネージド ID を選びます。
PowerShell コードの実行アクションの最初のステートメントとして、次のコードを追加します。
Connect-AzAccount -Identity
これで、コマンドレットとモジュールを使って Azure リソースを操作できるようになりました。
スクリプト ファイルを表示する
Azure portal で、希望するワークフローが含まれている Standard ロジック アプリ リソースを開きます。
ロジック アプリのリソース メニューの [開発ツール] で、[高度なツール] を選びます。
[高度なツール] ページで、[移動] を選択すると、KuduPlus コンソールが開きます。
[デバッグ コンソール] メニューを開き、[CMD] を選択します。
ロジック アプリのルートの場所 (site/wwwroot) に移動します
site/wwwroot/<ワークフロー名> というパスで、.ps1 ファイルを含むワークフローのフォルダーに移動します。
ファイル名の横にある [編集] を選択して、ファイルを開いて表示します。
Application Insights のログの表示
Azure portal で、ロジック アプリのリソース メニューにある [設定] の [Application Insights] を選択し、ロジック アプリを選択します。
Application Insights メニューの [監視] で、[ログ] を選択します。
ワークフローの実行からトレースまたはエラーを検索するクエリを作成します。次に例を示します。
union traces, errors | project TIMESTAMP, message
モジュール
PowerShell モジュールは、次のようなさまざまなコンポーネントを含む自己完結型の再利用可能なユニットです。
- コマンドレット: 特定のタスクを実行する個々のコマンド。
- プロバイダー: レジストリやファイル システムなどのデータ ストアに、それらがドライブであるかのようにアクセスできるようにします。
- 関数: 特定のアクションを実行する再利用可能なコード ブロック。
- 変数: モジュール内で使用するデータを格納します。
- その他の種類のリソース。
モジュールは PowerShell コードを整理して、配布しやすくします。 たとえば、独自のモジュールを作成し、関連する機能をパッケージ化して、管理と共有をいっそう容易にすることができます。 PowerShell コードの実行アクションを使うと、パブリックとプライベート両方の PowerShell モジュールをインポートできます。
パブリック モジュール
一般公開されているモジュールを見つけるには、PowerShell ギャラリーにアクセスします。 Standard ロジック アプリ リソースでは、最大 10 個のパブリック モジュールをサポートできます。 パブリック モジュールを使うには、次の手順に従ってこの機能を有効にする必要があります。
Azure portal のロジック アプリ リソースのメニューの [開発ツール] で、[高度なツール] を選びます。
[高度なツール] ページで、[移動] を選択します。
[Kudu Plus] ツール バーの [デバッグ コンソール] メニューから、[CMD] を選びます。
ディレクトリ構造またはコマンド ラインを使って、ロジック アプリのルート レベル C:\home\site\wwwroot を参照します。
ワークフローの host.json ファイルを開き、managed dependency プロパティを true に設定します。これは、既定で既に設定されています。
"managedDependency": { "enabled": true }
requirements.psd1 という名前のファイルを開きます。 <メジャー番号>.* という構文、または次の例のような正確なモジュールのバージョンを使って、必要なモジュールの名前とバージョンを指定します。
@{ Az = '1.*' SqlServer = '21.1.18147' }
パブリック モジュールに関する考慮事項
依存関係の管理を使う場合は、次の考慮事項が適用されます。
モジュールをダウンロードするため、パブリック モジュールは PowerShell ギャラリーにアクセスする必要があります。
現在、管理された依存関係では、対話形式でライセンスを受け入れる方法で、または Install-Module を実行するときに -AcceptLicense オプションを指定する方法で、ライセンスを受け入れる必要があるモジュールはサポートされていません。
プライベート モジュール
独自のプライベート PowerShell モジュールを生成できます。 初めて PowerShell モジュールを作成するときは、PowerShell スクリプト モジュールの記述に関する記事をご覧ください。
Azure portal のロジック アプリ リソースのメニューの [開発ツール] で、[高度なツール] を選びます。
[高度なツール] ページで、[移動] を選択します。
[Kudu Plus] ツール バーの [デバッグ コンソール] メニューから、[CMD] を選びます。
ディレクトリ構造またはコマンド ラインを使って、ロジック アプリのルート レベル C:\home\site\wwwroot を参照します。
Modules という名前のフォルダーを作成します。
Modules フォルダーに、プライベート モジュールと同じ名前のサブフォルダーを作成します。
プライベート モジュール フォルダーに、psm1 というファイル名拡張子を持つプライベート PowerShell モジュール ファイルを追加します。 必要に応じて、psd1 というファイル名拡張子を持つ PowerShell マニフェスト ファイルを含めることもできます。
終えると、完成したロジック アプリ ファイルの構造は次の例のようになります。
MyLogicApp
-- execute_powershell_script.ps1
-- mytestworkflow.json
Modules
-- MyPrivateModule
--- MyPrivateModule.psd1
--- MyPrivateModule.psm1
-- MyPrivateModule2
--- MyPrivateModule2.psd1
--- MyPrivateModule2.psm1
requirements.psd1
host.json
コンパイル エラー
このリリースでは、Web ベースのエディターに制限付きの IntelliSense サポートが含まれており、引き続き改善中です。 ワークフローを保存するとコンパイル エラーが検出され、Azure Logic Apps ランタイムによってスクリプトがコンパイルされます。 これらのエラーは、Application Insights を介してロジック アプリのエラー ログに表示されます。
実行時エラー
ワークフロー アクションは出力を何も返しません。
Push-WorkflowOutput コマンドレットを使っていることを確認します。
PowerShell コードの実行アクションが失敗する: "用語 '{some-text}' は ... 認識されません"
requirements.psd1 ファイルでパブリック モジュールを誤って参照している場合、またはプライベート モジュールがパス C:\home\site\wwwroot\Modules<モジュール名> に存在しないときは、次のエラーが発生します。
用語 '{some-text}' は、コマンドレット、関数、スクリプト ファイル、または実行可能なプログラムの名前として認識されません。 名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
Note
既定では、Az* モジュールは requirements.psd1 ファイルに含まれますが、ファイルの作成時にはコメントになっています。 モジュールからコマンドレットを参照するときに、必ずモジュールのコメントを解除してください。
PowerShell コードの実行アクションが失敗する: "null であるため、引数をパラメーター 'Output' にバインドできません。"
このエラーは、null オブジェクトをワークフローにプッシュしようとすると発生します。 Push-WorkflowOutput で送信しているオブジェクトが null となっていないかを確認してください。