Exercice : Ajouter un script de déploiement à un modèle ARM
Important
Vous avez besoin de votre propre abonnement Azure pour effectuer cet exercice, et vous risquez d’entraîner des frais. 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’à ce stade, vous avez copié manuellement le fichier chaque fois qu’un nouvel environnement est configuré. 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 prenez un modèle Azure Resource Manager (ARM) existant et ajoutez un nouveau script de déploiement.
Pendant ce processus, vous procédez comme suit :
- 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). N’oubliez pas 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). Assurez-vous de bien noter l’emplacement de sauvegarde du 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
variablesde azuredeploy.json pour y ajouter :"userAssignedIdentityName": "configDeployer",Modifiez la section
resourcesde 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. Attribuez-lui 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
variablesde azuredeploy.json pour y ajouter :"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",Modifiez la section
resourcesde 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 de ces deux dépendances pour qu’il puisse s’exécuter.
Modifiez la section
variablesde azuredeploy.json pour y ajouter :"deploymentScriptName": "CopyConfigScript"Modifiez la section
resourcesde 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
propertiessection à la ressource qui définit le script et les autres valeurs requises."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
propertiessection à la ressource qui définit le script et les autres valeurs requises.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. (Peut-être que vous exécutez un test pour vérifier que le fichier est là où vous pensez qu’il doit être.)
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 la fenêtre de terminal affiche bash sur le côté droit, cela signifie que l’interpréteur de commandes approprié est déjà ouvert. Autrement, si vous voyez une icône d’interpréteur de commandes bash à droite, vous pouvez la sélectionner pour lancer l’interpréteur de commandes.
Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Git 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 loginDans 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 tableDé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 la fenêtre de terminal affiche bash sur le côté droit, cela signifie que l’interpréteur de commandes approprié est déjà ouvert. Autrement, si vous voyez une icône d’interpréteur de commandes bash à droite, vous pouvez la sélectionner pour lancer l’interpréteur de commandes.
Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Git 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 loginDans 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 tableDé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 la fenêtre de terminal affiche pwsh ou powershell sur le côté droit, cela signifie que l’interpréteur de commandes approprié est déjà ouvert. Autrement, si vous voyez une icône d’interpréteur de commandes PowerShell à droite, vous pouvez la sélectionner pour lancer l’interpréteur de commandes.
Si un interpréteur de commandes autre que pwsh ou powershell apparaît, sélectionnez la flèche déroulante de l’interpréteur de commandes, puis PowerShell.
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-AzAccountDans 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-AzSubscriptionL’ID d’abonnement est la deuxième colonne. Copiez la deuxième colonne. Il doit ressembler à aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
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 à partir du 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 la fenêtre de terminal affiche pwsh ou powershell sur le côté droit, cela signifie que l’interpréteur de commandes approprié est déjà ouvert. Autrement, si vous voyez une icône d’interpréteur de commandes PowerShell à droite, vous pouvez la sélectionner pour lancer l’interpréteur de commandes.
Si un interpréteur de commandes autre que pwsh ou powershell apparaît, sélectionnez la flèche déroulante de l’interpréteur de commandes, puis PowerShell.
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-AzAccountDans 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-AzSubscriptionL’ID d’abonnement est la deuxième colonne. Copiez la deuxième colonne. Il doit ressembler à aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
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}
Ensuite, vous devez 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, il sera plus facile de nettoyer 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 autre nom pour votre groupe de ressources, vous devez vous assurer que vous mettez à jour le script. Plus loin dans ce module, vous voyez comment éviter les noms de groupes de ressources codés en dur dans vos scripts.
Déployer le modèle sur Azure
Le code suivant déploie le modèle ARM sur Azure. Vous devriez voir 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 devriez voir 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 devriez voir 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 devriez voir 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 $uriLa commande retourne le code suivant.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }Consultez les journaux et d'autres détails relatifs au déploiement à partir du portail Azure. Vous pouvez également utiliser 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 $fileUriLa commande retourne le code suivant.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}Consultez les journaux et d'autres détails relatifs au déploiement à partir du portail Azure. Vous pouvez également utiliser la commande suivante.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
Nettoyer le groupe de ressources
Maintenant que vous avez déployé un modèle ARM avec un script de déploiement, vous pouvez supprimer le groupe de ressources qui contient toutes les ressources et les attributions de rôles que vous avez créées.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName