Oefening: een implementatiescript toevoegen aan een ARM-sjabloon

Voltooid

Belangrijk

U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Als onderdeel van het implementatieproces van uw team moet u een opslagaccount maken en een bestand in blobopslag fasen om de toepassing te kunnen lezen. Tot nu toe hebt u het bestand handmatig gekopieerd telkens wanneer er een nieuwe omgeving is ingesteld. U besluit een implementatiescript te gebruiken om deze stap te automatiseren als onderdeel van het proces voor het maken van uw omgeving.

In deze oefening gebruikt u een bestaande ARM-sjabloon (Azure Resource Manager) en voegt u een nieuw implementatiescript toe.

Tijdens het proces gaat u het volgende doen:

  • Maak een beginsjabloon.
  • Voeg de vereisten toe voor implementatiescripts, inclusief een door de gebruiker toegewezen beheerde identiteit en roltoewijzing.
  • Voeg een implementatiescript toe.
  • Implementeer de sjabloon en controleer het resultaat.

De oefening gebruikt de Azure Resource Manager Tools for Visual Studio Code. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

De beginsjabloon maken

U begint met een bestaande sjabloon die uw team heeft gebruikt. De sjabloon maakt het opslagaccount, stelt blobservices in en vereist HTTPS en maakt de blobcontainer voor uw configuratiebestanden.

  1. Open Visual Studio Code.

  2. Maak een nieuw bestand met de naam azuredeploy.json.

  3. Sla het lege bestand op zodat Visual Studio Code de ARM-sjabloonhulpprogramma's laadt.

    U kunt Bestand>opslaan als selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met scripts maken waarin u deze wilt opslaan.

  4. Kopieer de volgende beginsjabloon naar 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"
                }
            }
        ]
    }
    
  5. Sla de sjabloon op.

  1. Open Visual Studio Code.

  2. Maak een nieuw bestand met de naam main.bicep.

  3. Sla het lege bestand op zodat Visual Studio Code de Bicep-hulpprogramma's laadt.

    U kunt Bestand>opslaan als selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met scripts maken om deze op te slaan in.

  4. Kopieer de volgende beginsjabloon naar 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'
      }
    }
    
  5. Sla de sjabloon op.

Een door de gebruiker toegewezen beheerde identiteit toevoegen

Vervolgens moet u een door de gebruiker toegewezen beheerde identiteit maken. Gezien de benadering van infrastructuur als code kunt u de identiteit in de sjabloon maken.

  1. Bewerk de variables sectie van azuredeploy.json om het volgende op te nemen:

    "userAssignedIdentityName": "configDeployer",
    
  2. Bewerk de resources sectie van azuredeploy.json om het volgende op te nemen:

    {
        "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
        "apiVersion": "2018-11-30",
        "name": "[variables('userAssignedIdentityName')]",
        "location": "[resourceGroup().location]"
    }
    
  3. Sla de sjabloon op.

  1. Voeg onder de variabeledefinities in main.bicep het volgende toe:

    var userAssignedIdentityName = 'configDeployer'
    
  2. Voeg onder de resourcedefinities het volgende toe:

    resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
      name: userAssignedIdentityName
      location: resourceGroup().location
    }
    
  3. Sla de sjabloon op.

De rol inzender voor de beheerde identiteit instellen

Nu u een beheerde identiteit hebt gedefinieerd, kunt u deze een rol toewijzen met rechten voor de resourcegroep. U wijst deze toe aan de rol Inzender. U identificeert een rol op basis van de id van de roldefinitie, een GUID. De rol Inzender is ingebouwd in Azure, zodat de roldefinitie-id wordt gedocumenteerd.

De roltoewijzing heeft ook een GUID-naam nodig. U kunt de guid functie gebruiken om een GUID te maken die uniek is voor de resourcegroep en de rolnaam.

  1. Bewerk de variables sectie van azuredeploy.json om het volgende op te nemen:

    "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
    "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
    
  2. Bewerk de resources sectie van azuredeploy.json om het volgende op te nemen:

    {
        "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"
        }
    }
    
  3. Sla de sjabloon op.

  1. Voeg onder de variabeledefinities in main.bicep het volgende toe:

    var roleAssignmentName = guid(resourceGroup().id, 'contributor')
    var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
    
  2. Voeg onder de resourcedefinities het volgende toe:

    resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
      name: roleAssignmentName
      properties: {
        roleDefinitionId: contributorRoleDefinitionId
        principalId: userAssignedIdentity.properties.principalId
        principalType: 'ServicePrincipal'
      }
    }
    
  3. Sla de sjabloon op.

Het implementatiescript maken

U hebt nu alle vereisten voor het implementatiescript. U begint met de algemene waarden die het implementatiescript nodig heeft. Er zijn twee afhankelijkheden, de roltoewijzing en de blobopslagcontainer. Voor uw script moeten beide bestaan voordat het kan worden uitgevoerd.

  1. Bewerk de variables sectie van azuredeploy.json om het volgende op te nemen:

    "deploymentScriptName": "CopyConfigScript"
    
  2. Bewerk de resources sectie van azuredeploy.json om het volgende op te nemen:

    {
        "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'))]": {}
            }
        }
    }
    
  3. Voeg een properties sectie toe aan de resource om het script en de andere vereiste waarden te definiëren.

    "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"
    }
    
  4. Sla de sjabloon op.

  1. Voeg onder de variabeledefinities in main.bicep het volgende toe:

    var deploymentScriptName = 'CopyConfigScript'
    
  2. Voeg onder de resourcedefinities het volgende toe:

    resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
      name: deploymentScriptName
      location: resourceGroup().location
      kind: 'AzurePowerShell'
      identity: {
        type: 'UserAssigned'
        userAssignedIdentities: {
          '${userAssignedIdentity.id}': {}
        }
      }
      dependsOn: [
        roleAssignment
        blobContainer
      ]
    }
    
  3. Voeg een properties sectie toe aan de resource om het script en de andere vereiste waarden te definiëren.

    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'
    }
    
  4. Sla de sjabloon op.

Een sjabloonuitvoer toevoegen

Nu u een implementatiescript hebt dat een bestand uploadt naar Azure Blob Storage, moet u mogelijk verwijzen naar die bestandslocatie in latere automatisering. (Misschien voert u een test uit om te controleren of het bestand waar u denkt dat het moet zijn.)

Voeg na de resources sectie van de ARM-sjabloon een uitvoer toe die verwijst naar de URI voor het bestand, zoals gerapporteerd door het implementatiescript.

"outputs": {
    "fileUri": {
        "type": "string",
        "value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
    }
}

Voeg onder aan het bestand, na de resourcedefinities, een uitvoer toe die verwijst naar de URI voor het bestand, zoals gerapporteerd door het implementatiescript.

output fileUri string = deploymentScript.properties.outputs.Uri

Uw sjabloon controleren

Uw sjabloon moet er als volgt uitzien:

{
    "$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

Als dit niet het geval is, kopieert u het voorbeeld of past u de sjabloon aan zodat deze overeenkomt met het voorbeeld.

De sjabloon implementeren

Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI-hulpprogramma's hebt geïnstalleerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster bash is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-optie weergegeven.

  3. Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Azure Cloud Shell (Bash).

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en Git Bash Default geselecteerd.

  4. Selecteer bash in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-terminal geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    cd templates
    

Aanmelden bij Azure met behulp van Azure CLI

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    az login
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

    In de Visual Studio Code-terminal wordt een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.

  3. Zoek in de lijst het abonnement dat u voor deze oefening wilt gebruiken.

    Als u de lijst uit de aanmelding hebt gemist, kunt u het volgende fragment gebruiken om uw abonnementen opnieuw weer te geven.

    az account list --output table
    
  4. Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.

    az account set --subscription "Your Subscription Name or ID"
    

Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI-hulpprogramma's hebt geïnstalleerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster bash is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-optie weergegeven.

  3. Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Azure Cloud Shell (Bash).

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en Git Bash Default geselecteerd.

  4. Selecteer bash in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-terminal geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    cd templates
    

Bicep installeren

Voer de volgende opdracht uit om te controleren of u de nieuwste versie van Bicep hebt:

az bicep install && az bicep upgrade

Aanmelden bij Azure met behulp van Azure CLI

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    az login
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

    In de Visual Studio Code-terminal wordt een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.

  3. Zoek in de lijst het abonnement dat u voor deze oefening wilt gebruiken.

    Als u de lijst uit de aanmelding hebt gemist, kunt u het volgende fragment gebruiken om uw abonnementen opnieuw weer te geven.

    az account list --output table
    
  4. Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.

    az account set --subscription "Your Subscription Name or ID"
    

Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd en meld u aan bij hetzelfde account dat de sandbox heeft geactiveerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster powershell of pwsh is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de optie pwsh weergegeven in de vervolgkeuzelijst shell.

  3. Als een andere shell dan powershell of pwsh wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en PowerShell geselecteerd.

  4. Selecteer powershell of pwsh in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, waarbij de PowerShell-terminal is geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    Set-Location -Path templates
    

Aanmelden bij Azure met behulp van Azure PowerShell

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    Connect-AzAccount
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

  3. Haal de id op van het abonnement dat u voor deze oefening wilt gebruiken door de volgende opdracht uit te voeren:

    Get-AzSubscription
    

    De abonnements-id is de tweede kolom. Kopieer de tweede kolom. Het lijkt op cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  4. Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster powershell of pwsh is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de optie pwsh weergegeven in de vervolgkeuzelijst shell.

  3. Als een andere shell dan powershell of pwsh wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en PowerShell geselecteerd.

  4. Selecteer powershell of pwsh in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, waarbij de PowerShell-terminal is geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    Set-Location -Path templates
    

Bicep CLI installeren

Als u Bicep wilt gebruiken vanuit Azure PowerShell, installeert u de Bicep CLI.

Aanmelden bij Azure met behulp van Azure PowerShell

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    Connect-AzAccount
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

  3. Haal de id op van het abonnement dat u voor deze oefening wilt gebruiken door de volgende opdracht uit te voeren:

    Get-AzSubscription
    

    De abonnements-id is de tweede kolom. Kopieer de tweede kolom. Het lijkt op cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  4. Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Vervolgens moet u een resourcegroep maken die de resources bevat die u gaat maken als onderdeel van deze oefening. Door een nieuwe resourcegroep te gebruiken, maakt u het opschonen na de oefening veel eenvoudiger.

Voer vanuit de terminal in Visual Studio Code deze opdracht uit om de resourcegroep voor deze oefening te maken:

Een resourcegroep maken voor de oefening

resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName

Notitie

Als u een andere naam voor uw resourcegroep gebruikt, moet u ervoor zorgen dat u het script bijwerkt. Verderop in deze module ziet u hoe u hardcoderingsresourcegroepnamen in uw scripts kunt voorkomen.

De sjabloon implementeren in Azure

Met de volgende code wordt de ARM-sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.

Implementeer de sjabloon met behulp van Azure CLI-opdrachten in de Visual Studio Code-terminal.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today

az deployment group create \
    --resource-group $resourceGroupName \
    --name $deploymentName \
    --template-file $templateFile

Met de volgende code wordt de ARM-sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.

Implementeer de sjabloon met behulp van Azure CLI-opdrachten in de Visual Studio Code-terminal.

templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today

az deployment group create \
    --resource-group $resourceGroupName \
    --name $deploymentName \
    --template-file $templateFile

Met de volgende code wordt de sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.

Implementeer de sjabloon met behulp van Azure PowerShell-opdrachten in de terminal.

$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroupName `
  -Name $deploymentName `
  -TemplateFile $templateFile

Met de volgende code wordt de sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.

Implementeer de sjabloon met behulp van Azure PowerShell-opdrachten in de terminal.

$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroupName `
  -Name $deploymentName `
  -TemplateFile $templateFile

Bekijk het resultaat van uw sjabloon

Nadat de implementatie is voltooid, krijgt u een URL die verwijst naar het bestand dat uw implementatiescript naar blobopslag heeft gekopieerd.

  1. Haal dat bestand op met behulp van de URL-uitvoer van de sjabloonimplementatie om te bevestigen dat het implementatiescript correct werkte.

    uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv)
    curl $uri
    

    De opdracht retourneert de volgende code.

    {
      "environment": "production",
      "hostname": "tailwindtraders.com",
      "Logging": {
        "LogLevel": {
          "Default": "Debug"
        }
      },
      "ApplicationInsights": {
        "InstrumentationKey": ""
      },
      "AllowedHosts": "*",
      "CosmosDb": {
        "Host": "",
        "Key": "",
        "Database": "Products"
      }
    }
    
  2. U kunt ook de logboeken (en andere details over de implementatie) bekijken vanuit Azure Portal of met behulp van de volgende opdracht.

    az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
    
  1. Haal dat bestand op met behulp van de URL-uitvoer van de sjabloonimplementatie om te bevestigen dat het implementatiescript correct werkte.

    $fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value
    Invoke-RestMethod $fileUri
    

    De opdracht retourneert de volgende code.

    environment         : production
    hostname            : tailwindtraders.com
    Logging             : @{LogLevel=}
    ApplicationInsights : @{InstrumentationKey=}
    AllowedHosts        : *
    CosmosDb            : @{Host=; Key=; Database=Products}
    
  2. U kunt ook de logboeken (en andere details over de implementatie) bekijken vanuit Azure Portal of met behulp van de volgende opdrachtregel.

    Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
    

De resourcegroep opschonen

Nu u een ARM-sjabloon met een implementatiescript hebt geïmplementeerd, kunt u de resourcegroep verwijderen die alle resources en roltoewijzingen bevat die u hebt gemaakt.

az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName