カスタム アクションを 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 | いいえ | エンドポイントに送信される要求本文。 |