Azure.ResourceManager.ApiManagement (.NET)
SDK du plan de gestion pour provisionner et gérer les ressources Azure API Management via Azure Resource Manager.
⚠️ Plan de gestion vs Plan de données
- Ce SDK (Azure.ResourceManager.ApiManagement) : Créer des services, des APIs, des produits, des abonnements, des stratégies, des utilisateurs, des groupes
- Plan de données : Appels API directs à vos endpoints de passerelle APIM
Installation
dotnet add package Azure.ResourceManager.ApiManagement
dotnet add package Azure.Identity
Version actuelle : v1.3.0
Variables d'environnement
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# Pour l'authentification par principal de service (facultatif)
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.ApiManagement;
// 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
└── ApiManagementServiceResource
├── ApiResource
│ ├── ApiOperationResource
│ │ └── ApiOperationPolicyResource
│ ├── ApiPolicyResource
│ ├── ApiSchemaResource
│ └── ApiDiagnosticResource
├── ApiManagementProductResource
│ ├── ProductApiResource
│ ├── ProductGroupResource
│ └── ProductPolicyResource
├── ApiManagementSubscriptionResource
├── ApiManagementPolicyResource
├── ApiManagementUserResource
├── ApiManagementGroupResource
├── ApiManagementBackendResource
├── ApiManagementGatewayResource
├── ApiManagementCertificateResource
├── ApiManagementNamedValueResource
└── ApiManagementLoggerResource
Flux de travail principal
1. Créer un service API Management
using Azure.ResourceManager.ApiManagement;
using Azure.ResourceManager.ApiManagement.Models;
// Obtenir le groupe de ressources
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Définir le service
var serviceData = new ApiManagementServiceData(
location: AzureLocation.EastUS,
sku: new ApiManagementServiceSkuProperties(
ApiManagementServiceSkuType.Developer,
capacity: 1),
publisherEmail: "admin@contoso.com",
publisherName: "Contoso");
// Créer le service (opération longue - peut prendre 30+ minutes)
var serviceCollection = resourceGroup.Value.GetApiManagementServices();
var operation = await serviceCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-apim-service",
serviceData);
ApiManagementServiceResource service = operation.Value;
2. Créer une API
var apiData = new ApiCreateOrUpdateContent
{
DisplayName = "My API",
Path = "myapi",
Protocols = { ApiOperationInvokableProtocol.Https },
ServiceUri = new Uri("https://backend.contoso.com/api")
};
var apiCollection = service.GetApis();
var apiOperation = await apiCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-api",
apiData);
ApiResource api = apiOperation.Value;
3. Créer un produit
var productData = new ApiManagementProductData
{
DisplayName = "Starter",
Description = "Starter tier with limited access",
IsSubscriptionRequired = true,
IsApprovalRequired = false,
SubscriptionsLimit = 1,
State = ApiManagementProductState.Published
};
var productCollection = service.GetApiManagementProducts();
var productOperation = await productCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"starter",
productData);
ApiManagementProductResource product = productOperation.Value;
// Ajouter l'API au produit
await product.GetProductApis().CreateOrUpdateAsync(
WaitUntil.Completed,
"my-api");
4. Créer un abonnement
var subscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent
{
DisplayName = "My Subscription",
Scope = $"/products/{product.Data.Name}",
State = ApiManagementSubscriptionState.Active
};
var subscriptionCollection = service.GetApiManagementSubscriptions();
var subOperation = await subscriptionCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-subscription",
subscriptionData);
ApiManagementSubscriptionResource subscription = subOperation.Value;
// Obtenir les clés d'abonnement
var keys = await subscription.GetSecretsAsync();
Console.WriteLine($"Primary Key: {keys.Value.PrimaryKey}");
5. Définir une stratégie API
var policyXml = @"
<policies>
<inbound>
<rate-limit calls=""100"" renewal-period=""60"" />
<set-header name=""X-Custom-Header"" exists-action=""override"">
<value>CustomValue</value>
</set-header>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>";
var policyData = new PolicyContractData
{
Value = policyXml,
Format = PolicyContentFormat.Xml
};
await api.GetApiPolicy().CreateOrUpdateAsync(
WaitUntil.Completed,
policyData);
6. Sauvegarde et restauration
// Sauvegarde
var backupParams = new ApiManagementServiceBackupRestoreContent(
storageAccount: "mystorageaccount",
containerName: "apim-backups",
backupName: "backup-2024-01-15")
{
AccessType = StorageAccountAccessType.SystemAssignedManagedIdentity
};
await service.BackupAsync(WaitUntil.Completed, backupParams);
// Restauration
await service.RestoreAsync(WaitUntil.Completed, backupParams);
Référence des types clés
| Type |
Objectif |
ArmClient |
Point d'entrée pour toutes les opérations ARM |
ApiManagementServiceResource |
Représente une instance de service APIM |
ApiManagementServiceCollection |
Collection pour les opérations CRUD de service |
ApiResource |
Représente une API |
ApiManagementProductResource |
Représente un produit |
ApiManagementSubscriptionResource |
Représente un abonnement |
ApiManagementPolicyResource |
Stratégie au niveau du service |
ApiPolicyResource |
Stratégie au niveau de l'API |
ApiManagementUserResource |
Représente un utilisateur |
ApiManagementGroupResource |
Représente un groupe |
ApiManagementBackendResource |
Représente un service backend |
ApiManagementGatewayResource |
Représente une passerelle auto-hébergée |
Types de SKU
| SKU |
Objectif |
Capacité |
Developer |
Développement/test (pas de SLA) |
1 |
Basic |
Production d'entrée de gamme |
1-2 |
Standard |
Charges de travail moyennes |
1-4 |
Premium |
Haute disponibilité, multi-région |
1-12 par région |
Consumption |
Sans serveur, paiement à l'usage |
N/A |
Bonnes pratiques
- Utiliser
WaitUntil.Completed pour les opérations qui doivent se terminer avant de continuer
- Utiliser
WaitUntil.Started pour les opérations longues comme la création de service (30+ min)
- Toujours utiliser
DefaultAzureCredential — ne jamais coder en dur les clés
- Gérer
RequestFailedException pour les erreurs de l'API ARM
- Utiliser
CreateOrUpdateAsync pour les opérations idempotentes
- Naviguer dans la hiérarchie via les méthodes
Get* (par exemple, service.GetApis())
- Format de stratégie — Utiliser le format XML pour les stratégies ; JSON est également pris en charge
- Création de service — Le SKU Developer est le plus rapide pour les tests (~15-30 min)
Gestion des erreurs
using Azure;
try
{
var operation = await serviceCollection.CreateOrUpdateAsync(
WaitUntil.Completed, serviceName, serviceData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Service already exists");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Bad request: {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
Fichiers de référence
| Fichier |
Quand lire |
| references/service-management.md |
CRUD du service, SKUs, mise en réseau, sauvegarde/restauration |
| references/apis-operations.md |
APIs, opérations, schémas, versioning |
| references/products-subscriptions.md |
Produits, abonnements, contrôle d'accès |
| references/policies.md |
Modèles XML de stratégie, portées, stratégies courantes |
Ressources associées