Øvelse – Føj et installationsscript til en ARM-skabelon

Fuldført

Vigtig

Du skal bruge dit eget Azure-abonnement for at køre denne øvelse, og du kan pådrage dig gebyrer. Hvis du ikke allerede har et Azure-abonnement, kan du oprette en gratis konto, før du begynder.

Som en del af teamets programinstallationsproces skal du oprette en lagerkonto og placere en fil i bloblageret, før programmet kan læses. Indtil nu har du kopieret filen manuelt, hver gang der er konfigureret et nyt miljø. Du beslutter dig for at bruge et installationsscript til at automatisere dette trin som en del af processen til oprettelse af miljøet.

I denne øvelse skal du tage en eksisterende AZURE Resource Manager-skabelon (ARM) og tilføje et nyt installationsscript.

Under processen skal du:

  • Opret en startskabelon.
  • Tilføj forudsætningerne for udrulningsscripts, herunder en brugertildelt administreret identitet og rolletildeling.
  • Tilføj et installationsscript.
  • Udrul skabelonen, og bekræft resultatet.

I denne øvelse bruges Azure Resource Manager Tools til Visual Studio Code. Sørg for at installere denne udvidelse i Visual Studio Code.

I denne øvelse bruges udvidelsen Bicep til Visual Studio Code. Sørg for at installere denne udvidelse i Visual Studio Code.

Opret startskabelonen

Du starter med en eksisterende skabelon, som dit team har brugt. Skabelonen opretter lagerkontoen, konfigurerer blobtjenester og kræver HTTPS og opretter blobobjektbeholderen til dine konfigurationsfiler.

  1. Åbn Visual Studio Code.

  2. Opret en ny fil med navnet azuredeploy.json.

  3. Gem den tomme fil, så Visual Studio Code indlæser ARM-skabelonværktøjet.

    Du kan enten vælge Filer>Gem som eller vælge Ctrl+S- i Windows (⌘+S på macOS). Husk, hvor du har gemt filen. Det kan f.eks. være, at du vil oprette en scripts mappe, hvor den skal gemmes.

  4. Kopiér følgende startskabelon til 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. Gem skabelonen.

  1. Åbn Visual Studio Code.

  2. Opret en ny fil med navnet main.bicep.

  3. Gem den tomme fil, så Visual Studio Code indlæser Bicep-værktøjet.

    Du kan enten vælge Filer>Gem som eller vælge Ctrl+S- i Windows (⌘+S på macOS). Husk, hvor du har gemt filen. Det kan f.eks. være, at du vil oprette en scripts mappe for at gemme den i.

  4. Kopiér følgende startskabelon til 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. Gem skabelonen.

Tilføj en brugertildelt administreret identitet

Derefter skal du oprette en brugertildelt administreret identitet. På grund af tilgangen infrastruktur som kode kan du oprette identiteten i skabelonen.

  1. Rediger afsnittet variables i azuredeploy.json, der skal medtages:

    "userAssignedIdentityName": "configDeployer",
    
  2. Rediger afsnittet resources i azuredeploy.json, der skal medtages:

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

  1. Under variabeldefinitionerne i main.bicepskal du tilføje:

    var userAssignedIdentityName = 'configDeployer'
    
  2. Under ressourcedefinitionerne skal du tilføje:

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

Angiv bidragyderrollen for den administrerede identitet

Nu, hvor du har defineret en administreret identitet, kan du tildele den en rolle med rettigheder til ressourcegruppen. Du skal tildele den rollen bidragyder . Du identificerer en rolle ved hjælp af rolledefinitions-id'et, som er et GUID. Rollen bidragyder er indbygget i Azure, så rolledefinitions-id'et dokumenteres.

Rolletildelingen skal også have et GUID-navn. Du kan bruge funktionen guid til at oprette et GUID, der er entydigt for ressourcegruppen og rollenavnet.

  1. Rediger afsnittet variables i azuredeploy.json, der skal medtages:

    "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
    "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
    
  2. Rediger afsnittet resources i azuredeploy.json, der skal medtages:

    {
        "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. Gem skabelonen.

  1. Under variabeldefinitionerne i main.bicepskal du tilføje:

    var roleAssignmentName = guid(resourceGroup().id, 'contributor')
    var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
    
  2. Under ressourcedefinitionerne skal du tilføje:

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

Opret installationsscriptet

Nu har du alle forudsætningerne for installationsscriptet. Du starter med de fælles værdier, som installationsscriptet skal bruge. Der er to afhængigheder, rolletildelingen og bloblagerobjektbeholderen. Scriptet skal bruge begge disse, før det kan køres.

  1. Rediger afsnittet variables i azuredeploy.json, der skal medtages:

    "deploymentScriptName": "CopyConfigScript"
    
  2. Rediger afsnittet resources i azuredeploy.json, der skal medtages:

    {
        "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. Føj en properties sektion til ressourcen for at definere scriptet og de andre påkrævede værdier.

    "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. Gem skabelonen.

  1. Under variabeldefinitionerne i main.bicepskal du tilføje:

    var deploymentScriptName = 'CopyConfigScript'
    
  2. Under ressourcedefinitionerne skal du tilføje:

    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. Føj en properties sektion til ressourcen for at definere scriptet og de andre påkrævede værdier.

    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. Gem skabelonen.

Tilføj et skabelonoutput

Nu, hvor du har et installationsscript, der uploader en fil til Azure Blob Storage, skal du muligvis referere til denne filplacering i senere automatisering. (Måske skal du køre en test for at validere, at filen er der, hvor du mener, at den skal være).

Efter afsnittet resources i ARM-skabelonen skal du tilføje et output, der refererer til URI'en for filen som rapporteret af installationsscriptet.

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

Nederst i filen skal du efter ressourcedefinitionerne tilføje et output, der refererer til URI'en for filen som rapporteret af installationsscriptet.

output fileUri string = deploymentScript.properties.outputs.Uri

Bekræft skabelonen

Skabelonen skal se ud som følger:

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

Hvis den ikke gør det, skal du enten kopiere eksemplet eller justere skabelonen, så den passer til eksemplet.

Udrul skabelonen

Hvis du vil installere denne skabelon på Azure, skal du logge på din Azure-konto fra Visual Studio Code-terminalen. Sørg for, at du har installeret værktøjerne til Azure CLI.

  1. I menuen Terminal skal du vælge Ny terminal. Terminalvinduet åbnes normalt i den nederste halvdel af skærmen.

  2. Hvis terminalvinduet vises bash i højre side, betyder det, at den korrekte shell allerede er åben. Hvis du kan se et bash shell-ikon til højre, kan du også vælge det for at starte shell'en.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor indstillingen bash vises.

    Hvis der vises en shell, der ikke bash, vises, skal du vælge rullepilen shell og derefter vælge Git Bash.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor rullelisten Terminal Shell vises, og Git Bash Default er valgt.

  3. I terminalen skal du gå til den mappe, hvor du gemte skabelonen. Hvis du f.eks. har gemt skabelonen i skabeloner mappe, kan du bruge denne kommando:

    cd templates
    

Log på Azure ved hjælp af Azure CLI

  1. Log på Azure i Visual Studio Code-terminalen ved at køre følgende kommando:

    az login
    
  2. Log på din Azure-konto i den browser, der åbnes.

    Visual Studio Code-terminalen viser en liste over de abonnementer, der er knyttet til denne konto.

  3. Find det abonnement, du vil bruge til denne øvelse, på listen.

    Hvis du gik glip af listen fra logon, kan du bruge følgende kodestykke til at få vist dine abonnementer igen.

    az account list --output table
    
  4. Angiv standardabonnementet for alle de Azure CLI-kommandoer, du kører i denne session.

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

Hvis du vil installere denne skabelon på Azure, skal du logge på din Azure-konto fra Visual Studio Code-terminalen. Sørg for, at du har installeret værktøjerne til Azure CLI.

  1. I menuen Terminal skal du vælge Ny terminal. Terminalvinduet åbnes normalt i den nederste halvdel af skærmen.

  2. Hvis terminalvinduet vises bash i højre side, betyder det, at den korrekte shell allerede er åben. Hvis du kan se et bash shell-ikon til højre, kan du også vælge det for at starte shell'en.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor indstillingen bash vises.

    Hvis der vises en shell, der ikke bash, vises, skal du vælge rullepilen shell og derefter vælge Git Bash.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor rullelisten Terminal Shell vises, og Git Bash Default er valgt.

  3. I terminalen skal du gå til den mappe, hvor du gemte skabelonen. Hvis du f.eks. har gemt skabelonen i skabeloner mappe, kan du bruge denne kommando:

    cd templates
    

Installér Bicep

Kør følgende kommando for at sikre, at du har den nyeste version af Bicep:

az bicep install && az bicep upgrade

Log på Azure ved hjælp af Azure CLI

  1. Log på Azure i Visual Studio Code-terminalen ved at køre følgende kommando:

    az login
    
  2. Log på din Azure-konto i den browser, der åbnes.

    Visual Studio Code-terminalen viser en liste over de abonnementer, der er knyttet til denne konto.

  3. Find det abonnement, du vil bruge til denne øvelse, på listen.

    Hvis du gik glip af listen fra logon, kan du bruge følgende kodestykke til at få vist dine abonnementer igen.

    az account list --output table
    
  4. Angiv standardabonnementet for alle de Azure CLI-kommandoer, du kører i denne session.

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

Hvis du vil installere denne skabelon på Azure, skal du logge på din Azure-konto fra Visual Studio Code-terminalen. Sørg for, at du har installeret Azure PowerShell, og log på den samme konto, der aktiverede sandkassen.

  1. I menuen Terminal skal du vælge Ny terminal. Terminalvinduet åbnes normalt i den nederste halvdel af skærmen.

  2. Hvis terminalvinduet vises pwsh- eller powershell- i højre side, betyder det, at den korrekte shell allerede er åben. Hvis du kan se et PowerShell-shellikon til højre, kan du også vælge det for at starte shell'en.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor indstillingen pwsh vises på rullelisten Shell.

    Hvis der vises en shell ud over pwsh- eller powershell-, skal du vælge rullepilen shell og derefter vælge PowerShell-.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor rullelisten Terminal Shell vises, og PowerShell er valgt.

  3. I terminalen skal du gå til den mappe, hvor du gemte skabelonen. Hvis du f.eks. har gemt skabelonen i mappen skabeloner, kan du bruge denne kommando:

    Set-Location -Path templates
    

Log på Azure ved hjælp af Azure PowerShell

  1. Log på Azure i Visual Studio Code-terminalen ved at køre følgende kommando:

    Connect-AzAccount
    
  2. Log på din Azure-konto i den browser, der åbnes.

  3. Hent id'et for det abonnement, du vil bruge til denne øvelse, ved at køre følgende kommando:

    Get-AzSubscription
    

    Abonnements-id'et er den anden kolonne. Kopiér den anden kolonne. Det ligner noget aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

  4. Angiv standardabonnementet for alle de Azure PowerShell-kommandoer, du kører i denne session.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Hvis du vil installere denne skabelon på Azure, skal du logge på din Azure-konto fra Visual Studio Code-terminalen. Sørg for, at du har installeret Azure PowerShell.

  1. I menuen Terminal skal du vælge Ny terminal. Terminalvinduet åbnes normalt i den nederste halvdel af skærmen.

  2. Hvis terminalvinduet vises pwsh- eller powershell- i højre side, betyder det, at den korrekte shell allerede er åben. Hvis du kan se et PowerShell-shellikon til højre, kan du også vælge det for at starte shell'en.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor indstillingen pwsh vises på rullelisten Shell.

    Hvis der vises en shell ud over pwsh- eller powershell-, skal du vælge rullepilen shell og derefter vælge PowerShell-.

    Skærmbillede af terminalvinduet i Visual Studio Code, hvor rullelisten Terminal Shell vises, og PowerShell er valgt.

  3. I terminalen skal du gå til den mappe, hvor du gemte skabelonen. Hvis du f.eks. har gemt skabelonen i mappen skabeloner, kan du bruge denne kommando:

    Set-Location -Path templates
    

Installér Bicep-kommandolinjegrænsefladen

Hvis du vil bruge Bicep fra Azure PowerShell, installere Bicep CLI-.

Log på Azure ved hjælp af Azure PowerShell

  1. Log på Azure i Visual Studio Code-terminalen ved at køre følgende kommando:

    Connect-AzAccount
    
  2. Log på din Azure-konto i den browser, der åbnes.

  3. Hent id'et for det abonnement, du vil bruge til denne øvelse, ved at køre følgende kommando:

    Get-AzSubscription
    

    Abonnements-id'et er den anden kolonne. Kopiér den anden kolonne. Det ligner noget aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

  4. Angiv standardabonnementet for alle de Azure PowerShell-kommandoer, du kører i denne session.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Derefter skal du oprette en ressourcegruppe, der indeholder de ressourcer, du opretter som en del af denne opgave. Når du bruger en ny ressourcegruppe, gør du oprydningen meget nemmere efter øvelsen.

Kør denne kommando fra terminalen i Visual Studio Code for at oprette ressourcegruppen til denne opgave:

Opret en ressourcegruppe til øvelsen

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

Seddel

Hvis du bruger et andet navn til din ressourcegruppe, skal du sørge for at opdatere scriptet. Senere i dette modul kan du se, hvordan du undgår hård kodning af ressourcegruppenavne i dine scripts.

Udrul skabelonen på Azure

I følgende kode installeres ARM-skabelonen på Azure. Du får vist en vellykket installation.

Udrul skabelonen ved hjælp af Azure CLI-kommandoer i Visual Studio Code-terminalen.

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

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

I følgende kode installeres ARM-skabelonen på Azure. Du får vist en vellykket installation.

Udrul skabelonen ved hjælp af Azure CLI-kommandoer i Visual Studio Code-terminalen.

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

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

Følgende kode installerer skabelonen på Azure. Du får vist en vellykket installation.

Udrul skabelonen ved hjælp af Azure PowerShell-kommandoer i terminalen.

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

Følgende kode installerer skabelonen på Azure. Du får vist en vellykket installation.

Udrul skabelonen ved hjælp af Azure PowerShell-kommandoer i terminalen.

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

Gennemse resultatet af skabelonen

Når installationen er fuldført, får du en URL-adresse, der peger på den fil, som installationsscriptet kopierede til bloblageret.

  1. Hent filen ved hjælp af URL-outputtet fra skabeloninstallationen for at bekræfte, at installationsscriptet fungerede korrekt.

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

    Kommandoen returnerer følgende kode.

    {
      "environment": "production",
      "hostname": "tailwindtraders.com",
      "Logging": {
        "LogLevel": {
          "Default": "Debug"
        }
      },
      "ApplicationInsights": {
        "InstrumentationKey": ""
      },
      "AllowedHosts": "*",
      "CosmosDb": {
        "Host": "",
        "Key": "",
        "Database": "Products"
      }
    }
    
  2. Du kan også gennemse loggene (og andre oplysninger om installationen) fra Azure Portal eller ved hjælp af følgende kommando.

    az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
    
  1. Hent filen ved hjælp af URL-outputtet fra skabeloninstallationen for at bekræfte, at installationsscriptet fungerede korrekt.

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

    Kommandoen returnerer følgende kode.

    environment         : production
    hostname            : tailwindtraders.com
    Logging             : @{LogLevel=}
    ApplicationInsights : @{InstrumentationKey=}
    AllowedHosts        : *
    CosmosDb            : @{Host=; Key=; Database=Products}
    
  2. Du kan også gennemse loggene (og andre oplysninger om installationen) fra Azure Portal eller ved hjælp af følgende kommandolinje.

    Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
    

Ryd op i ressourcegruppen

Nu, hvor du har installeret en ARM-skabelon med et installationsscript, kan du fjerne den ressourcegruppe, der indeholder alle de ressourcer og rolletildelinger, du har oprettet.

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