Azure Resource Manager Cosmosdb Dotnet
MicrosoftOfficialCreated by Microsoft
- Skill
- Tool integration
- Cloud and DevOps
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The Azure.ResourceManager.CosmosDB SDK provides a .NET interface for management plane operations on Azure Cosmos DB. It allows developers to automate the provisioning and configuration of Cosmos DB accounts, databases, and containers, as well as manage throughput settings and RBAC configurations. This SDK is strictly for infrastructure management and should not be used for data plane operations like document CRUD or query execution.
What it does
- Provision and configure Cosmos DB accounts with specific consistency and failover policies.
- Create and manage SQL API databases and containers.
- Configure manual or autoscale throughput settings for databases and containers.
- Retrieve account keys and connection strings for application integration.
- Manage indexing policies, partition keys, and hierarchical partitioning.
- Perform lifecycle operations including updating and deleting Cosmos DB resources.
When to use it
- When automating infrastructure-as-code deployments for Cosmos DB.
- When you need to programmatically scale throughput or modify container settings.
- When managing multiple Cosmos DB accounts across different resource groups or subscriptions.
- When setting up environment-specific database configurations in a CI/CD pipeline.
Advantages
- Native .NET integration for seamless infrastructure management.
- Strongly typed models for complex resource configurations.
- Supports long-running operations with built-in wait mechanisms.
- Enables programmatic enforcement of infrastructure standards and policies.
Usage examples
- “How do I create a new Cosmos DB account using the .NET SDK?”
- The agent provides a code snippet using CosmosDBAccountCreateOrUpdateContent to define the account settings and calls CreateOrUpdateAsync on the account collection.
- “Show me how to update throughput for an existing SQL container.”
- The agent demonstrates using ThroughputSettingsUpdateData to set either manual or autoscale throughput and applying it via the container resource.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/microsoft/azure-resource-manager-cosmosdb-dotnet/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip azure-resource-manager-cosmosdb-dotnet.zip -d .agents/skills
Documentation by Microsoft
Azure.ResourceManager.CosmosDB (.NET)
Management plane SDK for provisioning and managing Azure Cosmos DB resources via Azure Resource Manager.
⚠️ Management vs Data Plane
This SDK (Azure.ResourceManager.CosmosDB): Create accounts, databases, containers, configure throughput, manage RBAC
Data Plane SDK (Microsoft.Azure.Cosmos): CRUD operations on documents, queries, stored procedures execution
Installation
dotnet add package Azure.ResourceManager.CosmosDB
dotnet add package Azure.IdentityCurrent Versions: Stable v1.4.0, Preview v1.4.0-beta.13
Environment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription ID
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
AZURE_TENANT_ID=<tenant-id> # For service principal auth (optional)
AZURE_CLIENT_ID=<client-id> # For service principal auth (optional)
AZURE_CLIENT_SECRET=<client-secret> # For service principal auth (optional)Authentication
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.CosmosDB;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
var credential = new DefaultAzureCredential(
DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);
// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));Resource Hierarchy
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── CosmosDBAccountResource
├── CosmosDBSqlDatabaseResource
│ └── CosmosDBSqlContainerResource
│ ├── CosmosDBSqlStoredProcedureResource
│ ├── CosmosDBSqlTriggerResource
│ └── CosmosDBSqlUserDefinedFunctionResource
├── CassandraKeyspaceResource
├── GremlinDatabaseResource
├── MongoDBDatabaseResource
└── CosmosDBTableResourceCore Workflow
1. Create Cosmos DB Account
using Azure.ResourceManager.CosmosDB;
using Azure.ResourceManager.CosmosDB.Models;
// Get resource group
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Define account
var accountData = new CosmosDBAccountCreateOrUpdateContent(
location: AzureLocation.EastUS,
locations: new[]
{
new CosmosDBAccountLocation
{
LocationName = AzureLocation.EastUS,
FailoverPriority = 0,
IsZoneRedundant = false
}
})
{
Kind = CosmosDBAccountKind.GlobalDocumentDB,
ConsistencyPolicy = new ConsistencyPolicy(DefaultConsistencyLevel.Session),
EnableAutomaticFailover = true
};
// Create account (long-running operation)
var accountCollection = resourceGroup.Value.GetCosmosDBAccounts();
var operation = await accountCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-cosmos-account",
accountData);
CosmosDBAccountResource account = operation.Value;2. Create SQL Database
var databaseData = new CosmosDBSqlDatabaseCreateOrUpdateContent(
new CosmosDBSqlDatabaseResourceInfo("my-database"));
var databaseCollection = account.GetCosmosDBSqlDatabases();
var dbOperation = await databaseCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-database",
databaseData);
CosmosDBSqlDatabaseResource database = dbOperation.Value;3. Create SQL Container
var containerData = new CosmosDBSqlContainerCreateOrUpdateContent(
new CosmosDBSqlContainerResourceInfo("my-container")
{
PartitionKey = new CosmosDBContainerPartitionKey
{
Paths = { "/partitionKey" },
Kind = CosmosDBPartitionKind.Hash
},
IndexingPolicy = new CosmosDBIndexingPolicy
{
Automatic = true,
IndexingMode = CosmosDBIndexingMode.Consistent
},
DefaultTtl = 86400 // 24 hours
});
var containerCollection = database.GetCosmosDBSqlContainers();
var containerOperation = await containerCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-container",
containerData);
CosmosDBSqlContainerResource container = containerOperation.Value;4. Configure Throughput
// Manual throughput
var throughputData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
Throughput = 400
});
// Autoscale throughput
var autoscaleData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
AutoscaleSettings = new AutoscaleSettingsResourceInfo
{
MaxThroughput = 4000
}
});
// Apply to database
await database.CreateOrUpdateCosmosDBSqlDatabaseThroughputAsync(
WaitUntil.Completed,
throughputData);5. Get Connection Information
// Get keys
var keys = await account.GetKeysAsync();
Console.WriteLine($"Primary Key: {keys.Value.PrimaryMasterKey}");
// Get connection strings
var connectionStrings = await account.GetConnectionStringsAsync();
foreach (var cs in connectionStrings.Value.ConnectionStrings)
{
Console.WriteLine($"{cs.Description}: {cs.ConnectionString}");
}Key Types Reference
| Type | Purpose |
|---|---|
ArmClient | Entry point for all ARM operations |
CosmosDBAccountResource | Represents a Cosmos DB account |
CosmosDBAccountCollection | Collection for account CRUD |
CosmosDBSqlDatabaseResource | SQL API database |
CosmosDBSqlContainerResource | SQL API container |
CosmosDBAccountCreateOrUpdateContent | Account creation payload |
CosmosDBSqlDatabaseCreateOrUpdateContent | Database creation payload |
CosmosDBSqlContainerCreateOrUpdateContent | Container creation payload |
ThroughputSettingsUpdateData | Throughput configuration |
Best Practices
Use
WaitUntil.Completedfor operations that must finish before proceedingUse
WaitUntil.Startedwhen you want to poll manually or run operations in parallelUse
DefaultAzureCredential— never hardcode keysHandle
RequestFailedExceptionfor ARM API errorsUse
CreateOrUpdateAsyncfor idempotent operationsNavigate hierarchy via
Get*methods (e.g.,account.GetCosmosDBSqlDatabases())
Error Handling
using Azure;
try
{
var operation = await accountCollection.CreateOrUpdateAsync(
WaitUntil.Completed, accountName, accountData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Account already exists");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}Reference Files
| File | When to Read |
|---|---|
| references/account-management.md | Account CRUD, failover, keys, connection strings, networking |
| references/sql-resources.md | SQL databases, containers, stored procedures, triggers, UDFs |
| references/throughput.md | Manual/autoscale throughput, migration between modes |
Related SDKs
| SDK | Purpose | Install |
|---|---|---|
Microsoft.Azure.Cosmos | Data plane (document CRUD, queries) | dotnet add package Microsoft.Azure.Cosmos |
Azure.ResourceManager.CosmosDB | Management plane (this SDK) | dotnet add package Azure.ResourceManager.CosmosDB |
Files
- ATTRIBUTION.mdAdded by AutoGineer1.0 KiB
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md8.4 KiB
- references/account-management.md7.3 KiB
- references/sql-resources.md9.7 KiB
- references/throughput.md7.7 KiB
references/throughput.md
Throughput Configuration
Patterns for configuring and managing throughput (RU/s) for Cosmos DB resources.
Throughput Concepts
| Type | Description | Min RU/s | Use Case |
|---|---|---|---|
| Manual | Fixed provisioned throughput | 400 | Predictable workloads |
| Autoscale | Scales between 10% and max | 1000 (max) | Variable workloads |
| Serverless | Pay per request | N/A | Dev/test, sporadic traffic |
Database-Level Throughput (Shared)
Throughput shared across all containers in the database.
Set Manual Throughput
using Azure.ResourceManager.CosmosDB;
using Azure.ResourceManager.CosmosDB.Models;
// Create database with shared throughput
var databaseData = new CosmosDBSqlDatabaseCreateOrUpdateContent(
new CosmosDBSqlDatabaseResourceInfo("my-database"))
{
Options = new CosmosDBCreateUpdateConfig
{
Throughput = 400
}
};
await databaseCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-database",
databaseData);Set Autoscale Throughput
var databaseData = new CosmosDBSqlDatabaseCreateOrUpdateContent(
new CosmosDBSqlDatabaseResourceInfo("my-database"))
{
Options = new CosmosDBCreateUpdateConfig
{
AutoscaleSettings = new AutoscaleSettings
{
MaxThroughput = 4000 // Scales between 400-4000 RU/s
}
}
};Update Database Throughput
var database = await account.GetCosmosDBSqlDatabaseAsync("my-database");
// Update to manual throughput
var throughputData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
Throughput = 800
});
await database.Value.CreateOrUpdateCosmosDBSqlDatabaseThroughputAsync(
WaitUntil.Completed,
throughputData);Get Database Throughput
var database = await account.GetCosmosDBSqlDatabaseAsync("my-database");
var throughput = await database.Value.GetCosmosDBSqlDatabaseThroughputAsync();
Console.WriteLine($"Throughput: {throughput.Value.Data.Resource.Throughput}");
Console.WriteLine($"Min Throughput: {throughput.Value.Data.Resource.MinimumThroughput}");
if (throughput.Value.Data.Resource.AutoscaleSettings != null)
{
Console.WriteLine($"Autoscale Max: {throughput.Value.Data.Resource.AutoscaleSettings.MaxThroughput}");
}Container-Level Throughput (Dedicated)
Throughput dedicated to a single container.
Set Manual Throughput
var containerData = new CosmosDBSqlContainerCreateOrUpdateContent(
new CosmosDBSqlContainerResourceInfo("my-container")
{
PartitionKey = new CosmosDBContainerPartitionKey
{
Paths = { "/partitionKey" },
Kind = CosmosDBPartitionKind.Hash
}
})
{
Options = new CosmosDBCreateUpdateConfig
{
Throughput = 1000
}
};
await containerCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-container",
containerData);Set Autoscale Throughput
var containerData = new CosmosDBSqlContainerCreateOrUpdateContent(
new CosmosDBSqlContainerResourceInfo("my-container")
{
PartitionKey = new CosmosDBContainerPartitionKey
{
Paths = { "/partitionKey" },
Kind = CosmosDBPartitionKind.Hash
}
})
{
Options = new CosmosDBCreateUpdateConfig
{
AutoscaleSettings = new AutoscaleSettings
{
MaxThroughput = 10000 // Scales between 1000-10000 RU/s
}
}
};Update Container Throughput
var container = await database.GetCosmosDBSqlContainerAsync("my-container");
// Update to new throughput
var throughputData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
Throughput = 2000
});
await container.Value.CreateOrUpdateCosmosDBSqlContainerThroughputAsync(
WaitUntil.Completed,
throughputData);Get Container Throughput
var container = await database.GetCosmosDBSqlContainerAsync("my-container");
var throughput = await container.Value.GetCosmosDBSqlContainerThroughputAsync();
Console.WriteLine($"Throughput: {throughput.Value.Data.Resource.Throughput}");Migrate Between Throughput Modes
Manual to Autoscale
var container = await database.GetCosmosDBSqlContainerAsync("my-container");
// Migrate to autoscale
await container.Value.MigrateCosmosDBSqlContainerToAutoscaleAsync(WaitUntil.Completed);Autoscale to Manual
var container = await database.GetCosmosDBSqlContainerAsync("my-container");
// Migrate to manual (uses current autoscale throughput as manual value)
await container.Value.MigrateCosmosDBSqlContainerToManualThroughputAsync(WaitUntil.Completed);Database-Level Migration
var database = await account.GetCosmosDBSqlDatabaseAsync("my-database");
// To autoscale
await database.Value.MigrateCosmosDBSqlDatabaseToAutoscaleAsync(WaitUntil.Completed);
// To manual
await database.Value.MigrateCosmosDBSqlDatabaseToManualThroughputAsync(WaitUntil.Completed);Throughput Calculation Guidelines
Estimating RU/s
| Operation | Approximate RU Cost |
|---|---|
| Point read (1KB doc by ID + partition key) | 1 RU |
| Write (1KB doc) | 5-10 RU |
| Query (simple, single partition) | 2-5 RU |
| Query (complex, cross-partition) | 10-100+ RU |
Sizing Formula
Required RU/s = (Reads/sec × RU per read) + (Writes/sec × RU per write) + (Queries/sec × RU per query)Autoscale Tiers
| Max Throughput | Min Throughput (10%) | Monthly Cost Estimate |
|---|---|---|
| 1,000 RU/s | 100 RU/s | ~$58 |
| 4,000 RU/s | 400 RU/s | ~$233 |
| 10,000 RU/s | 1,000 RU/s | ~$584 |
| 100,000 RU/s | 10,000 RU/s | ~$5,840 |
Best Practices
Start with autoscale for new workloads until you understand traffic patterns
Use database-level throughput when containers have similar access patterns
Use container-level throughput for containers with distinct performance needs
Monitor RU consumption via Azure Monitor to right-size throughput
Set alerts for 429 (rate limiting) errors
Consider serverless for dev/test or sporadic workloads
Error Handling
try
{
await container.Value.CreateOrUpdateCosmosDBSqlContainerThroughputAsync(
WaitUntil.Completed,
throughputData);
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
// Common: throughput below minimum or invalid autoscale settings
Console.WriteLine($"Invalid throughput configuration: {ex.Message}");
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
// Conflict: migration already in progress
Console.WriteLine($"Throughput migration in progress: {ex.Message}");
}Throughput for Other APIs
Cassandra Keyspace
var keyspaceData = new CassandraKeyspaceCreateOrUpdateContent(
new CassandraKeyspaceResourceInfo("my-keyspace"))
{
Options = new CosmosDBCreateUpdateConfig
{
Throughput = 400
}
};MongoDB Database
var mongoDbData = new MongoDBDatabaseCreateOrUpdateContent(
new MongoDBDatabaseResourceInfo("my-mongodb"))
{
Options = new CosmosDBCreateUpdateConfig
{
AutoscaleSettings = new AutoscaleSettings
{
MaxThroughput = 4000
}
}
};Gremlin Database
var gremlinData = new GremlinDatabaseCreateOrUpdateContent(
new GremlinDatabaseResourceInfo("my-gremlin"))
{
Options = new CosmosDBCreateUpdateConfig
{
Throughput = 400
}
};Table API
var tableData = new CosmosDBTableCreateOrUpdateContent(
new CosmosDBTableResourceInfo("my-table"))
{
Options = new CosmosDBCreateUpdateConfig
{
Throughput = 400
}
};Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills · .github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-cosmosdb-dotnet · commit 0696600
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Microsoft or Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-resource-manager-cosmosdb-dotnet.zip