Краткое руководство по созданию базы данных Azure Cosmos DB и контейнера с помощью Bicep

Azure Cosmos DB — это быстрая база данных NoSQL от Майкрософт с открытыми API для использования в любом масштабе. С помощью Azure Cosmos DB вы можете быстро создавать базы данных с парами "ключ — значение", документами, графами и обращаться к ним. Без кредитной карты или подписки Azure можно настроить бесплатную пробную учетную запись Azure Cosmos DB. В этом кратком руководстве описывается процесс развертывания файла Bicep для создания базы данных Azure Cosmos DB и контейнера в ней. Впоследствии в этом контейнере можно будет хранить данные.

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".

Предпосылки

Подписка Azure или бесплатная пробная учетная запись Azure Cosmos DB.

Проверьте файл Bicep

Файл Bicep, используемый в этом быстром старте, взят из шаблонов Azure Quickstart.

@description('Azure Cosmos DB account name, max length 44 characters')
param accountName string = 'sql-${uniqueString(resourceGroup().id)}'

@description('Location for the Azure Cosmos DB account.')
param location string = resourceGroup().location

@description('The primary region for the Azure Cosmos DB account.')
param primaryRegion string

@description('The secondary region for the Azure Cosmos DB account.')
param secondaryRegion string

@allowed([
  'Eventual'
  'ConsistentPrefix'
  'Session'
  'BoundedStaleness'
  'Strong'
])
@description('The default consistency level of the Cosmos DB account.')
param defaultConsistencyLevel string = 'Session'

@minValue(10)
@maxValue(2147483647)
@description('Max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 2147483647. Multi Region: 100000 to 2147483647.')
param maxStalenessPrefix int = 100000

@minValue(5)
@maxValue(86400)
@description('Max lag time (minutes). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400.')
param maxIntervalInSeconds int = 300

@allowed([
  true
  false
])
@description('Enable system managed failover for regions')
param systemManagedFailover bool = true

@description('The name for the database')
param databaseName string = 'myDatabase'

@description('The name for the container')
param containerName string = 'myContainer'

@minValue(400)
@maxValue(1000000)
@description('The throughput for the container')
param throughput int = 400

var consistencyPolicy = {
  Eventual: {
    defaultConsistencyLevel: 'Eventual'
  }
  ConsistentPrefix: {
    defaultConsistencyLevel: 'ConsistentPrefix'
  }
  Session: {
    defaultConsistencyLevel: 'Session'
  }
  BoundedStaleness: {
    defaultConsistencyLevel: 'BoundedStaleness'
    maxStalenessPrefix: maxStalenessPrefix
    maxIntervalInSeconds: maxIntervalInSeconds
  }
  Strong: {
    defaultConsistencyLevel: 'Strong'
  }
}
var locations = [
  {
    locationName: primaryRegion
    failoverPriority: 0
    isZoneRedundant: false
  }
  {
    locationName: secondaryRegion
    failoverPriority: 1
    isZoneRedundant: false
  }
]

resource account 'Microsoft.DocumentDB/databaseAccounts@2024-02-15-preview' = {
  name: toLower(accountName)
  location: location
  kind: 'GlobalDocumentDB'
  properties: {
    consistencyPolicy: consistencyPolicy[defaultConsistencyLevel]
    locations: locations
    databaseAccountOfferType: 'Standard'
    enableAutomaticFailover: systemManagedFailover
    disableKeyBasedMetadataWriteAccess: true
  }
}

resource database 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2024-02-15-preview' = {
  parent: account
  name: databaseName
  properties: {
    resource: {
      id: databaseName
    }
  }
}

resource container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2024-02-15-preview' = {
  parent: database
  name: containerName
  properties: {
    resource: {
      id: containerName
      partitionKey: {
        paths: [
          '/myPartitionKey'
        ]
        kind: 'Hash'
      }
      indexingPolicy: {
        indexingMode: 'consistent'
        includedPaths: [
          {
            path: '/*'
          }
        ]
        excludedPaths: [
          {
            path: '/myPathToNotIndex/*'
          }
          {
            path: '/_etag/?'
          }
        ]
        compositeIndexes: [
          [
            {
              path: '/name'
              order: 'ascending'
            }
            {
              path: '/age'
              order: 'descending'
            }
          ]
        ]
        spatialIndexes: [
          {
            path: '/location/*'
            types: [
              'Point'
              'Polygon'
              'MultiPolygon'
              'LineString'
            ]
          }
        ]
      }
      defaultTtl: 86400
      uniqueKeyPolicy: {
        uniqueKeys: [
          {
            paths: [
              '/phoneNumber'
            ]
          }
        ]
      }
    }
    options: {
      throughput: throughput
    }
  }
}

output location string = location
output name string = database.name
output resourceGroupName string = resourceGroup().name
output resourceId string = database.id

В файле Bicep определены эти ресурсы Azure:

В следующей таблице выделены ключевые параметры и выходные данные, которые вы будете наиболее часто просматривать или настраивать в этом Bicep-файле.

Параметр или выходные данные Значение по умолчанию или примеру Область и заметки
accountName Созданное уникальное имя Имя учетной записи Global Azure Cosmos DB.
databaseName myDatabase Имя базы данных API SQL.
containerName myContainer Имя контейнера API SQL.
throughput 400 Предоставленная пропускная способность в RU/s (единицы запросов в секунду).
partitionKeyPath /myPartitionKey Путь к ключу логического раздела.
defaultTtl -1 Время жизни в секундах; -1 означает, что элементы никогда не истекают.
Версия API 2023-11-15 Используемая версия API SQL; поведение может измениться с более новыми версиями.

Important

Поставщик Microsoft.DocumentDB/databaseAccountsAzure Resource Manager поддерживает то же имя в течение многих лет. Это гарантирует, что шаблоны, написанные много лет назад, остаются совместимыми с тем же поставщиком, даже если названия услуги и подуслуг изменились.

Разверните BICEP-файл

  1. Сохраните файл Bicep с именем main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

    az group create --name exampleRG --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep --parameters primaryRegion=<primary-region> secondaryRegion=<secondary-region>
    

    Замечание

    Замените <primary-region> основным регионом реплики для учетной записи Azure Cosmos DB, например westus. Замените <вторичный регион> вторичным регионом реплики для учетной записи Azure Cosmos DB, например eastus.

    Значения региона используют формат имени региона Azure (например, eastus, westus2).

    После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.

В следующих фрагментах кода показаны примеры значений параметров и проверка развертывания.

az deployment group create \
  --resource-group exampleRG \
  --template-file main.bicep \
  --parameters primaryRegion=eastus secondaryRegion=westus
az cosmosdb sql database list --account-name <account-name> --resource-group exampleRG

Ожидаемые выходные данные включают указанное имя базы данных, например "name": "myDatabase".

Проверка развертывания

Используйте портал Azure, Azure CLI или Azure PowerShell для получения списка ресурсов, развернутых в группе ресурсов.

az resource list --resource-group exampleRG

Очистите ресурсы

Если вы планируете продолжить работать с последующими краткими руководствами и учебниками, то, возможно, стоит оставить эти ресурсы неизменными. Если больше не требуется, используйте портал Azure, Azure CLI или Azure PowerShell, чтобы удалить группу ресурсов и ее ресурсы.

az group delete --name exampleRG

Дальнейшие действия

В этом кратком руководстве вы создали учетную запись Azure Cosmos DB, базу данных и контейнер с помощью файла Bicep и проверили развертывание. Дополнительные сведения об Azure Cosmos DB и Bicep см. в указанных ниже статьях.