クイック スタート: Azure カスタム リソースプロバイダーの作成とカスタム リソースのデプロイ

このクイックスタートでは、カスタム リソース プロバイダーを作成し、そのリソース プロバイダーのカスタム リソースをデプロイします。 カスタム リソース プロバイダーの詳細については、「Azure カスタム リソース プロバイダーの概要」を参照してください。

前提条件

Azure CLI の環境を準備します。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

Azure CLI の例では、REST 要求に az rest を使用しています。 詳細については、「az rest」を参照してください。

カスタム リソースプロバイダーをデプロイする

カスタム リソース プロバイダーを設定するには、お使いの Azure サブスクリプションにテンプレートの例をデプロイします。

テンプレートでは、次のリソースがサブスクリプションにデプロイされます。

  • リソースおよびアクションの操作が含まれている関数アプリ。
  • カスタム リソース プロバイダーを通じて作成されたユーザーを格納するためのストレージ アカウント。
  • カスタム リソースの種類とアクションを定義するカスタム リソース プロバイダー。 これは、要求を送信するために、関数アプリ エンドポイントを使用します。
  • カスタム リソース プロバイダーからのカスタム リソース。

カスタム リソース プロバイダーをデプロイするには、Azure CLI、PowerShell、または Azure portal を使用します。

この例では、リソース グループ、場所、プロバイダーの関数アプリ名を入力するように求められます。 これらの名前は変数に格納され、他のコマンドで使用されます。 リソースは、az group create コマンドと az deployment group create コマンドでデプロイします。

read -p "Enter a resource group name:" rgName &&
read -p "Enter the location (i.e. eastus):" location &&
read -p "Enter the provider's function app name:" funcName &&
templateUri="https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/custom-providers/customprovider.json" &&
az group create --name $rgName --location "$location" &&
az deployment group create --resource-group $rgName --template-uri $templateUri --parameters funcName=$funcName &&
echo "Press [ENTER] to continue ..." &&
read

Azure portal からテンプレートをデプロイするには、[Azure へのデプロイ] ボタンを選択します。

Button to deploy the Resource Manager template to Azure.

カスタム リソース プロバイダーとリソースを確認する

ポータル内では、カスタム リソース プロバイダーは非表示のリソースの種類です。 リソース プロバイダーがデプロイされたことを確認するには、リソース グループに移動し、[非表示の種類を表示] を選択します。

Screenshot of Azure portal displaying hidden resource types and resources deployed in a resource group.

デプロイしたカスタム リソースを表示するには、お使いのリソースの種類に対して GET 操作を使用します。 JSON 応答に表示されるリソースの種類 Microsoft.CustomProviders/resourceProviders/users には、テンプレートによって作成されたリソースが含まれます。

GET https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users?api-version=2018-09-01-preview
subID=$(az account show --query id --output tsv)
requestURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/users?api-version=2018-09-01-preview"
az rest --method get --uri $requestURI

応答を受信します。

{
  "value": [
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/ana",
      "name": "ana",
      "properties": {
        "FullName": "Ana Bowman",
        "Location": "Moon",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    }
  ]
}

アクションを呼び出す

お使いのカスタム リソース プロバイダーには、ping という名前のアクションもあります。 要求を処理するコードは、関数アプリ内に実装されています。 ping アクションは、応答メッセージで応答します。

ping 要求を送信するには、アクションの POST 操作を使用します。

POST https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/ping?api-version=2018-09-01-preview
pingURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/ping?api-version=2018-09-01-preview"
az rest --method post --uri $pingURI

応答を受信します。

{
  "message": "hello <function-name>.azurewebsites.net",
  "pingcontent": {
    "source": "<function-name>.azurewebsites.net"
  }
}

PUT を使用してリソースを作成する

このクイックスタートでは、テンプレートがリソースの種類 Microsoft.CustomProviders/resourceProviders/users を使用してリソースをデプロイしています。 PUT 操作を使用してリソースを作成することもできます。 たとえば、リソースがテンプレートでデプロイされていない場合、PUT 操作によってリソースを作成します。

この例では、テンプレートによってリソースが既にデプロイされているため、PUT 操作によって新しいリソースを作成します。

PUT https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/<resource-name>?api-version=2018-09-01-preview

{"properties":{"FullName": "Test User", "Location": "Earth"}}
addURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/users/testuser?api-version=2018-09-01-preview"
az rest --method put --uri $addURI --body "{'properties':{'FullName': 'Test User', 'Location': 'Earth'}}"

応答を受信します。

{
  "id": "/subscriptions/<sub-ID>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/testuser",
  "name": "testuser",
  "properties": {
    "FullName": "Test User",
    "Location": "Earth",
    "provisioningState": "Succeeded"
  },
  "type": "Microsoft.CustomProviders/resourceProviders/users"
}

カスタム リソース プロバイダーとリソースを確認する」セクションから GET 操作を再実行して、作成された 2 つのリソースを表示できます。 この例では、Azure CLI コマンドからの出力が表示されます。

{
  "value": [
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/ana",
      "name": "ana",
      "properties": {
        "FullName": "Ana Bowman",
        "Location": "Moon",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    },
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/testuser",
      "name": "testuser",
      "properties": {
        "FullName": "Test User",
        "Location": "Earth",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    }
  ]
}

カスタム リソース プロバイダーのコマンド

カスタム リソース プロバイダーを操作するには、custom-providers コマンドを使用します。

カスタム リソース プロバイダーの一覧表示

サブスクリプション内のカスタム リソースプロバイダーをすべて表示するには、list コマンドを使用します。 既定では、現在のサブスクリプションのカスタム リソースプロバイダーが一覧表示されますが、--subscription パラメーターを指定することもできます。 リソース グループに対して一覧表示するには、--resource-group パラメーターを使用します。

az custom-providers resource-provider list --subscription $subID
[
  {
    "actions": [
      {
        "endpoint": "https://<provider-name>.azurewebsites.net/api/{requestPath}",
        "name": "ping",
        "routingType": "Proxy"
      }
    ],
    "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceproviders/<provider-name>",
    "location": "eastus",
    "name": "<provider-name>",
    "provisioningState": "Succeeded",
    "resourceGroup": "<rg-name>",
    "resourceTypes": [
      {
        "endpoint": "https://<provider-name>.azurewebsites.net/api/{requestPath}",
        "name": "users",
        "routingType": "Proxy, Cache"
      }
    ],
    "tags": {},
    "type": "Microsoft.CustomProviders/resourceproviders",
    "validations": null
  }
]

プロパティの表示

カスタム リソースプロバイダーのプロパティを表示するには、show コマンドを使用します。 出力形式は list の出力に似ています。

az custom-providers resource-provider show --resource-group $rgName --name $funcName

新しいリソースを作成

カスタム リソース プロバイダーを作成または更新するには、create コマンドを使用します。 この例では、actionsresourceTypes を更新します。

az custom-providers resource-provider create --resource-group $rgName --name $funcName \
--action name=ping endpoint=https://myTestSite.azurewebsites.net/api/{requestPath} routing_type=Proxy \
--resource-type name=users endpoint=https://myTestSite.azurewebsites.net/api/{requestPath} routing_type="Proxy, Cache"
"actions": [
  {
    "endpoint": "https://myTestSite.azurewebsites.net/api/{requestPath}",
    "name": "ping",
    "routingType": "Proxy"
  }
],

"resourceTypes": [
  {
    "endpoint": "https://myTestSite.azurewebsites.net/api/{requestPath}",
    "name": "users",
    "routingType": "Proxy, Cache"
  }
],

プロバイダーのタグの更新

update コマンドでは、カスタム リソース プロバイダーのタグのみを更新します。 Azure portal では、カスタム リソース プロバイダーの App Service にタグが表示されます。

az custom-providers resource-provider update --resource-group $rgName --name $funcName --tags new=tag
"tags": {
  "new": "tag"
},

カスタム リソース プロバイダーの削除

delete コマンドでは、プロンプトを表示し、カスタム リソース プロバイダーのみを削除します。 ストレージ アカウント、App Service、App Service プランは削除されません。 プロバイダーが削除されると、コマンド プロンプトに戻ります。

az custom-providers resource-provider delete --resource-group $rgName --name $funcName

リソースをクリーンアップする

この記事で作成したリソースの使用が完了したら、リソース グループを削除することができます。 リソース グループを削除すると、リソース グループ内のすべてのリソースが削除されます。

az group delete --resource-group $rgName

次のステップ

カスタム リソース プロバイダーの概要については、次の記事をご覧ください。