Push Data To Azure CosmosDb From Using PowerShell

In this article, we are going to demonstrate how we can use PowerShell scripts to save data in Azure CosmosDb collection from a file leveraging CosmosDb PowerShell package

Save data in Azure CosmosDb collection

CosmosDb is a fully managed, nosql, non relational database which allows us to store data durably with several ACID configurations. Microsoft guarantees speed at any scale

Let’s get started and write the code.

#region param
[CmdletBinding()]
param (
	[Parameter(Mandatory = $false)]
	[string]$resourceGroup = "",

	[Parameter(Mandatory = $false)]
	[string]$database = "",

	[Parameter(Mandatory = $false)]
	[string]$cosmosAccount = "",

	[Parameter(Mandatory = $false)]
	[string]$filePath = "../file.json"
)
#endregion param

Function UpdateCosmosDb
{
	$User = "Azure-userId"
	$PWord = ConvertTo-SecureString -String "Password" -AsPlainText -Force
	$tenant = "Azure Tenant Id"
	$subscription = "cAzure Subscription Id"
	$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
	Connect-AzAccount -Credential $Credential -Tenant $tenant -Subscription $subscription #Login into your azure account

	$module = Get-InstalledModule -Name 'CosmosDB'
	if($module -ne $null)
	{
		write-host "module CosmosDB avaiable"
	}
	else
	{
		write-host "module CosmosDB not avaiable download in progress"
		Install-Module -Name CosmosDB -AllowClobber -force
	}
	$items = Get-Content -path $filePath -Encoding UTF8 -Raw | ConvertFrom-Json
	$cosmosDbContext = New-CosmosDbContext -Account $cosmosAccount -Database $database -ResourceGroup $resourceGroup
	foreach($item in $items)
	{
		$id = $item.id
		$item | Add-Member -NotePropertyName id -NotePropertyValue $id #creates new property in josn
		$document = $item | ConvertTo-Json #converts the object into json
		$query = "SELECT c.id FROM c WHERE c.id = '$id'"
		write-host $query
		$existingDocument = Get-CosmosDbDocument -Context $cosmosDbContext -CollectionId 'ContainerId' -Query $query
		if($existingDocument -ne $null)
		{
			write-host "Remove $document"
			Remove-CosmosDbDocument -Context $cosmosDbContext -CollectionId 'ContainerId' -PartitionKey "$id" -Id "$id"
		}
		write-host "New $document"
		New-CosmosDbDocument -Context $cosmosDbContext -CollectionId 'ContainerId' -DocumentBody $document -PartitionKey "$id"
	}
}
UpdateCosmosDb

Note
If you are executing the above PowerShell in Azure pipeline with let’s say contributor role then you don’t need to perform Line No. 20 to 26

Keep coding

Cheers

Leave a Reply

Your email address will not be published. Required fields are marked *

Verified by MonsterInsights