Azure Cosmos DB NoSQL용 API 데이터베이스 및 컨테이너 만들기
적용 대상: NoSQL
참고 항목
Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.
이 샘플에는 Azure PowerShell Az 5.4.0 이상이 필요합니다. Get-Module -ListAvailable Az
를 실행하여 설치된 버전을 확인합니다.
설치해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요.
Connect-AzAccount를 실행하여 Azure에 로그인합니다.
샘플 스크립트
이 스크립트는 세션 수준 일관성, 데이터베이스 및 파티션 키가 있는 컨테이너, 사용자 지정 인덱싱 정책, 고유 키 정책, TTL, 전용 처리량이 포함된 두 개의 지역에서 NoSQL용 API에 대한 Azure Cosmos DB 계정을 만들고 마지막 기록기는 multipleWriteLocations=true
일 때 사용할 사용자 지정 충돌 해결 경로를 통해 충돌 해결 정책을 얻습니다.
# Reference: Az.CosmosDB | https://docs.microsoft.com/powershell/module/az.cosmosdb
# --------------------------------------------------
# Purpose
# Create Cosmos SQL API account, database, and container with dedicated throughput,
# indexing policy with include, exclude, and composite paths, unique key, and conflict resolution
# --------------------------------------------------
Function New-RandomString{Param ([Int]$Length = 10) return $(-join ((97..122) + (48..57) | Get-Random -Count $Length | ForEach-Object {[char]$_}))}
# --------------------------------------------------
$uniqueId = New-RandomString -Length 7 # Random alphanumeric string for unique resource names
$apiKind = "Sql"
# --------------------------------------------------
# Variables - ***** SUBSTITUTE YOUR VALUES *****
$locations = @()
$locations += New-AzCosmosDBLocationObject -LocationName "East Us" -FailoverPriority 0 -IsZoneRedundant 0
$locations += New-AzCosmosDBLocationObject -LocationName "West Us" -FailoverPriority 1 -IsZoneRedundant 0
$resourceGroupName = "myResourceGroup" # Resource Group must already exist
$accountName = "cosmos-$uniqueId" # Must be all lower case
$consistencyLevel = "Session"
$tags = @{Tag1 = "MyTag1"; Tag2 = "MyTag2"; Tag3 = "MyTag3"}
$databaseName = "myDatabase"
$containerName = "myContainer"
$containerRUs = 400
$partitionKeyPath = "/myPartitionKey"
$indexPathIncluded = "/*"
$compositeIndexPaths1 = @(
@{ Path = "/myCompositePath1"; Order = "ascending" };
@{ Path = "/myCompositePath2"; Order = "descending" }
)
$compositeIndexPaths2 = @(
@{ Path = "/myCompositePath3"; Order = "ascending" };
@{ Path = "/myCompositePath4"; Order = "descending" }
)
$indexPathExcluded = "/myExcludedPath/*"
$uniqueKeyPath = "/myUniqueKeyPath"
$conflictResolutionPath = "/myResolutionPath"
$ttlInSeconds = 120 # Set this to -1 (or don't use it at all) to never expire
# --------------------------------------------------
Write-Host "Creating account $accountName"
$account = New-AzCosmosDBAccount -ResourceGroupName $resourceGroupName `
-LocationObject $locations -Name $accountName -ApiKind $apiKind -Tag $tags `
-DefaultConsistencyLevel $consistencyLevel `
-EnableAutomaticFailover:$true
Write-Host "Creating database $databaseName"
$database = New-AzCosmosDBSqlDatabase -ParentObject $account -Name $databaseName
$uniqueKey = New-AzCosmosDBSqlUniqueKey -Path $uniqueKeyPath
$uniqueKeyPolicy = New-AzCosmosDBSqlUniqueKeyPolicy -UniqueKey $uniqueKey
$compositePath1 = @()
ForEach ($compositeIndexPath in $compositeIndexPaths1) {
$compositePath1 += New-AzCosmosDBSqlCompositePath `
-Path $compositeIndexPath.Path `
-Order $compositeIndexPath.Order
}
$compositePath2 = @()
ForEach ($compositeIndexPath in $compositeIndexPaths2) {
$compositePath2 += New-AzCosmosDBSqlCompositePath `
-Path $compositeIndexPath.Path `
-Order $compositeIndexPath.Order
}
$includedPathIndex = New-AzCosmosDBSqlIncludedPathIndex -DataType String -Kind Range
$includedPath = New-AzCosmosDBSqlIncludedPath -Path $indexPathIncluded -Index $includedPathIndex
$indexingPolicy = New-AzCosmosDBSqlIndexingPolicy `
-IncludedPath $includedPath `
-CompositePath @($compositePath1, $compositePath2) `
-ExcludedPath $indexPathExcluded `
-IndexingMode Consistent -Automatic $true
# Conflict resolution policies only apply in multi-master accounts.
# Included here to show custom resolution path.
$conflictResolutionPolicy = New-AzCosmosDBSqlConflictResolutionPolicy `
-Type LastWriterWins -Path $conflictResolutionPath
Write-Host "Creating container $containerName"
$container = New-AzCosmosDBSqlContainer `
-ParentObject $database -Name $containerName `
-Throughput $containerRUs -IndexingPolicy $indexingPolicy `
-PartitionKeyKind Hash -PartitionKeyPath $partitionKeyPath `
-UniqueKeyPolicy $uniqueKeyPolicy `
-ConflictResolutionPolicy $conflictResolutionPolicy `
-TtlInSeconds $ttlInSeconds
배포 정리
스크립트 샘플을 실행한 후에 다음 명령을 사용하여 리소스 그룹 및 관련된 모든 리소스를 제거할 수 있습니다.
Remove-AzResourceGroup -ResourceGroupName "myResourceGroup"
스크립트 설명
이 스크립트는 다음 명령을 사용합니다. 테이블에 있는 각 명령은 명령에 해당하는 문서에 연결됩니다.
명령 | 주의 |
---|---|
Azure Cosmos DB | |
New-AzCosmosDBAccount | Azure Cosmos DB 계정을 만듭니다. |
New-AzCosmosDBSqlDatabase | Azure Cosmos DB SQL 데이터베이스를 만듭니다. |
New-AzCosmosDBSqlUniqueKey | New-AzCosmosDBSqlUniqueKeyPolicy에 대한 매개 변수로 사용되는 PSSqlUniqueKey 개체를 만듭니다. |
New-AzCosmosDBSqlUniqueKeyPolicy | New-AzCosmosDBSqlContainer에 대한 매개 변수로 사용되는 PSSqlUniqueKeyPolicy 개체를 만듭니다. |
New-AzCosmosDBSqlCompositePath | New-AzCosmosDBSqlIndexingPolicy에 대한 매개 변수로 사용되는 PSCompositePath 개체를 만듭니다. |
New-AzCosmosDBSqlIncludedPathIndex | New-AzCosmosDBSqlIncludedPath에 대한 매개 변수로 사용되는 PSIndexes 개체를 만듭니다. |
New-AzCosmosDBSqlIncludedPath | New-AzCosmosDBSqlIndexingPolicy에 대한 매개 변수로 사용되는 PSIncludedPath 개체를 만듭니다. |
New-AzCosmosDBSqlIndexingPolicy | New-AzCosmosDBSqlContainer의 매개 변수로 사용되는 PSSqlIndexingPolicy 개체를 만듭니다. |
New-AzCosmosDBSqlConflictResolutionPolicy | New-AzCosmosDBSqlContainer에 대한 매개 변수로 사용되는 PSSqlConflictResolutionPolicy 개체를 만듭니다. |
New-AzCosmosDBSqlContainer | 새 Azure Cosmos DB SQL 컨테이너를 만듭니다. |
Azure 리소스 그룹 | |
Remove-AzResourceGroup | 모든 중첩 리소스를 포함한 리소스 그룹을 삭제합니다. |
다음 단계
Azure PowerShell에 대한 자세한 내용은 Azure PowerShell 설명서를 참조하세요.