カスタム アクションを Azure REST API に追加する

この記事では、カスタム アクションを実装する Azure カスタム リソース プロバイダー エンドポイントの作成に関する要件とベスト プラクティスについて説明します。 Azure カスタム リソースプロバイダーについてよくご存じでない場合は、カスタム リソースプロバイダーの概要に関するページを参照してください。

アクション エンドポイントの定義方法

エンドポイントはサービスを指す URL であり、サービスと Azure 間の基になるコントラクトを実装するものです。 エンドポイントはカスタム リソース プロバイダー内に定義されており、一般にアクセス可能な URL にすることができます。 次のサンプルには、endpointURLによって実装される、myCustomAction と呼ばれるアクションが含まれています。

サンプルの ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "myCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
  "name": "{resourceProviderName}"
}

アクション エンドポイントを構築する

アクションを実装するエンドポイントでは、Azure で新しい API 向けに要求と応答を処理する必要があります。 アクションのあるカスタム リソース プロバイダーが作成されると、Azure に API の新しいセットが生成されます。 この場合、アクションにより POST 呼び出し用の新しい Azure アクション API が生成されます。

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

Azure API 着信要求:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

この要求は、その後、次の形式でエンドポイントに転送されます。

POST https://{endpointURL}/?api-version=2018-09-01-preview
Content-Type: application/json
X-MS-CustomProviders-RequestPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

同様に、エンドポイントからの応答は、その後顧客に返されます。 エンドポイントからの応答は、次のように返される必要があります。

  • 有効な JSON オブジェクト ドキュメント。 すべての配列と文字列は、最上位のオブジェクトの下で入れ子にする必要があります。
  • Content-Type ヘッダーは "application/json; charset=utf-8" に設定される必要があります。
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Azure カスタム リソースプロバイダーの応答:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

カスタム アクションを呼び出す

カスタム リソース プロバイダーのカスタム アクションの呼び出しには主に 2 つの方法があります。

  • Azure CLI
  • Azure Resource Manager のテンプレート

Azure CLI

az resource invoke-action --action {actionName} \
                          --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
                          --request-body \
                            '{
                                "myProperty1": "myPropertyValue1",
                                "myProperty2": {
                                    "myProperty3": "myPropertyValue3"
                                }
                            }'
パラメーター 必須 説明
action はい ResourceProvider で定義されているアクションの名前。
ids はい ResourceProvider のリソース ID。
request-body いいえ エンドポイントに送信される要求本文。

Azure Resource Manager テンプレート

Note

Azure Resource Manager テンプレートでのアクションのサポートは制限されています。 テンプレート内でアクションを呼び出すためには、その名前に list プレフィックスが含まれている必要があります。

リスト アクションのあるサンプルの ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "listMyCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus"
}

サンプルの Azure Resource Manager テンプレート:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
        "resourceIdentifier": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
        "apiVersion": "2018-09-01-preview",
        "functionValues": {
            "myProperty1": "myPropertyValue1",
            "myProperty2": {
                "myProperty3": "myPropertyValue3"
            }
        }
    },
    "resources": [],
    "outputs": {
        "myCustomActionOutput": {
            "type": "object",
            "value": "[listMyCustomAction(variables('resourceIdentifier'), variables('apiVersion'), variables('functionValues'))]"
        }
    }
}
パラメーター 必須 説明
resourceIdentifier はい ResourceProvider のリソース ID。
apiVersion はい リソースのランタイムの API バージョン。 常に "2018-09-01-preview" に設定する必要があります。
functionValues いいえ エンドポイントに送信される要求本文。

次のステップ