Skip to content

Instantly share code, notes, and snippets.

@alexdrenea
Last active June 22, 2019 22:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexdrenea/e824788f6b678b5dba3fcf754aac6e49 to your computer and use it in GitHub Desktop.
Save alexdrenea/e824788f6b678b5dba3fcf754aac6e49 to your computer and use it in GitHub Desktop.
<#PSScriptInfo
.VERSION 1.0
.GUID e824788f-6b67-8b5d-ba3f-cf754aac6e49
.AUTHOR Alex Drenea
.COMPANYNAME Alex Drenea
.COPYRIGHT
.TAGS CosmosDB Azure
.LICENSEURI https://www.apache.org/licenses/LICENSE-2.0.txt
.PROJECTURI https://gist.github.com/alexdrenea/e824788f6b678b5dba3fcf754aac6e49
.ICONURI https://alexdrenea.com/css/images/logo.png
.EXTERNALMODULEDEPENDENCIES Az
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES The script provides the ability to scale an Azure CosmosDb database.
#>
<#
.DESCRIPTION
The script provides the ability to scale an Azure CosmosDb database.
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
param(
[Parameter(Mandatory = $true)]
[string] $ResourceGroupName,
[Parameter(Mandatory = $true)]
[string] $AccountName,
[Parameter(Mandatory = $true)]
[string] $DatabaseName,
[Parameter(Mandatory = $true)]
[string] $ContainerName,
[Parameter(Mandatory = $true, HelpMessage="Values between 400 and 1000000 inclusive in increments of 100")]
[int] $Throughput
)
$connectionName = "AzureRunAsConnection"
try {
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
Connect-AzAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
if (!$servicePrincipalConnection) {
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
}
else {
Write-Error -Message $_.Exception
throw $_.Exception
}
}
if ( $Throughput -lt 400 -or $Throughput -gt 1000000 -or ($Throughput % 100) -ne 0 ){
$message = "Invalid Throughput $Throughput. Values between 400 and 1000000 inclusive in increments of 100"
Write-Error -Message $message
return
}
$ErrorActionPreference = "Continue"
$p = Get-AzResource `
-ResourceType "Microsoft.DocumentDb/databaseAccounts" -ApiVersion "2016-03-31" `
-ResourceGroupName $ResourceGroupName -Name $accountName `
| Select-Object -expand Properties
$accountType = $p.EnabledApiTypes
$resourceType = ''
$resourceName = ''
if ($accountType -match 'Table'){
$resourceType = 'Microsoft.DocumentDb/databaseAccounts/apis/tables/settings'
$resourceName = $accountName + "/table/" + $ContainerName + "/throughput"
}
elseif ($accountType -match 'MongoDB'){
$resourceType = 'Microsoft.DocumentDb/databaseAccounts/apis/databases/collections/settings';
$resourceName = $accountName + "/mongodb/" + $DatabaseName + "/" + $ContainerName + "/throughput"
}
elseif ($accountType -match 'Gremlin'){
$resourceType = 'Microsoft.DocumentDb/databaseAccounts/apis/databases/graphs/settings';
$resourceName = $accountName + "/gremlin/" + $DatabaseName + "/" + $ContainerName + "/throughput"
}
elseif ($accountType -match 'Cassandra'){
$resourceType = 'Microsoft.DocumentDB/databaseAccounts/apis/keyspaces/tables/settings';
$resourceName = $accountName + "/cassandra/" + $DatabaseName + "/" + $ContainerName + "/throughput"
}
elseif ($accountType -match 'Sql'){
$resourceType = 'Microsoft.DocumentDb/databaseAccounts/apis/databases/containers/settings';
$resourceName = $accountName + "/sql/" + $DatabaseName + "/" + $ContainerName + "/throughput"
}
else{
$message = "Unsupported CosmosDB account type '$accountType'. Supported APIs are: SQL, Gremlin, MongoDB, Table and Cassandra."
Write-Error -Message $message
return
}
$properties = @{
"resource"=@{"throughput"=$throughput}
}
try {
Set-AzResource `
-ResourceType $resourceType -ApiVersion "2016-03-31" `
-ResourceGroupName $ResourceGroupName -Name $resourceName `
-PropertyObject $properties `
-Force
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment