Exercice : Ajouter un script de déploiement à un modèle ARM
Important
Vous avez besoin de votre propre abonnement Azure pour exécuter cet exercice et des frais pourraient vous être facturés. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Dans le cadre du processus de déploiement d’applications au sein de votre équipe, vous devez créer un compte de stockage et indexer un fichier dans le stockage d’objets blob que doit lire l’application. Jusqu’à présent, vous avez copié manuellement le fichier chaque fois que vous avez configuré un nouvel environnement. Vous optez pour un script de déploiement afin d’automatiser cette étape du processus de création de l’environnement.
Dans cet exercice, vous utilisez un modèle Azure Resource Manager (ARM) existant et ajoutez un nouveau script de déploiement.
Pendant ce processus, vous allez :
- Créez un modèle de départ.
- Ajoutez les prérequis des scripts de déploiement, y compris une identité managée affectée par l’utilisateur et une attribution de rôle.
- Ajoutez les prérequis des scripts de déploiement, y compris une identité managée affectée par l’utilisateur et une attribution de rôle.
- Déployez le modèle et vérifiez le résultat.
Cet exercice utilise les Outils Azure Resource Manager pour Visual Studio Code. Assurez-vous d’installer cette extension dans Visual Studio Code.
Cet exercice utilise l’extension Bicep pour Visual Studio Code. Assurez-vous d’installer cette extension dans Visual Studio Code.
Créer le modèle de départ
Vous démarrez avec un modèle existant que votre équipe utilise. Le modèle crée le compte de stockage, configure les services de blob qui nécessitent le protocole HTTPS et crée le conteneur de blobs pour vos fichiers de configuration.
Ouvrez Visual Studio Code.
Créez un fichier nommé azuredeploy.json.
Enregistrez le fichier vide afin que Visual Studio Code charge les outils de modèle ARM.
Vous pouvez soit sélectionner Fichier>Enregistrer sous, soit Ctrl+S dans Windows (⌘+S sur macOS). Veillez à mémoriser l’emplacement où vous avez enregistré le fichier. Vous pouvez par exemple créer un dossier scripts pour l’y enregistrer.
Copiez le modèle de départ suivant dans azuredeploy.json.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.1", "apiProfile": "", "parameters": {}, "variables": { "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]", "storageBlobContainerName": "config" }, "functions": [], "resources": [ { "name": "[variables('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-01-01", "tags": { "displayName": "[variables('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS", "tier": "Standard" }, "properties": { "allowBlobPublicAccess": true, "encryption": { "services": { "blob": { "enabled": true } }, "keySource": "Microsoft.Storage" }, "supportsHttpsTrafficOnly": true } }, { "type": "Microsoft.Storage/storageAccounts/blobServices", "apiVersion": "2019-04-01", "name": "[concat(variables('storageAccountName'), '/default')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]" ] }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-04-01", "name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]" ], "properties": { "publicAccess": "Blob" } } ] }
Enregistrez le modèle.
Ouvrez Visual Studio Code.
Créez un fichier nommé main.bicep.
Enregistrez le fichier vide afin que Visual Studio Code charge les outils Bicep.
Vous pouvez soit sélectionner Fichier>Enregistrer sous, soit Ctrl+S dans Windows (⌘+S sur macOS). Veillez à mémoriser l’emplacement où vous avez enregistré le fichier. Vous pouvez par exemple créer un dossier scripts pour l’y enregistrer.
Copiez le modèle de départ suivant dans main.bicep.
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}' var storageBlobContainerName = 'config' resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = { name: storageAccountName tags: { displayName: storageAccountName } location: resourceGroup().location kind: 'StorageV2' sku: { name: 'Standard_LRS' tier: 'Standard' } properties: { allowBlobPublicAccess: true encryption: { services: { blob: { enabled: true } } keySource: 'Microsoft.Storage' } supportsHttpsTrafficOnly: true } resource blobService 'blobServices' existing = { name: 'default' } } resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = { parent: storageAccount::blobService name: storageBlobContainerName properties: { publicAccess: 'Blob' } }
Enregistrez le modèle.
Ajouter une identité managée affectée par l’utilisateur
Vous devez ensuite créer une identité managée affectée par l’utilisateur. Compte tenu de l’approche d’infrastructure en tant que code, vous pouvez créer l’identité dans le modèle.
Modifiez la section
variables
de azuredeploy.json pour y ajouter :"userAssignedIdentityName": "configDeployer",
Modifiez la section
resources
de azuredeploy.json pour y ajouter :{ "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[variables('userAssignedIdentityName')]", "location": "[resourceGroup().location]" }
Enregistrez le modèle.
Sous les définitions de variables dans main.bicep, ajoutez :
var userAssignedIdentityName = 'configDeployer'
Sous les définitions de ressource, ajoutez :
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }
Enregistrez le modèle.
Définir le rôle Contributeur pour l’identité managée
Maintenant que vous avez défini une identité managée, vous pouvez lui attribuer un rôle avec des droits sur le groupe de ressources. Vous lui attribuez le rôle Contributeur. Vous identifiez un rôle par son ID de définition de rôle, qui est un GUID. Le rôle Contributeur est intégré à Azure, de sorte que l’ID de définition de rôle est documenté.
L’attribution de rôle a également besoin d’un nom GUID. Vous pouvez utiliser la fonction guid
pour créer un GUID unique pour le groupe de ressources et le nom de rôle.
Modifiez la section
variables
de azuredeploy.json pour y ajouter :"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
Modifiez la section
resources
de azuredeploy.json pour y ajouter :{ "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2020-04-01-preview", "name": "[variables('roleAssignmentName')]", "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ], "properties": { "roleDefinitionId": "[variables('contributorRoleDefinitionId')]", "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]", "scope": "[resourceGroup().id]", "principalType": "ServicePrincipal" } }
Enregistrez le modèle.
Sous les définitions de variables dans main.bicep, ajoutez :
var roleAssignmentName = guid(resourceGroup().id, 'contributor') var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
Sous les définitions de ressource, ajoutez :
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { name: roleAssignmentName properties: { roleDefinitionId: contributorRoleDefinitionId principalId: userAssignedIdentity.properties.principalId principalType: 'ServicePrincipal' } }
Enregistrez le modèle.
Créer le script de déploiement
À présent, vous avez tous les prérequis du script de déploiement. Vous commencez par les valeurs courantes dont le script de déploiement a besoin. Il existe deux dépendances, l’attribution de rôle et le conteneur de stockage blob. Votre script a besoin des deux pour s’exécuter.
Modifiez la section
variables
de azuredeploy.json pour y ajouter :"deploymentScriptName": "CopyConfigScript"
Modifiez la section
resources
de azuredeploy.json pour y ajouter :{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "[variables('deploymentScriptName')]", "location": "[resourceGroup().location]", "kind": "AzurePowerShell", "dependsOn": [ "[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]", "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]" ], "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {} } } }
Ajoutez une section
properties
à la ressource pour définir le script et les autres valeurs nécessaires."properties": { "azPowerShellVersion": "3.0", "scriptContent": " Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json' $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' } $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context $DeploymentScriptOutputs = @{} $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri ", "retentionInterval": "P1D" }
Enregistrez le modèle.
Sous les définitions de variables dans main.bicep, ajoutez :
var deploymentScriptName = 'CopyConfigScript'
Sous les définitions de ressource, ajoutez :
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: deploymentScriptName location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '${userAssignedIdentity.id}': {} } } dependsOn: [ roleAssignment blobContainer ] }
Ajoutez une section
properties
à la ressource pour définir le script et les autres valeurs nécessaires.properties: { azPowerShellVersion: '3.0' scriptContent: ''' Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json' $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' } $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context $DeploymentScriptOutputs = @{} $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri ''' retentionInterval: 'P1D' }
Enregistrez le modèle.
Ajouter une sortie de modèle
Maintenant que vous avez un script de déploiement qui charge un fichier dans un stockage blob Azure, vous devez peut-être référencer cet emplacement de fichier dans l’automatisation ultérieure. (Vous pouvez exécuter un test pour vérifier que le fichier est là où vous le pensez.)
Après la section resources
du modèle ARM, ajoutez une sortie qui référence l’URI du fichier tel qu’il est indiqué par le script de déploiement.
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
En bas du fichier, après les définitions de ressource, ajoutez une sortie qui référence l’URI du fichier tel qu’il est indiqué par le script de déploiement.
output fileUri string = deploymentScript.properties.outputs.Uri
Vérification du modèle
Votre modèle doit ressembler à ceci :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"apiProfile": "",
"parameters": {},
"variables": {
"storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]",
"storageBlobContainerName": "config",
"userAssignedIdentityName": "configDeployer",
"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
"contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"deploymentScriptName": "CopyConfigScript"
},
"functions": [],
"resources": [
{
"name": "[variables('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"tags": {
"displayName": "[variables('storageAccountName')]"
},
"location": "[resourceGroup().location]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS",
"tier": "Standard"
},
"properties": {
"allowBlobPublicAccess": true,
"encryption": {
"services": {
"blob": {
"enabled": true
}
},
"keySource": "Microsoft.Storage"
},
"supportsHttpsTrafficOnly": true
}
},
{
"type": "Microsoft.Storage/storageAccounts/blobServices",
"apiVersion": "2019-04-01",
"name": "[concat(variables('storageAccountName'), '/default')]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.Storage/storageAccounts/blobServices/containers",
"apiVersion": "2019-04-01",
"name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
],
"properties": {
"publicAccess": "Blob"
}
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2018-11-30",
"name": "[variables('userAssignedIdentityName')]",
"location": "[resourceGroup().location]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[variables('roleAssignmentName')]",
"dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ],
"properties": {
"roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]",
"scope": "[resourceGroup().id]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "[variables('deploymentScriptName')]",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"dependsOn": [
"[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]",
"[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]"
],
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {}
}
},
"properties": {
"azPowerShellVersion": "3.0",
"scriptContent": "
Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
$blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
$DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
}
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
var storageBlobContainerName = 'config'
var userAssignedIdentityName = 'configDeployer'
var roleAssignmentName = guid(resourceGroup().id, 'contributor')
var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
var deploymentScriptName = 'CopyConfigScript'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
tags: {
displayName: storageAccountName
}
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
properties: {
allowBlobPublicAccess: true
encryption: {
services: {
blob: {
enabled: true
}
}
keySource: 'Microsoft.Storage'
}
supportsHttpsTrafficOnly: true
}
resource blobService 'blobServices' existing = {
name: 'default'
}
}
resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = {
parent: storageAccount::blobService
name: storageBlobContainerName
properties: {
publicAccess: 'Blob'
}
}
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: userAssignedIdentityName
location: resourceGroup().location
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
name: roleAssignmentName
properties: {
roleDefinitionId: contributorRoleDefinitionId
principalId: userAssignedIdentity.properties.principalId
principalType: 'ServicePrincipal'
}
}
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: deploymentScriptName
location: resourceGroup().location
kind: 'AzurePowerShell'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${userAssignedIdentity.id}': {}
}
}
properties: {
azPowerShellVersion: '3.0'
scriptContent: '''
Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
$blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
$DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
'''
retentionInterval: 'P1D'
}
dependsOn: [
roleAssignment
blobContainer
]
}
output fileUri string = deploymentScript.properties.outputs.Uri
Si ce n’est pas le cas, copiez l’exemple ou ajustez votre modèle pour qu’il y corresponde.
Déployer le modèle
Pour déployer ce modèle sur Azure, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code. Veillez à installer les outils Azure CLI.
Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.
Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est bash, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.
Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Azure Cloud Shell (Bash).
Dans la liste des interpréteurs de commandes de terminal, sélectionnez bash.
Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :
cd templates
Connexion à Azure avec Azure CLI
Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :
az login
Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.
Le terminal Visual Studio Code affiche la liste des abonnements associés à ce compte.
Dans la liste, trouvez l’abonnement que vous voulez utiliser pour cet exercice.
Si vous avez manqué la liste lors de la connexion, vous pouvez utiliser l’extrait suivant pour obtenir à nouveau la liste de vos abonnements.
az account list --output table
Définissez l’abonnement par défaut pour toutes les commandes Azure CLI exécutées dans cette session.
az account set --subscription "Your Subscription Name or ID"
Pour déployer ce modèle sur Azure, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code. Veillez à installer les outils Azure CLI.
Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.
Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est bash, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.
Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Azure Cloud Shell (Bash).
Dans la liste des interpréteurs de commandes de terminal, sélectionnez bash.
Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :
cd templates
Installer Bicep
Exécutez la commande suivante pour vous assurer de disposer de la dernière version de Bicep :
az bicep install && az bicep upgrade
Connexion à Azure avec Azure CLI
Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :
az login
Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.
Le terminal Visual Studio Code affiche la liste des abonnements associés à ce compte.
Dans la liste, trouvez l’abonnement que vous voulez utiliser pour cet exercice.
Si vous avez manqué la liste lors de la connexion, vous pouvez utiliser l’extrait suivant pour obtenir à nouveau la liste de vos abonnements.
az account list --output table
Définissez l’abonnement par défaut pour toutes les commandes Azure CLI exécutées dans cette session.
az account set --subscription "Your Subscription Name or ID"
Pour déployer ce modèle sur Azure, connectez-vous à votre compte Azure à partir du terminal Visual Studio Code. Vérifiez que vous avez installé Azure PowerShell et connectez-vous au même compte que celui qui a activé le bac à sable.
Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.
Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est powershell ou pwsh, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.
Si un shell autre que powershell ou pwsh apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis PowerShell.
Dans la liste d’interpréteurs de commandes de terminal, sélectionnez powershell ou pwsh.
Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :
Set-Location -Path templates
Connectez-vous à Azure en utilisant Azure PowerShell
Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :
Connect-AzAccount
Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.
Récupérez l’ID de l’abonnement que vous voulez utiliser pour cet exercice en exécutant la commande suivante :
Get-AzSubscription
L’ID d’abonnement est la deuxième colonne. Copiez la deuxième colonne. Il se présente ainsi : cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.
Définissez l’abonnement par défaut pour toutes les commandes Azure PowerShell exécutées dans cette session.
Set-AzContext -SubscriptionId {Your subscription ID}
Pour déployer ce modèle sur Azure, connectez-vous à votre compte Azure dans le terminal Visual Studio Code. Vérifiez que vous avez installé Azure PowerShell.
Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.
Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est powershell ou pwsh, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.
Si un shell autre que powershell ou pwsh apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis PowerShell.
Dans la liste d’interpréteurs de commandes de terminal, sélectionnez powershell ou pwsh.
Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :
Set-Location -Path templates
Installer l’interface CLI Bicep
Pour utiliser Bicep à partir d’Azure PowerShell, installez l’interface CLI de Bicep.
Connectez-vous à Azure en utilisant Azure PowerShell
Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :
Connect-AzAccount
Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.
Récupérez l’ID de l’abonnement que vous voulez utiliser pour cet exercice en exécutant la commande suivante :
Get-AzSubscription
L’ID d’abonnement est la deuxième colonne. Copiez la deuxième colonne. Il se présente ainsi : cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.
Définissez l’abonnement par défaut pour toutes les commandes Azure PowerShell exécutées dans cette session.
Set-AzContext -SubscriptionId {Your subscription ID}
Vous devez ensuite créer un groupe de ressources pour contenir les ressources que vous créez dans le cadre de cet exercice. En utilisant un nouveau groupe de ressources, vous facilitez le nettoyage après l’exercice.
À partir du terminal dans Visual Studio Code, exécutez cette commande afin de créer le groupe de ressources pour cet exercice :
Créer un groupe de ressources pour l’exercice
resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName
Notes
Si vous utilisez un nom différent pour votre groupe de ressources, vous devez mettre à jour le script. Vous allez découvrir ultérieurement dans ce module comment éviter le codage effectué de manière irréversible des noms de groupe de ressources dans vos scripts.
Déployer le modèle sur Azure
Le code suivant déploie le modèle ARM sur Azure. Vous verrez un déploiement réussi.
Déployez le modèle en utilisant des commandes Azure CLI dans le terminal Visual Studio Code.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Le code suivant déploie le modèle ARM sur Azure. Vous verrez un déploiement réussi.
Déployez le modèle en utilisant des commandes Azure CLI dans le terminal Visual Studio Code.
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Le code suivant déploie le modèle sur Azure. Vous verrez un déploiement réussi.
Déployez le modèle en utilisant des commandes Azure PowerShell dans le terminal.
$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Le code suivant déploie le modèle sur Azure. Vous verrez un déploiement réussi.
Déployez le modèle en utilisant des commandes Azure PowerShell dans le terminal.
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Examiner le résultat de votre modèle
Une fois le déploiement terminé, vous recevez une URL qui pointe vers le fichier que votre script de déploiement a copié dans le stockage blob.
Récupérez ce fichier en utilisant la sortie d’URL du déploiement de modèle pour confirmer que le script de déploiement fonctionne correctement.
uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv) curl $uri
La commande retourne le code suivant.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }
Vous pouvez également consulter les journaux (et d’autres informations sur le déploiement) dans le portail Azure ou en exécutant la commande suivante.
az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
Récupérez ce fichier en utilisant la sortie d’URL du déploiement de modèle pour confirmer que le script de déploiement fonctionne correctement.
$fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value Invoke-RestMethod $fileUri
La commande retourne le code suivant.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}
Vous pouvez également consulter les journaux (et d’autres informations sur le déploiement) dans le portail Azure ou en utilisant la ligne de commande suivante.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
Nettoyer le groupe de ressources
Maintenant que vous avez déployé le modèle ARM avec un script de déploiement, vous pouvez supprimer le groupe de ressources qui contient toutes les ressources et attributions de rôles que vous avez créées.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName