functions/CosmosDBAccount.ps1

function Get-SpqReferenceToCosmosDbAccountKey {
    Param(
        [parameter(Mandatory = $true)] [object] $CosmosDbAccount
    )

    $reference = "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', '" + $CosmosDbAccount.name + "'), providers('Microsoft.DocumentDB', 'databaseAccounts').apiVersions[0]).primaryMasterKey]"
    return $reference
}

function Get-SpqReferenceToCosmosDbAccountConnectionString {
    Param(
        [parameter(Mandatory = $true)] [object] $CosmosDbAccount
    )
    $reference = "[concat('AccountEndpoint=https://" + $CosmosDbAccount.name + ".documents.azure.com:443/;AccountKey=', listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', '" + $CosmosDbAccount.name + "'), providers('Microsoft.DocumentDB', 'databaseAccounts').apiVersions[0]).primaryMasterKey, ';')]"
    return $reference
}

function Get-SpqCosmosDbAccount {
    Param(
        [parameter(Mandatory = $true)] [string] $ApplicationCode,
        [parameter(Mandatory = $true)] [string] $EnvironmentName,
        [parameter(Mandatory = $true)] [string] $Location,
        [parameter(Mandatory = $false)] [string] $UniqueNamePhrase = $null,
        [string] $ExceptionGuid,
        [parameter(Mandatory = $false)] [string] $LogAnalyticsResourceGroupName = "",
        [parameter(Mandatory = $false)] [string] $LogAnalyticsWorkspaceName = ""
    )
    
    $cosmosName = Get-SpqResourceName `
        -ApplicationCode $ApplicationCode `
        -EnvironmentName $EnvironmentName `
        -UniqueNamePhrase $UniqueNamePhrase `
        -ServiceTypeName "Microsoft.DocumentDB/databaseAccounts" `
        -Location $Location

    $cosmosDiagnosticsSettingName = $cosmosName + "-diagsett"

    $diagnosticSettingJson = '
    {
        "type": "providers/diagnosticSettings",
        "name": "Microsoft.Insights/'
 + $cosmosDiagnosticsSettingName + '",
        "dependsOn": [
            "[resourceId(''Microsoft.DocumentDB/databaseAccounts'', '''
 + $cosmosName + ''')]"
        ],
        "apiVersion": "2017-05-01-preview",
        "properties": {
            "name": "'
 + $cosmosDiagnosticsSettingName + '",
            "workspaceId": "[resourceId('''
 + $LogAnalyticsResourceGroupName + ''', ''microsoft.operationalinsights/workspaces'', ''' + $LogAnalyticsWorkspaceName + ''')]",
            "metrics": [
                {
                    "category": "Requests",
                    "enabled": true
                }
            ],
            "logs": [
                {
                  "category": "ControlPlaneRequests",
                  "enabled": true
                },
                {
                    "category": "DataPlaneRequests",
                    "enabled": true
                }
            ]
        }
    }
    '


    $diagnosticSettingObj = ConvertFrom-Json $diagnosticSettingJson

    $json = '
    {
        "type": "Microsoft.DocumentDB/databaseAccounts",
        "apiVersion": "2019-08-01",
        "name": "'
 + $cosmosName + '",
        "location": "'
 + $Location + '",
        "tags": {
            "defaultExperience": "Core (SQL)"
        },
        "kind": "GlobalDocumentDB",
        "properties": {
            "enableAutomaticFailover": false,
            "enableMultipleWriteLocations": true,
            "isVirtualNetworkFilterEnabled": false,
            "virtualNetworkRules": [],
            "databaseAccountOfferType": "Standard",
            "consistencyPolicy": {
                "defaultConsistencyLevel": "Session",
                "maxIntervalInSeconds": 5,
                "maxStalenessPrefix": 100
            },
            "locations": [
                {
                    "locationName": "'
 + $Location + '",
                    "failoverPriority": 0,
                    "isZoneRedundant": false
                }
            ],
            "capabilities": []
        },
        "resources": [
        ]
    }
    '


    $obj = ConvertFrom-Json $json

    if ($LogAnalyticsResourceGroupName -ne "")
    {
        $obj.resources += $diagnosticSettingObj
    }

    return $obj
}