Übung: Bedingtes Bereitstellen von Ressourcen
Hinweis
Wenn Sie zum ersten Mal eine Sandbox aktivieren und die Bedingungen akzeptieren, ist Ihr Microsoft-Konto einem neuen Azure-Verzeichnis mit dem Namen Microsoft Learn Sandbox zugeordnet. Sie werden darüber hinaus einem speziellen Abonnement mit der Bezeichnung Concierge-Abonnement hinzugefügt.
Sie müssen die Ressourcen Ihres Spielzeugunternehmens in einer Vielzahl von Umgebungen bereitstellen, und Sie möchten Parameter und Bedingungen verwenden, um zu steuern, was für jede Umgebung bereitgestellt wird.
In dieser Übung erstellen Sie einen logischen Azure SQL-Server und eine Datenbank. Anschließend fügen Sie Überwachungseinstellungen hinzu, um sicherzustellen, dass die Überwachung aktiviert ist. Sie möchten sie jedoch nur aktivieren, wenn die Bereitstellung in einer Produktionsumgebung erfolgt. Zu Überwachungszwecken benötigen Sie ein Speicherkonto, das Sie ebenfalls nur dann bereitstellen, wenn Ressourcen in einer Produktionsumgebung bereitgestellt werden.
In dem Prozess gehen Sie wie folgt vor:
- Sie erstellen eine Bicep-Datei, die einen logischen Server mit einer Datenbank definiert.
- Sie fügen ein Speicherkonto und SQL-Überwachungseinstellungen hinzu, die jeweils mit einer Bedingung bereitgestellt werden.
- Sie richten eine Infrastruktur für Ihre Entwicklungsumgebung ein und überprüfen dann das Ergebnis.
- Sie stellen Ihre Infrastruktur erneut für Ihre Produktionsumgebung bereit und sehen sich dann die Änderungen an.
In dieser Übung wird die Bicep-Erweiterung für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.
Erstellen einer Bicep-Vorlage mit einem logischen Server und einer Datenbank
Ö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önnten beispielsweise einen Ordner templates erstellen und sie darin speichern.
Um einen logischen Server und eine Datenbank zu definieren, fügen Sie der Datei den folgenden Inhalt sowie die Parameter und Variablen hinzu, die diese Ressourcen benötigen. Geben Sie den Inhalt selbst ein, anstatt ihn zu kopieren und einzufügen, damit Sie sehen können, wie die Tools Sie beim Schreiben Ihrer Bicep-Dateien unterstützen.
@description('The Azure region into which the resources should be deployed.') param location string @secure() @description('The administrator login username for the SQL server.') param sqlServerAdministratorLogin string @secure() @description('The administrator login password for the SQL server.') param sqlServerAdministratorLoginPassword string @description('The name and tier of the SQL database SKU.') param sqlDatabaseSku object = { name: 'Standard' tier: 'Standard' } var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}' var sqlDatabaseName = 'TeddyBear' resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = { name: sqlServerName location: location properties: { administratorLogin: sqlServerAdministratorLogin administratorLoginPassword: sqlServerAdministratorLoginPassword } } resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = { parent: sqlServer name: sqlDatabaseName location: location sku: sqlDatabaseSku }
Beachten Sie, dass alle Parameter
@description
-Decorators enthalten, um die Arbeit damit zu vereinfachen. Beachten Sie auch, dass der Decorator@secure
auf die ParametersqlServerAdministratorLogin
undsqlServerAdministratorLoginPassword
angewendet wird. So wird Bicep mitgeteilt, dass diese Parameterwerte vertraulich sind. Azure gibt keine vertraulichen Werte in Protokollen aus.
Hinzufügen von Speicherkonten
In den Überwachungseinstellungen für die logischen Server müssen Sie ein Speicherkonto angeben, das die Überwachungsdaten enthalten soll. Sie aktualisieren Ihre Bicep-Datei, um dieses Speicherkonto zu erstellen, aber nur, wenn die Überwachung aktiviert werden soll.
Fügen Sie unter den Parameterdeklarationen die folgenden Parameter hinzu:
@description('The name of the environment. This must be Development or Production.') @allowed([ 'Development' 'Production' ]) param environmentName string = 'Development' @description('The name of the audit storage account SKU.') param auditStorageAccountSkuName string = 'Standard_LRS'
Fügen Sie unter den Variablendeklarationen die folgenden Variablen hinzu:
var auditingEnabled = environmentName == 'Production' var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
Hinweis: Sie erstellen eine Variable namens
auditingEnabled
, die Sie als Bedingung für die Bereitstellung der Überwachungsressourcen verwenden. Wenn Sie eine Variable auf diese Weise erstellen, ist Ihr Bicep-Code übersichtlicher und leichter lesbar. Jeder, der sich die Bedingungen für Ihre Ressourcen ansieht, versteht die Zusammenhänge.Beachten Sie auch, dass die Variable
auditStorageAccountName
eine Funktion namenstake()
verwendet. Für Speicherkontonamen gilt eine maximale Länge von 24 Zeichen, daher schneidet diese Funktion das Ende der Zeichenfolge ab, um sicherzustellen, dass der Name gültig ist.Fügen Sie unten in der Datei unterhalb der Ressourcen die folgende Ressourcendefinition für das Speicherkonto hinzu:
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) { name: auditStorageAccountName location: location sku: { name: auditStorageAccountSkuName } kind: 'StorageV2' }
Beachten Sie, dass die Definitionen für das Speicherkonto das Schlüsselwort
if
enthalten, welches eine Bereitstellungsbedingung angibt.
Hinzufügen von Überwachungseinstellungen
Fügen Sie unterhalb der soeben hinzugefügten Speicherkontoressource Folgendes hinzu:
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) { parent: sqlServer name: 'default' properties: { state: 'Enabled' storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : '' storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : '' } }
Beachten Sie, dass die Definition die gleiche
if
-Bedingung wie das Speicherkonto enthält. Außerdem verwenden die EigenschaftenstorageEndpoint
undstorageAccountAccessKey
den ternären Operator des Fragezeichens (?
). So wird sichergestellt, dass ihre Werte immer gültig sind. Wenn Sie dies nicht tun, wertet Azure Resource Manager die Ausdruckswerte noch vor der Ressourcenbereitstellungsbedingung aus und gibt einen Fehler zurück, weil das Speicherkonto nicht gefunden werden kann.Speichern Sie die Änderungen in der Datei.
Überprüfen Ihrer Bicep-Datei
Nachdem Sie alle oben genannten Änderungen durchgeführt haben, sollte Ihre Bicep-Datei wie im folgenden Beispiel aussehen:
@description('The Azure region into which the resources should be deployed.')
param location string
@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string
@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string
@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
name: 'Standard'
tier: 'Standard'
}
@description('The name of the environment. This must be Development or Production.')
@allowed([
'Development'
'Production'
])
param environmentName string = 'Development'
@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'
var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: sqlDatabaseSku
}
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
name: auditStorageAccountName
location: location
sku: {
name: auditStorageAccountSkuName
}
kind: 'StorageV2'
}
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
parent: sqlServer
name: 'default'
properties: {
state: 'Enabled'
storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
}
}
Andernfalls kopieren Sie das Beispiel, oder passen Sie Ihre Vorlage an das Beispiel an.
Bereitstellen der Bicep-Vorlage in Azure
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 die Azure CLI installiert ist, und melden Sie sich mit dem Konto an, mit dem Sie die Sandbox aktiviert 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
Melden Sie sich im Visual Studio Code-Terminal bei Azure an, indem Sie den folgenden Befehl ausführen:
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.
Legen Sie das Standardabonnement für alle Azure CLI-Befehle fest, die Sie in dieser Sitzung ausführen.
az account set --subscription "Concierge Subscription"
Hinweis
Wenn Sie in letzter Zeit mehrere Sandboxes verwendet haben, zeigt das Terminal möglicherweise mehrere Instanzen des Concierge-Abonnements an. Verwenden Sie in diesem Fall die nächsten beiden Schritte, um das Standardabonnement festzulegen. Wenn der vorherige Befehl erfolgreich war und nur ein Concierge-Abonnement aufgeführt wird, überspringen Sie die beiden folgenden Schritte.
Rufen Sie die Concierge-Abonnement-IDs ab.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
Legen Sie das Standardabonnement mit der Abonnement-ID fest. Ersetzen Sie dabei {your subscription ID} (Ihre Abonnement-ID) durch die aktuellste Concierge Subscription-ID.
az account set --subscription {your subscription ID}
Festlegen der Standardressourcengruppe
Wenn Sie die Azure CLI verwenden, können Sie die Standardressourcengruppe festlegen und den Parameter in den restlichen Azure CLI-Befehlen in dieser Übung weglassen. Legen Sie den Standardwert auf die Ressourcengruppe fest, die in der Sandboxumgebung für Sie erstellt wurde.
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
Bereitstellen der Vorlage in Azure über die Azure-Befehlszeilenschnittstelle
Stellen Sie die Bicep-Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Code ausführen. Beachten Sie, dass Sie den Parameter location
explizit auf westus3
festlegen.
az deployment group create --template-file main.bicep --parameters location=westus3
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
Installieren der Bicep CLI
Installieren Sie die Bicep-CLI, um Bicep über Azure PowerShell zu verwenden.
Anmelden bei Azure mithilfe von Azure PowerShell
Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:
Connect-AzAccount
Ein Browser wird geöffnet, in dem Sie sich bei Ihrem Azure-Konto anmelden können.
Sobald Sie sich in Azure angemeldet haben, wird im Terminal eine Liste der Abonnements angezeigt, die mit diesem Konto verknüpft sind.
Wenn Sie die Sandbox aktiviert haben, wird ein Abonnement namens Concierge-Abonnement angezeigt. Verwenden Sie dieses Abonnement für die verbleibenden Schritte der Übung.
Legen Sie das Standardabonnement für alle Azure PowerShell-Befehle fest, die Sie in dieser Sitzung ausführen.
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
Hinweis
Wenn Sie in letzter Zeit mehrere Sandboxes verwendet haben, zeigt das Terminal möglicherweise mehrere Instanzen des Concierge-Abonnements an. Verwenden Sie in diesem Fall die nächsten beiden Schritte, um das Standardabonnement festzulegen. Wenn der vorherige Befehl erfolgreich war und nur ein Concierge-Abonnement aufgeführt wird, überspringen Sie die beiden folgenden Schritte.
Rufen Sie die Abonnement-ID ab. Mit dem folgenden Befehl werden Ihre Abonnements und deren IDs aufgelistet. Suchen Sie nach
Concierge Subscription
, und kopieren Sie dann die ID aus der zweiten Spalte. Der Wert sollte etwa wie folgt aussehen:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.Get-AzSubscription
Ändern Sie Ihr aktives Abonnement in Concierge-Abonnement. Ersetzen Sie {Your subscription ID} durch die gerade kopierte ID.
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
Festlegen der Standardressourcengruppe
Sie können die Standardressourcengruppe festlegen und den Parameter in den restlichen Azure PowerShell-Befehlen in dieser Übung weglassen. Legen Sie diesen Standardwert auf die Ressourcengruppe fest, die in der Sandboxumgebung für Sie erstellt wurde.
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
Bereitstellen der Vorlage in Azure über Azure PowerShell
Stellen Sie die Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Azure PowerShell-Befehl ausführen. Dieser Vorgang kann einige Minuten dauern, und dann verfügen Sie über eine erfolgreiche Bereitstellung.
New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3
Sie werden beim Ausführen der Bereitstellung aufgefordert, die Werte für die Parameter sqlServerAdministratorLogin
und sqlServerAdministratorLoginPassword
einzugeben.
Tipp
Wenn Sie die sicheren Parameter eingeben, müssen die von Ihnen festgelegten Werte bestimmten Regeln entsprechen:
sqlServerAdministratorLogin
darf kein leicht zu erratender Anmeldename wieadmin
oderroot
sein. Er darf nur alphanumerische Zeichen enthalten und muss mit einem Buchstaben beginnen.sqlServerAdministratorLoginPassword
muss mindestens acht Zeichen umfassen und Kleinbuchstaben, Großbuchstaben, Zahlen und Symbole enthalten. Weitere Informationen zur Kennwortkomplexität finden Sie in der SQL Azure-Kennwortrichtlinie.
Wenn die Parameterwerte die Anforderungen nicht erfüllen, wird Ihr logischer Server nicht von Azure SQL bereitgestellt.
Notieren Sie sich außerdem den Anmeldenamen und das von Ihnen eingegebene Kennwort. Sie werden diese Angaben in Kürze erneut verwenden.
Da Sie keinen Wert für den Parameter environmentName
angegeben haben, wird der Standardwert Development
verwendet.
Warten Sie, bis die Bereitstellung abgeschlossen ist. Wenn Ihre Bereitstellung mit der Meldung fehlschlägt, dass ein Standort die Erstellung neuer Windows Azure SQL-Datenbank-Server nicht zulässt, wählen Sie eine andere Region wie z. B. eastus
oder eastus2
.
Überprüfen der Bereitstellung
Verwenden Sie das Azure-Portal, um die von Ihnen bereitgestellten Ressourcen zu untersuchen und die Ergebnisse der einzelnen Bereitstellungen zu überprüfen.
Wechseln Sie zum Azure-Portal, und stellen Sie sicher, dass Sie sich im Sandboxabonnement befinden. Gehen Sie dazu folgendermaßen vor:
a. Wählen Sie rechts oben Ihren Avatar aus.
b. Klicken Sie dann auf Verzeichnis wechseln. Wählen Sie in der Liste das Verzeichnis Microsoft Learn Sandbox aus.Wählen Sie im linken Bereich Ressourcengruppen aus.
Wählen Sie
[Name der Sandboxressourcengruppe] aus.In der Übersicht sehen Sie, dass eine Bereitstellung erfolgreich ist. Sie können auch sehen, dass ein logischer Server und eine SQL-Datenbank bereitgestellt werden, das Speicherkonto für die Überwachung jedoch nicht bereitgestellt wird.
Hinweis
Das Speicherkonto mit einem Namen, der mit
cloudshell
beginnt, steht in keinem Zusammenhang mit Ihrer Bereitstellung und wurde von der Learn-Sandbox erstellt.Klicken Sie neben Bereitstellungen auf 1 erfolgreich, um die Bereitstellungsdetails anzuzeigen.
Wählen Sie die Bereitstellung mit dem Namen main aus, um anzuzeigen, welche Ressourcen bereitgestellt wurden. Wählen Sie dann Bereitstellungsdetails aus, um sie zu erweitern.
In diesem Fall werden ein logischer Server und eine SQL-Datenbank bereitgestellt. Beachten Sie, dass das Speicherkonto und die Überwachungseinstellungen nicht in der Liste der Ressourcen enthalten sind.
Lassen Sie die Seite in Ihrem Browser geöffnet. Sie werden die Bereitstellungen später erneut überprüfen.
Erneutes Bereitstellen für die Produktionsumgebung
In der vorherigen Bereitstellung wurde der Standardwert für den Parameter environmentName
verwendet, d. h., er wurde auf Development
festgelegt.
Jetzt legen Sie den Parameterwert explizit auf Production
fest. Durch diese Änderung müsste das Speicherkonto zu Überwachungszwecken bereitgestellt und die Überwachung auf dem logischen Server aktiviert werden.
Bereitstellen der Vorlage für die Produktionsumgebung
Stellen Sie die Bicep-Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Code ausführen:
az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3
Stellen Sie die Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Azure PowerShell-Befehl ausführen:
New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3
Achtung
Achten Sie darauf, denselben Anmeldenamen und dasselbe Kennwort wie zuvor zu verwenden. Andernfalls wird die Bereitstellung nicht erfolgreich durchgeführt.
Nach wenigen Minuten sollte die Bereitstellung erfolgreich abgeschlossen sein.
Überprüfen der erneuten Bereitstellung
Um diese Übung abzuschließen, überprüfen Sie, ob die erneute Bereitstellung erfolgreich durchgeführt und die Überwachung aktiviert wurde.
Kehren Sie zum Azure-Portal zurück, und wechseln Sie zu Ihrer Ressourcengruppe. Wenn Sie die Ressourcengruppe bereits geöffnet haben, wählen Sie Aktualisieren aus.
Sie sollten sehen, dass ein zusätzliches Speicherkonto zu Überwachungszwecken bereitgestellt wurde.
Wählen Sie Ihren logischen Server aus (suchen Sie nach der Ressource vom Typ SQL Server).
Geben Sie dann im Suchfeld Überwachung ein. Wählen Sie unter Sicherheit die Option Überwachung aus.
Überprüfen Sie, ob die Überwachung für diesen logischen Server aktiviert ist.