|
Add this skill
npx mdskills install sickn33/azure-resource-manager-cosmosdb-dotnetComprehensive management plane guide with clear hierarchy, examples, and proper data/control plane separation
1---2name: azure-resource-manager-cosmosdb-dotnet3description: |4 Azure Resource Manager SDK for Cosmos DB in .NET. Use for MANAGEMENT PLANE operations: creating/managing Cosmos DB accounts, databases, containers, throughput settings, and RBAC via Azure Resource Manager. NOT for data plane operations (CRUD on documents) - use Microsoft.Azure.Cosmos for that. Triggers: "Cosmos DB account", "create Cosmos account", "manage Cosmos resources", "ARM Cosmos", "CosmosDBAccountResource", "provision Cosmos DB".5package: Azure.ResourceManager.CosmosDB6---78# Azure.ResourceManager.CosmosDB (.NET)910Management plane SDK for provisioning and managing Azure Cosmos DB resources via Azure Resource Manager.1112> **⚠️ Management vs Data Plane**13> - **This SDK (Azure.ResourceManager.CosmosDB)**: Create accounts, databases, containers, configure throughput, manage RBAC14> - **Data Plane SDK (Microsoft.Azure.Cosmos)**: CRUD operations on documents, queries, stored procedures execution1516## Installation1718```bash19dotnet add package Azure.ResourceManager.CosmosDB20dotnet add package Azure.Identity21```2223**Current Versions**: Stable v1.4.0, Preview v1.4.0-beta.132425## Environment Variables2627```bash28AZURE_SUBSCRIPTION_ID=<your-subscription-id>29# For service principal auth (optional)30AZURE_TENANT_ID=<tenant-id>31AZURE_CLIENT_ID=<client-id>32AZURE_CLIENT_SECRET=<client-secret>33```3435## Authentication3637```csharp38using Azure.Identity;39using Azure.ResourceManager;40using Azure.ResourceManager.CosmosDB;4142// Always use DefaultAzureCredential43var credential = new DefaultAzureCredential();44var armClient = new ArmClient(credential);4546// Get subscription47var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");48var subscription = armClient.GetSubscriptionResource(49 new ResourceIdentifier($"/subscriptions/{subscriptionId}"));50```5152## Resource Hierarchy5354```55ArmClient56└── SubscriptionResource57 └── ResourceGroupResource58 └── CosmosDBAccountResource59 ├── CosmosDBSqlDatabaseResource60 │ └── CosmosDBSqlContainerResource61 │ ├── CosmosDBSqlStoredProcedureResource62 │ ├── CosmosDBSqlTriggerResource63 │ └── CosmosDBSqlUserDefinedFunctionResource64 ├── CassandraKeyspaceResource65 ├── GremlinDatabaseResource66 ├── MongoDBDatabaseResource67 └── CosmosDBTableResource68```6970## Core Workflow7172### 1. Create Cosmos DB Account7374```csharp75using Azure.ResourceManager.CosmosDB;76using Azure.ResourceManager.CosmosDB.Models;7778// Get resource group79var resourceGroup = await subscription80 .GetResourceGroupAsync("my-resource-group");8182// Define account83var accountData = new CosmosDBAccountCreateOrUpdateContent(84 location: AzureLocation.EastUS,85 locations: new[]86 {87 new CosmosDBAccountLocation88 {89 LocationName = AzureLocation.EastUS,90 FailoverPriority = 0,91 IsZoneRedundant = false92 }93 })94{95 Kind = CosmosDBAccountKind.GlobalDocumentDB,96 ConsistencyPolicy = new ConsistencyPolicy(DefaultConsistencyLevel.Session),97 EnableAutomaticFailover = true98};99100// Create account (long-running operation)101var accountCollection = resourceGroup.Value.GetCosmosDBAccounts();102var operation = await accountCollection.CreateOrUpdateAsync(103 WaitUntil.Completed,104 "my-cosmos-account",105 accountData);106107CosmosDBAccountResource account = operation.Value;108```109110### 2. Create SQL Database111112```csharp113var databaseData = new CosmosDBSqlDatabaseCreateOrUpdateContent(114 new CosmosDBSqlDatabaseResourceInfo("my-database"));115116var databaseCollection = account.GetCosmosDBSqlDatabases();117var dbOperation = await databaseCollection.CreateOrUpdateAsync(118 WaitUntil.Completed,119 "my-database",120 databaseData);121122CosmosDBSqlDatabaseResource database = dbOperation.Value;123```124125### 3. Create SQL Container126127```csharp128var containerData = new CosmosDBSqlContainerCreateOrUpdateContent(129 new CosmosDBSqlContainerResourceInfo("my-container")130 {131 PartitionKey = new CosmosDBContainerPartitionKey132 {133 Paths = { "/partitionKey" },134 Kind = CosmosDBPartitionKind.Hash135 },136 IndexingPolicy = new CosmosDBIndexingPolicy137 {138 Automatic = true,139 IndexingMode = CosmosDBIndexingMode.Consistent140 },141 DefaultTtl = 86400 // 24 hours142 });143144var containerCollection = database.GetCosmosDBSqlContainers();145var containerOperation = await containerCollection.CreateOrUpdateAsync(146 WaitUntil.Completed,147 "my-container",148 containerData);149150CosmosDBSqlContainerResource container = containerOperation.Value;151```152153### 4. Configure Throughput154155```csharp156// Manual throughput157var throughputData = new ThroughputSettingsUpdateData(158 new ThroughputSettingsResourceInfo159 {160 Throughput = 400161 });162163// Autoscale throughput164var autoscaleData = new ThroughputSettingsUpdateData(165 new ThroughputSettingsResourceInfo166 {167 AutoscaleSettings = new AutoscaleSettingsResourceInfo168 {169 MaxThroughput = 4000170 }171 });172173// Apply to database174await database.CreateOrUpdateCosmosDBSqlDatabaseThroughputAsync(175 WaitUntil.Completed,176 throughputData);177```178179### 5. Get Connection Information180181```csharp182// Get keys183var keys = await account.GetKeysAsync();184Console.WriteLine($"Primary Key: {keys.Value.PrimaryMasterKey}");185186// Get connection strings187var connectionStrings = await account.GetConnectionStringsAsync();188foreach (var cs in connectionStrings.Value.ConnectionStrings)189{190 Console.WriteLine($"{cs.Description}: {cs.ConnectionString}");191}192```193194## Key Types Reference195196| Type | Purpose |197|------|---------|198| `ArmClient` | Entry point for all ARM operations |199| `CosmosDBAccountResource` | Represents a Cosmos DB account |200| `CosmosDBAccountCollection` | Collection for account CRUD |201| `CosmosDBSqlDatabaseResource` | SQL API database |202| `CosmosDBSqlContainerResource` | SQL API container |203| `CosmosDBAccountCreateOrUpdateContent` | Account creation payload |204| `CosmosDBSqlDatabaseCreateOrUpdateContent` | Database creation payload |205| `CosmosDBSqlContainerCreateOrUpdateContent` | Container creation payload |206| `ThroughputSettingsUpdateData` | Throughput configuration |207208## Best Practices2092101. **Use `WaitUntil.Completed`** for operations that must finish before proceeding2112. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel2123. **Always use `DefaultAzureCredential`** — never hardcode keys2134. **Handle `RequestFailedException`** for ARM API errors2145. **Use `CreateOrUpdateAsync`** for idempotent operations2156. **Navigate hierarchy** via `Get*` methods (e.g., `account.GetCosmosDBSqlDatabases()`)216217## Error Handling218219```csharp220using Azure;221222try223{224 var operation = await accountCollection.CreateOrUpdateAsync(225 WaitUntil.Completed, accountName, accountData);226}227catch (RequestFailedException ex) when (ex.Status == 409)228{229 Console.WriteLine("Account already exists");230}231catch (RequestFailedException ex)232{233 Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");234}235```236237## Reference Files238239| File | When to Read |240|------|--------------|241| [references/account-management.md](references/account-management.md) | Account CRUD, failover, keys, connection strings, networking |242| [references/sql-resources.md](references/sql-resources.md) | SQL databases, containers, stored procedures, triggers, UDFs |243| [references/throughput.md](references/throughput.md) | Manual/autoscale throughput, migration between modes |244245## Related SDKs246247| SDK | Purpose | Install |248|-----|---------|---------|249| `Microsoft.Azure.Cosmos` | Data plane (document CRUD, queries) | `dotnet add package Microsoft.Azure.Cosmos` |250| `Azure.ResourceManager.CosmosDB` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.CosmosDB` |251
Full transparency — inspect the skill content before installing.