Déploiements de groupes de ressources avec des modèles Resource Manager
Cet article explique comment étendre votre déploiement à un groupe de ressources. Vous utilisez un modèle Resource Manager pour le déploiement. L’article montre également comment étendre l’étendue au-delà du groupe de ressources dans l’opération de déploiement.
Conseil
Nous recommandons Bicep parce qu’il offre les mêmes fonctionnalités que les modèles ARM et que la syntaxe est plus facile d’utilisation. Pour en savoir plus, consultez les déploiements de groupes de ressources.
Ressources prises en charge
La plupart des ressources peuvent être déployées dans un groupe de ressources. Pour obtenir la liste des ressources disponibles, consultez Référence de modèle Resource Manager.
schéma
Pour les modèles, utilisez le schéma suivant :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
Fichiers de fichiers de paramètres, utilisez :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Commandes de déploiement
Pour un déploiement dans un groupe de ressources, utilisez les commandes de déploiement de groupe de ressources.
Pour Azure CLI, utilisez az deployment group create. L’exemple suivant déploie un modèle pour créer un groupe de ressources. Le groupe de ressources que vous spécifiez dans le paramètre --resource-group
est le groupe de ressources cible.
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
Pour plus d’informations sur les commandes et options de déploiement de modèles Resource Manager, consultez :
- Déployer des ressources avec des modèles ARM et le Portail Azure
- Déployer des ressources à l’aide de modèles ARM et l’interface CLI Azure
- Déployer des ressources à l’aide de modèles Resource Manager et d’Azure PowerShell
- Déployer des ressources avec des modèles Resource Manager et l’API REST Azure Resource Manager
- Utiliser un bouton de déploiement pour déployer des modèles à partir du référentiel GitHub
- Déployer des modèles Resource Manager à partir de Cloud Shell
Étendues de déploiement
Lors du déploiement dans un groupe de ressources, vous pouvez déployer des ressources vers :
- le groupe de ressources cible de l’opération
- d’autres groupes de ressources dans le même abonnement ou dans d’autres abonnements
- tout abonnement dans le locataire
- le locataire pour le groupe de ressources
Les seules transitions d’étendue interdites se produisent du groupe de ressources ou de l’abonnement au groupe d’administration.
Une ressource d’extension peut être étendue à une cible différente de la cible de déploiement.
L’utilisateur qui déploie le modèle doit avoir accès à l’étendue spécifiée.
Cette section montre comment spécifier des étendues différentes. Vous pouvez combiner ces différentes étendues dans un seul modèle.
Étendue au groupe de ressources cible
Pour déployer des ressources dans la ressource cible, ajoutez ces ressources à la section ressources du modèle.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
Pour obtenir un exemple de modèle, consultez Déployer dans le groupe de ressources cible.
Étendue au groupe de ressources dans le même abonnement
Pour déployer des ressources dans un autre groupe de ressources du même abonnement, ajoutez un déploiement imbriqué et incluez la propriété resourceGroup
. Si vous ne spécifiez pas l’ID d’abonnement ni le groupe de ressources, ce sont l’abonnement et le groupe de ressources du modèle parent qui sont utilisés. Tous les groupes de ressources doivent exister avant l’exécution du déploiement.
Dans l’exemple suivant, le déploiement imbriqué cible un groupe de ressources nommé demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Pour obtenir un exemple de modèle, consultez Déployer sur plusieurs groupes de ressources.
Étendue au groupe de ressources dans un abonnement différent
Pour déployer des ressources dans un groupe de ressources sous un abonnement différent, ajoutez un déploiement imbriqué et incluez les propriétés subscriptionId
et resourceGroup
. Dans l’exemple suivant, le déploiement imbriqué cible un groupe de ressources nommé demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Pour obtenir un exemple de modèle, consultez Déployer sur plusieurs groupes de ressources.
Étendue à l’abonnement
Pour déployer des ressources dans un abonnement, ajoutez un déploiement imbriqué et incluez la propriété subscriptionId
. L’abonnement peut être l’abonnement pour le groupe de ressources cible ou tout autre abonnement dans le locataire. En outre, définissez la propriété location
pour le déploiement imbriqué.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"subscriptionId": "0000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Pour obtenir un exemple de modèle, consultez Créer un groupe de ressources.
Étendue au locataire
Pour créer des ressources au niveau du locataire, définissez scope
sur /
. L’utilisateur qui déploie le modèle doit disposer de l’accès requis pour déployer au niveau du locataire.
Pour utiliser un déploiement imbriqué, définissez scope
et location
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
Ou vous pouvez définir l’étendue sur /
pour certains types de ressources, comme les groupes d’administration.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Pour plus d’informations, consultez Groupe d’administration.
Déployer dans le groupe de ressources cible
Pour déployer des ressources dans le groupe de ressources cible, définissez ces ressources dans la section resources
du modèle. Le modèle suivant crée un compte de stockage dans le groupe de ressources qui est spécifié dans l’opération de déploiement.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
Déployer dans plusieurs groupes de ressources
Vous pouvez déployer plusieurs groupes de ressources dans un seul et même modèle Resource Manager. Pour cibler un groupe de ressources différent de celui du modèle parent, utilisez un modèle imbriqué ou lié. Dans le type de ressource du déploiement, spécifiez des valeurs pour l’ID d’abonnement et le groupe de ressources sur lequel vous souhaitez déployer le modèle imbriqué. Les groupes de ressources peuvent exister dans différents abonnements.
Notes
Vous pouvez déployer sur 800 groupes de ressources en un seul déploiement. En règle générale, cette limitation signifie que vous pouvez déployer sur 1 groupe de ressources spécifié pour le modèle parent et jusqu’à 799 groupes de ressources dans les déploiements imbriqués ou liés. Toutefois, si votre modèle parent contient uniquement des modèles imbriqués ou liés et ne déploie lui-même aucune ressource, vous pouvez inclure jusqu’à 800 groupes de ressources dans les déploiements imbriqués ou liés.
L’exemple suivant déploie deux comptes de stockage. Le premier compte de stockage est déployé sur le groupe de ressources spécifié lors de l’opération de déploiement. Le second compte de stockage est déployé sur le groupe de ressources spécifié dans les paramètres secondResourceGroup
et secondSubscriptionID
:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"secondResourceGroup": {
"type": "string"
},
"secondSubscriptionID": {
"type": "string",
"defaultValue": ""
},
"secondStorageLocation": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('firstStorageName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedTemplate",
"resourceGroup": "[parameters('secondResourceGroup')]",
"subscriptionId": "[parameters('secondSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('secondStorageName')]",
"location": "[parameters('secondStorageLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
}
]
},
"parameters": {}
}
}
]
}
Si vous définissez resourceGroup
sur le nom d’un groupe de ressources qui n’existe pas, le déploiement échoue.
Pour tester le modèle précédent et voir les résultats, utilisez PowerShell ou Azure CLI.
Déployez deux comptes de stockage sur deux groupes de ressources dans le même abonnement en utilisant :
firstRG="primarygroup"
secondRG="secondarygroup"
az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus
Déployez deux comptes de stockage sur deux abonnements en utilisant :
firstRG="primarygroup"
secondRG="secondarygroup"
firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"
az account set --subscription $secondSub
az group create --name $secondRG --location eastus
az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub
Créer un groupe de ressources
À partir du déploiement d’un groupe de ressources, vous pouvez basculer sur le niveau d’un abonnement et créer un groupe de ressources. Le modèle suivant déploie un compte de stockage dans le groupe de ressources cible et crée un nouveau groupe de ressources dans l’abonnement spécifié.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"newResourceGroupName": {
"type": "string"
},
"nestedSubscriptionID": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demoSubDeployment",
"location": "westus",
"subscriptionId": "[parameters('nestedSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('newResourceGroupName')]",
"location": "[parameters('location')]",
"properties": {}
}
],
"outputs": {}
}
}
}
]
}
Étapes suivantes
- Pour obtenir un exemple de déploiement des paramètres d’espace de travail pour Microsoft Defender pour le cloud, consultez deployASCwithWorkspaceSettings.json.