Übung: Hinzufügen eines Bereitstellungsskripts zu einer ARM-Vorlage
Wichtig
Sie benötigen für diese Übung ein eigenes Azure-Abonnement. Außerdem fallen möglicherweise Gebühren für Sie an. Wenn Sie noch kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Im Rahmen des Prozesses der Anwendungsbereitstellung Ihres Teams müssen Sie ein Speicherkonto erstellen und eine Datei im Blobspeicher bereitstellen, damit die Anwendung gelesen werden kann. Bis zu diesem Zeitpunkt haben Sie die Datei jedes Mal manuell kopiert, wenn eine neue Umgebung eingerichtet wurde. Sie entscheiden sich für die Verwendung eines Bereitstellungsskripts, um diesen Schritt im Rahmen ihres Umgebungserstellungsprozesses zu automatisieren.
In dieser Übung verwenden Sie eine vorhandene ARM-Vorlage (Azure Resource Manager) und fügen ein neues Bereitstellungsskript hinzu.
In dem Prozess gehen Sie wie folgt vor:
- Erstellen Sie eine Startvorlage.
- Fügen Sie die Voraussetzungen für Bereitstellungsskripts hinzu, einschließlich einer benutzerseitig zugewiesenen verwalteten Identität und Rollenzuweisung.
- Fügen Sie ein Bereitstellungsskript hinzu.
- Stellen Sie die Vorlage bereit, und überprüfen Sie das Ergebnis.
In dieser Übung werden die Azure Resource Manager-Tools für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.
In dieser Übung wird die Bicep-Erweiterung für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.
Erstellen der anfänglichen Vorlage
Sie beginnen mit einer vorhandenen Vorlage, die Ihr Team bereits verwendet. Die Vorlage erstellt das Speicherkonto, richtet Blobdienste ein und erfordert HTTPS. Zudem wird der Blobcontainer für Ihre Konfigurationsdateien erstellt.
Öffnen Sie Visual Studio Code.
Erstellen Sie eine neue Datei azuredeploy.json.
Speichern Sie die leere Datei, damit Visual Studio Code die ARM-Vorlagentools lädt.
Sie können entweder Datei>Speichern unter oder STRG+S unter Windows (⌘+S unter macOS) auswählen. Merken Sie sich unbedingt den Speicherort der Datei. Sie können dazu beispielsweise einen Ordner scripts erstellen und es darin speichern.
Kopieren Sie die folgende Startvorlage in 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" } } ] }
Speichern Sie die Vorlage.
Öffnen Sie Visual Studio Code.
Erstellen Sie eine neue Datei namens main.bicep.
Speichern Sie die leere Datei, damit Visual Studio Code die Bicep-Tools lädt.
Sie können entweder Datei>Speichern unter oder STRG+S unter Windows (⌘+S unter macOS) auswählen. Merken Sie sich unbedingt den Speicherort der Datei. Sie können dazu beispielsweise einen Ordner scripts (Skripts) erstellen und sie darin speichern.
Kopieren Sie die folgende Startvorlage in 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' } }
Speichern Sie die Vorlage.
Hinzufügen einer benutzerseitig zugewiesenen verwalteten Identität
Als Nächstes müssen Sie eine benutzerseitig zugewiesene verwaltete Identität erstellen. Angesichts des Infrastructure-as-Code-Ansatzes können Sie die Identität in der Vorlage erstellen.
Bearbeiten Sie den Abschnitt
variables
von azuredeploy.json so, dass er Folgendes enthält:"userAssignedIdentityName": "configDeployer",
Bearbeiten Sie den Abschnitt
resources
von azuredeploy.json so, dass er Folgendes enthält:{ "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[variables('userAssignedIdentityName')]", "location": "[resourceGroup().location]" }
Speichern Sie die Vorlage.
Fügen Sie unter den Variablendefinitionen in main.bicep Folgendes hinzu:
var userAssignedIdentityName = 'configDeployer'
Fügen Sie unter den Ressourcendefinitionen Folgendes hinzu:
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }
Speichern Sie die Vorlage.
Festlegen der Rolle „Mitwirkender“ für die verwaltete Identität
Nachdem Sie nun eine verwaltete Identität definiert haben, können Sie ihr eine Rolle mit Rechten für die Ressourcengruppe zuweisen. Sie weisen ihr die Rolle Mitwirkender zu. Sie identifizieren eine Rolle anhand ihrer Rollendefinitions-ID, bei der es sich um eine GUID handelt. Die Rolle Mitwirkender ist in Azure integriert, sodass die Rollendefinitions-ID dokumentiert ist.
Die Rollenzuweisung benötigt auch einen GUID-Namen. Sie können die guid
-Funktion verwenden, um eine GUID zu erstellen, die für die Ressourcengruppe und den Rollennamen eindeutig ist.
Bearbeiten Sie den Abschnitt
variables
von azuredeploy.json so, dass er Folgendes enthält:"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
Bearbeiten Sie den Abschnitt
resources
von azuredeploy.json so, dass er Folgendes enthält:{ "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" } }
Speichern Sie die Vorlage.
Fügen Sie unter den Variablendefinitionen in main.bicep Folgendes hinzu:
var roleAssignmentName = guid(resourceGroup().id, 'contributor') var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
Fügen Sie unter den Ressourcendefinitionen Folgendes hinzu:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { name: roleAssignmentName properties: { roleDefinitionId: contributorRoleDefinitionId principalId: userAssignedIdentity.properties.principalId principalType: 'ServicePrincipal' } }
Speichern Sie die Vorlage.
Erstellen des Bereitstellungsskripts
Nun verfügen Sie über alle Voraussetzungen für das Bereitstellungsskript. Sie beginnen mit den allgemeinen Werten, die das Bereitstellungsskript benötigt. Es gibt zwei Abhängigkeiten: die Rollenzuweisung und den Blobspeichercontainer. Ihr Skript muss beide enthalten, bevor es ausgeführt werden kann.
Bearbeiten Sie den Abschnitt
variables
von azuredeploy.json so, dass er Folgendes enthält:"deploymentScriptName": "CopyConfigScript"
Bearbeiten Sie den Abschnitt
resources
von azuredeploy.json so, dass er Folgendes enthält:{ "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'))]": {} } } }
Fügen Sie der Ressource einen
properties
-Abschnitt hinzu, um das Skript und die anderen erforderlichen Werte zu definieren."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" }
Speichern Sie die Vorlage.
Fügen Sie unter den Variablendefinitionen in main.bicep Folgendes hinzu:
var deploymentScriptName = 'CopyConfigScript'
Fügen Sie unter den Ressourcendefinitionen Folgendes hinzu:
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: deploymentScriptName location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '${userAssignedIdentity.id}': {} } } dependsOn: [ roleAssignment blobContainer ] }
Fügen Sie der Ressource einen
properties
-Abschnitt hinzu, um das Skript und die anderen erforderlichen Werte zu definieren.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' }
Speichern Sie die Vorlage.
Hinzufügen einer Vorlagenausgabe
Nachdem Sie nun über ein Bereitstellungsskript verfügen, das eine Datei in Azure Blob Storage hochlädt, müssen Sie möglicherweise später in der Automatisierung auf diesen Dateispeicherort verweisen. (Vielleicht führen Sie einen Test aus, um zu überprüfen, ob sich die Datei dort befindet, wo sie Ihrer Meinung nach sein sollte.)
Fügen Sie nach dem resources
-Abschnitt der ARM-Vorlage eine Ausgabe hinzu, die auf den URI für die Datei verweist, wie vom Bereitstellungsskript gemeldet.
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
Fügen Sie am unteren Rand der Datei nach den Ressourcendefinitionen eine Ausgabe hinzu, die auf den URI für die Datei verweist, wie vom Bereitstellungsskript gemeldet.
output fileUri string = deploymentScript.properties.outputs.Uri
Überprüfen der Vorlage
Ihre Vorlage sollte wie folgt aussehen:
{
"$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
Andernfalls kopieren Sie entweder das Beispiel, oder passen Sie Ihre Vorlage an das Beispiel an.
Bereitstellen der Vorlage
Sie müssen sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto anmelden, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Sie die Azure CLI-Tools installiert haben.
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell bash ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als bash angezeigt wird, wählen Sie die Shell-Dropdownliste und dann Azure Cloud Shell (Bash) aus.
Wählen Sie in der Liste der Terminalshells bash aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
cd templates
Anmelden bei Azure mithilfe der Azure CLI
Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:
az login
Melden Sie sich im Browserfenster, das daraufhin geöffnet wird, in Ihrem Azure-Konto an.
Im Visual Studio Code-Terminal wird eine Liste der Abonnements angezeigt, die diesem Konto zugeordnet sind.
Suchen Sie in der Liste nach dem Abonnement, das Sie für diese Übung verwenden möchten.
Wenn Sie die Liste bei der Anmeldung verpasst haben, können Sie den folgenden Codeausschnitt verwenden, um Ihre Abonnements erneut aufzulisten.
az account list --output table
Legen Sie das Standardabonnement für alle Azure CLI-Befehle fest, die Sie in dieser Sitzung ausführen.
az account set --subscription "Your Subscription Name or ID"
Sie müssen sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto anmelden, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Sie die Azure CLI-Tools installiert haben.
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell bash ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als bash angezeigt wird, wählen Sie die Shell-Dropdownliste und dann Azure Cloud Shell (Bash) aus.
Wählen Sie in der Liste der Terminalshells bash aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
cd templates
Installieren von Bicep
Vergewissern Sie sich mit dem folgenden Befehl, dass Sie die aktuelle Version von Bicep verwenden:
az bicep install && az bicep upgrade
Anmelden bei Azure mithilfe der Azure CLI
Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:
az login
Melden Sie sich im Browserfenster, das daraufhin geöffnet wird, in Ihrem Azure-Konto an.
Im Visual Studio Code-Terminal wird eine Liste der Abonnements angezeigt, die diesem Konto zugeordnet sind.
Suchen Sie in der Liste nach dem Abonnement, das Sie für diese Übung verwenden möchten.
Wenn Sie die Liste bei der Anmeldung verpasst haben, können Sie den folgenden Codeausschnitt verwenden, um Ihre Abonnements erneut aufzulisten.
az account list --output table
Legen Sie das Standardabonnement für alle Azure CLI-Befehle fest, die Sie in dieser Sitzung ausführen.
az account set --subscription "Your Subscription Name or ID"
Melden Sie sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto an, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Azure PowerShell installiert ist, und melden Sie sich unter demselben Konto an, mit dem die Sandbox aktiviert wurde.
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell powershell oder pwsh ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als powershell oder pwsh angezeigt wird, wählen Sie die Shell-Dropdownliste und dann PowerShell aus.
Wählen Sie in der Liste der Terminalshells powershell oder pwsh aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
Set-Location -Path templates
Anmelden bei Azure mithilfe von Azure PowerShell
Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:
Connect-AzAccount
Melden Sie sich im Browser, der anschließend geöffnet wird, bei Ihrem Azure-Konto an.
Führen Sie den folgenden Befehl aus, um die ID des Abonnements abzurufen, das Sie für diese Übung verwenden möchten:
Get-AzSubscription
Die Abonnement-ID befindet sich in der zweiten Spalte. Kopieren Sie die zweite Spalte. Es sieht ungefähr wie aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e aus.
Legen Sie das Standardabonnement für alle Azure PowerShell-Befehle fest, die Sie in dieser Sitzung ausführen.
Set-AzContext -SubscriptionId {Your subscription ID}
Melden Sie sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto an, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Azure PowerShell installiert ist.
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell powershell oder pwsh ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als powershell oder pwsh angezeigt wird, wählen Sie die Shell-Dropdownliste und dann PowerShell aus.
Wählen Sie in der Liste der Terminalshells powershell oder pwsh aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
Set-Location -Path templates
Installieren der Bicep CLI
Installieren Sie die Bicep-CLI, um Bicep über Azure PowerShell zu verwenden.
Anmelden bei Azure mithilfe von Azure PowerShell
Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:
Connect-AzAccount
Melden Sie sich im Browser, der anschließend geöffnet wird, bei Ihrem Azure-Konto an.
Führen Sie den folgenden Befehl aus, um die ID des Abonnements abzurufen, das Sie für diese Übung verwenden möchten:
Get-AzSubscription
Die Abonnement-ID befindet sich in der zweiten Spalte. Kopieren Sie die zweite Spalte. Es sieht ungefähr wie aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e aus.
Legen Sie das Standardabonnement für alle Azure PowerShell-Befehle fest, die Sie in dieser Sitzung ausführen.
Set-AzContext -SubscriptionId {Your subscription ID}
Als Nächstes müssen Sie eine Ressourcengruppe erstellen, die die Ressourcen enthält, die Sie im Rahmen dieser Übung erstellen. Wenn Sie eine neue Ressourcengruppe verwenden, vereinfachen Sie die Bereinigung nach der Übung erheblich.
Führen Sie im Terminal in Visual Studio Code den folgenden Befehl aus, um die Ressourcengruppe für diese Übung zu erstellen:
Erstellen einer Ressourcengruppe für die Übung
resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName
Hinweis
Wenn Sie einen anderen Namen für Ihre Ressourcengruppe verwenden, müssen Sie das Skript aktualisieren. Später in diesem Modul erfahren Sie, wie Sie das Hartcodieren von Ressourcengruppennamen in Ihren Skripts vermeiden.
Bereitstellen der Vorlage in Azure
Der folgende Code stellt die ARM-Vorlage in Azure bereit. Es wird eine erfolgreiche Bereitstellung angezeigt.
Stellen Sie die Vorlage mithilfe von Azure CLI-Befehlen im Visual Studio Code-Terminal bereit.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Der folgende Code stellt die ARM-Vorlage in Azure bereit. Es wird eine erfolgreiche Bereitstellung angezeigt.
Stellen Sie die Vorlage mithilfe von Azure CLI-Befehlen im Visual Studio Code-Terminal bereit.
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Der folgende Code stellt die Vorlage in Azure bereit. Es wird eine erfolgreiche Bereitstellung angezeigt.
Stellen Sie die Vorlage mithilfe von Azure PowerShell-Befehle im Terminal bereit.
$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Der folgende Code stellt die Vorlage in Azure bereit. Es wird eine erfolgreiche Bereitstellung angezeigt.
Stellen Sie die Vorlage mithilfe von Azure PowerShell-Befehle im Terminal bereit.
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Überprüfen des Ergebnisses Ihrer Vorlage
Nach Abschluss der Bereitstellung erhalten Sie eine URL, die auf die Datei verweist, die Ihr Bereitstellungsskript in den Blobspeicher kopiert hat.
Rufen Sie diese Datei mithilfe der URL-Ausgabe der Vorlagenbereitstellung ab, um zu überprüfen, ob das Bereitstellungsskript ordnungsgemäß ausgeführt wurde.
uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv) curl $uri
Der Befehl gibt den folgenden Code zurück.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }
Sie können auch die Protokolle (und andere Details zur Bereitstellung) über das Azure-Portal oder mithilfe des folgenden Befehls überprüfen.
az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
Rufen Sie diese Datei mithilfe der URL-Ausgabe der Vorlagenbereitstellung ab, um zu überprüfen, ob das Bereitstellungsskript ordnungsgemäß ausgeführt wurde.
$fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value Invoke-RestMethod $fileUri
Der Befehl gibt den folgenden Code zurück.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}
Sie können auch die Protokolle (und andere Details zur Bereitstellung) über das Azure-Portal oder mithilfe der folgenden Befehlszeile überprüfen.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
Bereinigen der Ressourcengruppe
Nachdem Sie nun erfolgreich eine ARM-Vorlage mit einem Bereitstellungsskript bereitgestellt haben, können Sie die Ressourcengruppe entfernen, die alle von Ihnen erstellten Ressourcen und Rollenzuweisungen enthält.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName