この記事では、カスタム アクションを実装する 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 | いいえ | エンドポイントに送信される要求本文。 |