Azure Resource Manager テンプレートを使用してインデックス ポリシーを管理する

完了

Azure Cosmos DB アカウントとそのリソースを自動化された方法でデプロイする一環として、インデックス作成ポリシーを定義する方法が一般的です。 Azure Resource Manager テンプレートの JSON 構文と Bicep 構文では、インデックス作成ポリシーのネイティブ定義がサポートされています。 ただし、以前に試したことがない場合は、構文が難しい場合があります。

このユニットの例では、次のインデックス作成ポリシーを products コンテナーにデプロイするとします。

JSON テンプレートでのインデックス作成ポリシーの定義

次のインデックス作成ポリシーをアカウントの products コンテナーにデプロイするとします。

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/price/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

indexingPolicy オブジェクトを変更せずにリフトして、Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containersproperties.resource.indexingPolicy プロパティに設定することができます。

{
  "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
  "apiVersion": "2021-05-15",
  "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks/products')]",
  "dependsOn": [
    "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]",
    "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', concat('csmsarm', uniqueString(resourceGroup().id)), 'cosmicworks')]"
  ],
  "properties": {
    "options": {
      "throughput": 400
    },
    "resource": {
      "id": "products",
      "partitionKey": {
        "paths": [
          "/categoryId"
        ]
      },
      "indexingPolicy": {
        "indexingMode": "consistent",
        "automatic": true,
        "includedPaths": [
          {
            "path": "/price/*"
          }
        ],
        "excludedPaths": [
          {
            "path": "/*"
          }
        ]
      }
    }
  }
}

Bicep テンプレートでのインデックス作成ポリシーの定義

次のインデックス作成ポリシーをアカウントの customers コンテナーにデプロイするとします。

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/address/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

Bicep でこのインデックス作成ポリシーを使用するには、いくつかの小さな変更が必要です。 次のような変更です。

  • プロパティ名からの二重引用符を削除する
  • プロパティ値を二重引用符から単一引用符に変更する
  • JSON で通常必要とされるコンマを削除する
resource Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2021-05-15' = {
  parent: Database
  name: 'customers'
  properties: {
    resource: {
      id: 'customers'
      partitionKey: {
        paths: [
          '/regionId'
        ]
      }
      indexingPolicy: {
        indexingMode: 'consistent'
        automatic: true
        includedPaths: [
          {
            path: '/address/*'
          }
        ]
        excludedPaths: [
          {
            path: '/*'
          }
        ]
      }
    }
  }
}

既存のコンテナーのインデックス作成ポリシーを更新する

種類が Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers のリソースが既に存在し、他のすべてのプロパティが一致する場合は properties.resource.indexingPolicy プロパティ内の値のみを変更することで、インデックス作成ポリシーを更新できます。 Azure Resource Manager は、コンテナーの残りの部分を維持しながら、インデックス作成ポリシーのみを変更します。

デプロイのコマンドは、最初のデプロイと同じです。

az deployment group create \
    --resource-group '<resource-group>' \
    --template-file '.\template.json' \
    --name 'jsontemplatedeploy'
az deployment group create \
    --resource-group '<resource-group>' \
    --template-file '.\template.bicep' \
    --name 'biceptemplatedeploy'