Azure.ResourceManager.CosmosDB (.NET)
SDK du plan de gestion pour l'approvisionnement et la gestion des ressources Azure Cosmos DB via Azure Resource Manager.
⚠️ Plan de gestion vs Plan de données
- Ce SDK (Azure.ResourceManager.CosmosDB) : Créer des comptes, bases de données, conteneurs, configurer le débit, gérer RBAC
- SDK du plan de données (Microsoft.Azure.Cosmos) : Opérations CRUD sur les documents, requêtes, exécution de procédures stockées
Installation
dotnet add package Azure.ResourceManager.CosmosDB
dotnet add package Azure.Identity
Versions actuelles : Stable v1.4.0, Preview v1.4.0-beta.13
Variables d'environnement
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# Pour l'authentification par principal de service (optionnel)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
Authentification
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.CosmosDB;
// Toujours utiliser DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// Obtenir l'abonnement
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
Hiérarchie des ressources
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── CosmosDBAccountResource
├── CosmosDBSqlDatabaseResource
│ └── CosmosDBSqlContainerResource
│ ├── CosmosDBSqlStoredProcedureResource
│ ├── CosmosDBSqlTriggerResource
│ └── CosmosDBSqlUserDefinedFunctionResource
├── CassandraKeyspaceResource
├── GremlinDatabaseResource
├── MongoDBDatabaseResource
└── CosmosDBTableResource
Flux de travail principal
1. Créer un compte Cosmos DB
using Azure.ResourceManager.CosmosDB;
using Azure.ResourceManager.CosmosDB.Models;
// Obtenir le groupe de ressources
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Définir le compte
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
};
// Créer le compte (opération longue durée)
var accountCollection = resourceGroup.Value.GetCosmosDBAccounts();
var operation = await accountCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-cosmos-account",
accountData);
CosmosDBAccountResource account = operation.Value;
2. Créer une base de données SQL
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. Créer un conteneur SQL
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 heures
});
var containerCollection = database.GetCosmosDBSqlContainers();
var containerOperation = await containerCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-container",
containerData);
CosmosDBSqlContainerResource container = containerOperation.Value;
4. Configurer le débit
// Débit manuel
var throughputData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
Throughput = 400
});
// Débit autoscale
var autoscaleData = new ThroughputSettingsUpdateData(
new ThroughputSettingsResourceInfo
{
AutoscaleSettings = new AutoscaleSettingsResourceInfo
{
MaxThroughput = 4000
}
});
// Appliquer à la base de données
await database.CreateOrUpdateCosmosDBSqlDatabaseThroughputAsync(
WaitUntil.Completed,
throughputData);
5. Obtenir les informations de connexion
// Obtenir les clés
var keys = await account.GetKeysAsync();
Console.WriteLine($"Primary Key: {keys.Value.PrimaryMasterKey}");
// Obtenir les chaînes de connexion
var connectionStrings = await account.GetConnectionStringsAsync();
foreach (var cs in connectionStrings.Value.ConnectionStrings)
{
Console.WriteLine($"{cs.Description}: {cs.ConnectionString}");
}
Référence des types clés
| Type | Objectif |
|---|---|
ArmClient |
Point d'entrée pour toutes les opérations ARM |
CosmosDBAccountResource |
Représente un compte Cosmos DB |
CosmosDBAccountCollection |
Collection pour CRUD sur les comptes |
CosmosDBSqlDatabaseResource |
Base de données SQL API |
CosmosDBSqlContainerResource |
Conteneur SQL API |
CosmosDBAccountCreateOrUpdateContent |
Payload de création de compte |
CosmosDBSqlDatabaseCreateOrUpdateContent |
Payload de création de base de données |
CosmosDBSqlContainerCreateOrUpdateContent |
Payload de création de conteneur |
ThroughputSettingsUpdateData |
Configuration du débit |
Bonnes pratiques
- Utiliser
WaitUntil.Completedpour les opérations qui doivent se terminer avant de continuer - Utiliser
WaitUntil.Startedquand vous voulez interroger manuellement ou exécuter des opérations en parallèle - Toujours utiliser
DefaultAzureCredential— ne jamais coder les clés en dur - Gérer
RequestFailedExceptionpour les erreurs API ARM - Utiliser
CreateOrUpdateAsyncpour les opérations idempotentes - Naviguer la hiérarchie via les méthodes
Get*(ex.account.GetCosmosDBSqlDatabases())
Gestion des erreurs
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}");
}
Fichiers de référence
| Fichier | Quand le consulter |
|---|---|
| references/account-management.md | CRUD sur les comptes, basculement, clés, chaînes de connexion, mise en réseau |
| references/sql-resources.md | Bases de données SQL, conteneurs, procédures stockées, déclencheurs, UDF |
| references/throughput.md | Débit manuel/autoscale, migration entre modes |
SDKs connexes
| SDK | Objectif | Installation |
|---|---|---|
Microsoft.Azure.Cosmos |
Plan de données (CRUD de documents, requêtes) | dotnet add package Microsoft.Azure.Cosmos |
Azure.ResourceManager.CosmosDB |
Plan de gestion (ce SDK) | dotnet add package Azure.ResourceManager.CosmosDB |