カスタム リソースのキャッシュのリファレンス

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

キャッシュ リソース エンドポイントを定義する

プロキシ リソースは、routingType を "Proxy, Cache" と指定することで作成できます。

サンプルのカスタム リソース プロバイダー:

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

プロキシ リソース エンドポイントを構築する

"Proxy, Cache" リソース エンドポイントを実装するエンドポイントでは、Azure の新しい API に対する要求と応答を処理する必要があります。 この場合、resourceType により、シングル リソース上で CRUD を実行するための PUTGETDELETE 用、そしてすべての既存リソースを取得するための GET 用に、新しい Azure リソース API が生成されます。

注意

Azure API は要求メソッドの PUTGET、および DELETE を生成しますが、キャッシュ エンドポイントは PUTDELETE だけを処理する必要があります。 エンドポイントに GET も実装することをお勧めします。

カスタム リソースの作成

Azure API 着信要求:

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

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

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

PUT 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}/myCustomResources/{myCustomResourceName}

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

エンドポイントからの応答は、その後顧客に返されます。 この応答では以下を返す必要があります。

  • 有効な JSON オブジェクト ドキュメント。 すべての配列と文字列は、最上位のオブジェクトの下で入れ子にする必要があります。
  • Content-Type ヘッダーは "application/json; charset=utf-8" に設定される必要があります。
  • カスタム リソースプロバイダーは、要求の nametype、および id フィールドを上書きします。
  • カスタム リソースプロバイダーは、キャッシュ エンドポイントの properties オブジェクトの下にあるフィールドのみを返します。

エンドポイントの応答:

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

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

nameid、および type フィールドは、カスタム リソースプロバイダーによって、カスタム リソース用に自動的に生成されます。

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

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

カスタム リソースの削除

Azure API 着信要求:

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

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

Delete 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}/myCustomResources/{myCustomResourceName}

エンドポイントからの応答は、その後顧客に返されます。 この応答では以下を返す必要があります。

  • 有効な JSON オブジェクト ドキュメント。 すべての配列と文字列は、最上位のオブジェクトの下で入れ子にする必要があります。
  • Content-Type ヘッダーは "application/json; charset=utf-8" に設定される必要があります。
  • Azure カスタム リソースプロバイダーは、200 レベルの応答が返された場合にのみ、アイテムをキャッシュから削除します。 リソースが存在しない場合でも、エンドポイントでは 204 を返す必要があります。

エンドポイントの応答:

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

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

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

カスタム リソースの取得

Azure API 着信要求:

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

この要求は、エンドポイントに転送されません

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

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

{
    "name": "{myCustomResourceName}",
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
    "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
    "properties": {
        "myProperty1": "myPropertyValue1",
        "myProperty2": {
            "myProperty3" : "myPropertyValue3"
        }
    }
}

すべてのカスタム リソースの列挙

Azure API 着信要求:

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

この要求は、エンドポイントに転送されません

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

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

{
    "value" : [
        {
            "name": "{myCustomResourceName}",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResources/{myCustomResourceName}",
            "type": "Microsoft.CustomProviders/resourceProviders/myCustomResources",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3" : "myPropertyValue3"
                }
            }
        }
    ]
}

次のステップ