演習 - ARM テンプレートを使用して Azure Logic Apps ワークフローをデプロイしてエクスポートする

完了

前の演習では、基本的な Azure Resource Manager テンプレートを使用してロジック アプリをデプロイしました。 このテンプレートは、すべてがハード コーディングされていた点で柔軟性に欠けていました。 たとえば、ワークフロー名やアプリのデプロイ場所を変更するには、テンプレートを編集する必要があります。 スクリプト化された環境で複数のデプロイを行っているシナリオでは、テンプレートを手動で編集するのは手間がかかります。 パラメーターとして値を指定してリソースのデプロイをカスタマイズすることをお勧めします。

テンプレート パラメーターを使用するようにテンプレートを更新する

  1. 次の cp コマンドを使用して、前の演習で使用した基本テンプレートをコピーします。

    cp basic-template.json template-with-params.json
    
  2. 次の code コマンドを使用して組み込みエディターでテンプレートを開きます。

    code template-with-params.json
    

    最初の手順では、アプリの名前とアプリの実行場所を簡単にカスタマイズできるように、パラメーターを追加します。

  3. テンプレートの parameters セクションを次のコード スニペットに置き換えます。これにより、logicAppNamelocation の 2 つの新しいパラメーターが追加されます。

    "parameters": {
        "logicAppName": {
            "type": "string",
            "metadata": {
              "description": "The name of the logic app to create."
            }
          },
        "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
              "description": "Location for all resources."
            }
        }
    },
    

    どちらのパラメーターも文字列です。 logicAppName パラメーターの既定値は指定されていません。これは、デプロイ時に指定する必要があることを意味します。 これに対し、location は既定値が指定されているため、省略可能です。

    location パラメーターの既定値は、アプリのデプロイ先のリソース グループの場所です。 この値は、resourceGroup() テンプレート関数で返されたリソース グループから location プロパティを参照することで取得します。 式は、左角かっこで始まり、右角かっこで終了します ([ ])。 式の値は、テンプレートのデプロイが完了したときに評価されます。 式では、文字列、整数、ブール値、配列、またはオブジェクトが返されます。 テンプレートでは、最大として 256 個のパラメーターを定義できます。

    2 つの新しいパラメーターを定義したので、ハード コーディングされた値を新しいパラメーターへの参照で置き換えて、テンプレートでこれらを使用します。

  4. 次のスニペットに示すように、テンプレートの resources セクション内の namelocation のフィールドを新しいパラメーターを使用するように置き換えます。

    "name": "[parameters('logicAppName')]",
    "location": "[parameters('location')]",
    
  5. テンプレートの下にある outputs セクションを次のコードで置き換えます。 logicAppUrl テンプレート変数の値を、次のスニペットに示されているように logicAppName パラメーターも使用するように更新します。

    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]"
        }
     }
    
  6. Ctrl + S キーを押して、template-with-params.json にすべての変更を保存します。

パラメーター化されたテンプレートを使用してロジック アプリ リソースをデプロイする

az deployment group create コマンドで --parameters フラグを使用して、デプロイ時にパラメーターをテンプレートに指定するには、2 つの方法があります。 リモート パラメーター ファイルの URI で渡すか、ローカル ファイルの名前で渡すことができます。 ローカル ファイルを使用してみましょう。

パラメーター JSON ファイルを作成する

  1. 組み込みコード エディターで次のコマンドを使用して、params.json と呼ばれる新しいファイルを作成します。

    code params.json
    
  2. 次の JSON を params.json に貼り付けて、Ctrl + S キーを押して変更を保存します。

    { 
        "logicAppName": { 
            "value": "myLogicApp" 
        } 
    }
    

テンプレートを検証する

  1. Cloud Shell から az deployment group validate を実行して、テンプレートを検証します。

    az deployment group validate \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters @params.json
    

    --template-file 引数は、ローカル テンプレートを指します。 テンプレートのファイル名は template-with-params.json です。

    出力として大きな JSON ブロックが表示されます。これは、テンプレートが検証に合格したことを示します。

    Azure Resource Manager によって、テンプレート パラメーターが設定され、ユーザーのサブスクリプション内でテンプレートが正常に実行されるかどうかが確認されます。

    検証が失敗した場合は、エラーの詳細な説明が出力で示されます。

ローカル ファイルからパラメーターを含むテンプレートをデプロイする

  1. Cloud Shell で次のコマンドを実行して、params.json ファイルから取得したアプリの名前を持つロジック アプリ リソースをデプロイします。 params.json ファイルには、location パラメーターは設定されていないため、既定値が使用されます。

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters @params.json
    

    デプロイには少し時間がかかり、Cloud Shell のコマンド ラインで進行状況を見ることができます。 デプロイが完了すると、JSON 結果の provisioningState の値が Succeeded になるはずです。

  2. アプリの動作を確認するには、JSON の結果で logicAppUrl の値を検索します。 URL を選択するか、コピーして新しいブラウザー ウィンドウに貼り付けます。 このページには、Hello Azure Logic Apps Template! メッセージが表示されます。

コマンド ラインからパラメーターを含むテンプレートをデプロイする

デプロイするパラメーター ファイルをコマンド ラインから毎回編集する代わりに、コマンド ラインで JSON 文字列内にパラメーターを指定することができます。

  1. Cloud Shell で次のコマンドを実行して、コマンド ラインで JSON 文字列としてフィードされたアプリの名前とその場所を持つロジック アプリ リソースをデプロイします。

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'
    

    デプロイには少し時間がかかり、Cloud Shell のコマンド ラインで進行状況を見ることができます。 デプロイが完了すると、JSON 結果の provisioningState の値が Succeeded になるはずです。

  2. アプリの動作を確認するには、JSON の結果で logicAppUrl の値を検索します。 URL を選択し、新しいブラウザー ウィンドウに貼り付けます。 このページには、Hello Azure Logic Apps Template! メッセージが表示されます。

  3. 次のコマンドを実行して、これまでにデプロイしたすべての Azure Logic Apps ワークフローを一覧表示します。

    az resource list \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --resource-type Microsoft.Logic/workflows \
    --query [*].[name,location] --output tsv
    

    このコマンドにより、これまでにすべてテンプレートからデプロイした 3 つの Azure Logic Apps ワークフローが一覧表示されます。

Azure Resource Manager テンプレートでアプリのアクションを更新する

ここで、単に静的メッセージ返信する以上のことをアプリで行えるようにしてみましょう。 HTTP によってトリガーされるワークフローとしてアプリを維持します。これにより引き続き HTTP 応答が返されます。 要求でいくつかの値を渡し、アプリに計算させてみましょう。 基本的な面積計算を実行します。 渡す入力が四角形の高さと幅だと仮定して、面積を返します。 次に、新しいアプリをデプロイして、アクションでその実行を監視します。

  1. Cloud Shell で次のコマンドを実行して、組み込みのエディターで template-with-params.json を開きます。

    code template-with-params.json
    
  2. 次のスニペットに示すように、relativePath フィールドを HTTP 要求トリガーの inputs セクションに追加します。

    "inputs": {
        "method": "GET",
        "relativePath": "{width}/{height}",
        "schema": {}
    }
    

    relativePath エントリは、HTTP エンドポイント URL で受け入れるパラメーターを指定します。 この場合、2 つのパラメーター widthheight を定義します。 これらのパラメーターの値を使用して、面積を計算して結果を返します。

  3. Response アクションの本文を次の行で更新します。

    "body": "Response from @{workflow().name}  Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height'])  , int(triggerOutputs()['relativePathParameters']['width'])  )}",
    

    応答の更新により、次のタスクが実行されます。

    • ロジック アプリの名前を出力する。 応答は、ワークフローに workflow() 関する情報を返すために関数を呼び出します。 その結果から、名前プロパティを参照します。

    • URL パラメーターからの高さと幅の文字列値に相当する整数の積を返す。 このタスクでは、mul() 関数と int() 変換関数が使用されます。

  4. Ctrl + S キーを押して、template-with-params.json にすべての変更を保存します。

  5. Cloud Shell で az deployment group validate コマンドを使ってこれらを変更した後に、テンプレートを検証します。 この例では、インライン パラメーターを使用してアプリの名前を CalculateArea に設定します。

    az deployment group validate \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
    
  6. 次のコマンドを実行して、変更を CalculateArea という名前のロジック アプリにデプロイします。 location パラメーターの値を省略して、既定値だけを使用します。

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
    

    デプロイには少し時間がかかりますが、Cloud Shell のコマンド ラインで進行状況を見ることができます。 デプロイが完了すると、JSON 結果の provisioningState の値が Succeeded になるはずです。

  7. アプリの動作を確認するには、JSON の結果で logicAppUrl の値を検索します。 URL を選択し、新しいブラウザー ウィンドウに貼り付けます。

  8. ブラウザーで URL を更新します。/triggers/manual/paths/invoke?api/triggers/manual/paths/invoke/{width}/{height}?api に変更します。{width}{height} は面積を計算する領域の高さと幅の整数値です。 たとえば、/triggers/manual/paths/invoke/6/7?api のようにします。 次のスクリーンショットに示すように、アプリからの応答でワークフローの名前と計算領域が一覧表示されます。

    Sceenshot of web browser displaying response from our app called calculate area.

  9. 次のコマンドを実行して、これまでにデプロイしたすべての Azure Logic Apps ワークフローを一覧表示します。

    az resource list \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --resource-type Microsoft.Logic/workflows \
    --query [*].[name,location] --output tsv
    

この演習では、パラメーターを使用してテンプレートの柔軟性を高めました。 これらのパラメーターをコマンド ラインでおよびローカル ファイルを使用して指定しました。 返信する応答の body を直接変更することで、この単純なワークフローで実行するアクションも更新しました。

パラメーターとテンプレート ファイルは、Cloud Shell で次の curl コマンドを使用して、GitHub からダウンロードできます。

curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json