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/containers の properties.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'