Oefening: resources voorwaardelijk implementeren
Notitie
De eerste keer dat u een sandbox activeert en de voorwaarden accepteert, is uw Microsoft-account gekoppeld aan een nieuwe Azure-directory met de naam Microsoft Learn Sandbox. U wordt ook toegevoegd aan een speciaal abonnement met de naam Concierge-abonnement.
U moet de resources van uw speelgoedbedrijf implementeren in verschillende omgevingen en u wilt parameters en voorwaarden gebruiken om te bepalen wat er in elke omgeving wordt geïmplementeerd.
In deze oefening maakt u een logische Azure SQL-server en een database. Vervolgens voegt u controle-instellingen toe om ervoor te zorgen dat controle is ingeschakeld, maar u wilt dat deze alleen is ingeschakeld wanneer u implementeert in een productieomgeving. Voor controledoeleinden moet u een opslagaccount hebben, dat u ook alleen implementeert wanneer u resources in een productieomgeving implementeert.
Tijdens het proces gaat u het volgende doen:
- Maak een Bicep-bestand dat een logische server met een database definieert.
- Voeg een opslagaccount en SQL-controle-instellingen toe, die elk met een voorwaarde worden geïmplementeerd.
- Stel een infrastructuur in voor uw ontwikkelomgeving en controleer het resultaat.
- Implementeer uw infrastructuur opnieuw in uw productieomgeving en bekijk vervolgens de wijzigingen.
In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.
Een Bicep-sjabloon maken met een logische server en database
Open Visual Studio Code.
Maak een nieuw bestand met de naam main.bicep.
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 sjablonen maken om deze op te slaan in.
Als u een logische server en database wilt definiëren, voegt u de volgende inhoud toe aan het bestand, samen met de parameters en variabelen die deze resources nodig hebben. Voer de inhoud zelf in in plaats van te kopiëren en plakken, zodat u kunt zien hoe u met de hulpprogramma's uw Bicep-bestanden kunt schrijven.
@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 }
U ziet dat alle parameters decorators bevatten
@description
, waardoor ze gemakkelijker kunnen worden gebruikt. U ziet ook dat de decorator op desqlServerAdministratorLogin
parameterssqlServerAdministratorLoginPassword
is@secure
toegepast. Dit vertelt Bicep dat deze parameterwaarden gevoelig zijn. In Azure worden geen gevoelige waarden naar logboeken afgedrukt.
Een opslagaccount toevoegen
In de controle-instellingen voor de logische servers moet u een opslagaccount opgeven dat de controlegegevens bevat. U werkt uw Bicep-bestand bij om dit opslagaccount te maken, maar alleen wanneer controle wordt ingeschakeld.
Voeg onder de parameterdeclaraties de volgende parameters toe:
@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'
Voeg onder de declaraties van variabelen de volgende variabelen toe:
var auditingEnabled = environmentName == 'Production' var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
U maakt een variabele met de naam
auditingEnabled
, die u als voorwaarde gebruikt voor het implementeren van de controleresources. Wanneer u een variabele als deze maakt, maakt u uw Bicep-code duidelijker en gemakkelijker te lezen. Iedereen die de voorwaarden voor uw resources bekijkt, begrijpt wat er gebeurt.U ziet ook dat de
auditStorageAccountName
variabele gebruikmaakt van een functie die wordt aangeroepentake()
. Namen van opslagaccounts hebben een maximale lengte van 24 tekens, dus met deze functie wordt het einde van de tekenreeks afgekort om ervoor te zorgen dat de naam geldig is.Voeg onder aan het bestand, onder de resources, de volgende resourcedefinitie toe voor het opslagaccount:
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) { name: auditStorageAccountName location: location sku: { name: auditStorageAccountSkuName } kind: 'StorageV2' }
U ziet dat de definities voor het opslagaccount het
if
trefwoord bevatten, waarmee een implementatievoorwaarde wordt opgegeven.
Controle-instellingen toevoegen
Voeg onder de opslagaccountresource die u zojuist hebt toegevoegd het volgende toe:
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 : '' } }
U ziet dat de definitie dezelfde
if
voorwaarde bevat als het opslagaccount.storageEndpoint
De enstorageAccountAccessKey
eigenschappen gebruiken ook het vraagteken (?
) ternaire operator om ervoor te zorgen dat hun waarden altijd geldig zijn. Als u dit niet doet, evalueert Azure Resource Manager de expressiewaarden voordat deze de voorwaarde voor de resource-implementatie evalueert en een fout retourneert, omdat het opslagaccount niet kan worden gevonden.Sla de wijzigingen in het bestand op.
Uw Bicep-bestand controleren
Nadat u alle voorgaande wijzigingen hebt voltooid, moet uw Bicep-bestand er als volgt uitzien:
@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 : ''
}
}
Als dit niet het geval is, kopieert u het voorbeeld of past u de sjabloon aan zodat deze overeenkomt met het voorbeeld.
De Bicep-sjabloon implementeren in Azure
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 hebt geïnstalleerd en vergeet niet om u aan te melden met hetzelfde account dat u hebt gebruikt om de sandbox te activeren.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als de shell aan de rechterkant van het terminalvenster bash is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.
Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Azure Cloud Shell (Bash).
Selecteer bash in de lijst met terminalshells.
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
Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:
az login
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.
Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.
az account set --subscription "Concierge Subscription"
Notitie
Als u meer dan één sandbox onlangs hebt gebruikt, kan in de terminal meer dan één exemplaar van Concierge-abonnement worden weergegeven. In dit geval gebruikt u de volgende twee stappen om er een in te stellen als het standaardabonnement. Als de voorgaande opdracht is geslaagd en er slechts één Concierge-abonnement wordt weergegeven, slaat u de volgende twee stappen over.
Verkrijg de id’s van het Concierge-abonnement.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
Stel het standaardabonnement in met behulp van de abonnements-id. Vervang {uw abonnements-id} door de meest recente Concierge-abonnements-id.
az account set --subscription {your subscription ID}
De standaardresourcegroep instellen
Wanneer u de Azure CLI gebruikt, kunt u de standaardresourcegroep instellen en de parameter weglaten uit de rest van de Azure CLI-opdrachten in deze oefening. Stel de standaardinstelling in op de resourcegroep die voor u is gemaakt in de sandbox-omgeving.
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
De sjabloon implementeren in Azure met behulp van de Azure CLI
Implementeer in de Visual Studio Code-terminal de Bicep-sjabloon in Azure door de volgende code uit te voeren. U ziet dat u de location
parameter expliciet instelt op westus3
.
az deployment group create --template-file main.bicep --parameters location=westus3
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.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
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.
Als een andere shell dan powershell of pwsh wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.
Selecteer powershell of pwsh in de lijst met terminalshells.
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
Voer in de Visual Studio Code-terminal de volgende opdracht uit:
Connect-AzAccount
Er wordt een browser geopend, zodat u zich kunt aanmelden bij uw Azure-account.
Nadat u zich hebt aangemeld bij Azure, wordt in de terminal een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.
Als u de sandbox hebt geactiveerd, wordt een abonnement met de naam Concierge-abonnement weergegeven. Gebruik deze voor de rest van de oefening.
Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
Notitie
Als u meer dan één sandbox onlangs hebt gebruikt, kan in de terminal meer dan één exemplaar van Concierge-abonnement worden weergegeven. In dit geval gebruikt u de volgende twee stappen om er een in te stellen als het standaardabonnement. Als de voorgaande opdracht is geslaagd en er slechts één Concierge-abonnement wordt weergegeven, slaat u de volgende twee stappen over.
Verkrijg de abonnements-id. Als u de volgende opdracht uitvoert, worden uw abonnementen en hun id's vermeld.
Concierge Subscription
Zoek en kopieer de id uit de tweede kolom. Het ziet er ongeveer als volgt uit:cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0
.Get-AzSubscription
Wijzig uw actieve abonnement in Concierge-abonnement. Zorg ervoor dat u {Uw abonnements-id} vervangt door de id die u hebt gekopieerd.
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
De standaardresourcegroep instellen
U kunt de standaardresourcegroep instellen en de parameter weglaten uit de rest van de Azure PowerShell-opdrachten in deze oefening. Stel deze standaardinstelling in op de resourcegroep die voor u is gemaakt in de sandbox-omgeving.
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
De sjabloon implementeren in Azure met behulp van Azure PowerShell
Implementeer de sjabloon in de Visual Studio Code-terminal in Azure door de volgende Azure PowerShell-opdracht uit te voeren. Het kan enkele minuten duren voordat dit proces is voltooid. Vervolgens hebt u een geslaagde implementatie.
New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3
U wordt gevraagd de waarden voor sqlServerAdministratorLogin
en sqlServerAdministratorLoginPassword
parameters in te voeren wanneer u de implementatie uitvoert.
Tip
Wanneer u de beveiligde parameters invoert, moeten de waarden die u kiest, bepaalde regels volgen:
sqlServerAdministratorLogin
mag geen gemakkelijk te raden aanmeldingsnaam zijn, zoalsadmin
ofroot
. Deze mag alleen alfanumerieke tekens bevatten en moet beginnen met een letter.sqlServerAdministratorLoginPassword
moet ten minste acht tekens lang zijn en kleine letters, hoofdletters, cijfers en symbolen bevatten. Zie het SQL Azure-wachtwoordbeleid voor meer informatie over wachtwoordcomplexiteit.
Als de parameterwaarden niet voldoen aan de vereisten, implementeert Azure SQL uw logische server niet.
Let ook op de aanmelding en het wachtwoord dat u invoert. U gebruikt ze binnenkort opnieuw.
Omdat u geen waarde voor de environmentName
parameter hebt opgegeven, wordt de standaardwaarde Development
gebruikt.
Wacht tot de implementatie is voltooid. Als uw implementatie mislukt met een bericht dat een locatie het maken van nieuwe Windows Azure SQL Database-servers niet accepteert, selecteert u een andere regio, zoals eastus
of eastus2
.
De implementatie controleren
Gebruik Azure Portal om de resources te controleren die u implementeert en om de resultaten van elke implementatie te controleren.
Ga naar Azure Portal en zorg ervoor dat u zich in het sandbox-abonnement bevindt door het volgende te doen:
a. Selecteer uw avatar rechtsboven.
b. Selecteer Schakelen tussen directory's. In de lijst selecteert u de map Microsoft Learn Sandbox.Selecteer Resourcegroepen in het linkerdeelvenster.
Selecteer
[naam sandboxresourcegroep] .In de sectie Overzicht ziet u dat één implementatie is geslaagd. U kunt ook zien dat een logische server en een SQL-database zijn geïmplementeerd, maar het opslagaccount voor controle is niet geïmplementeerd.
Notitie
Het opslagaccount met een naam die begint met
cloudshell
de implementatie, is niet gerelateerd aan uw implementatie en is gemaakt door de Learn-sandbox.Selecteer naast Implementaties 1 Geslaagd om de implementatiedetails weer te geven.
Selecteer de implementatie met de naam Main om te zien welke resources zijn geïmplementeerd en selecteer vervolgens Implementatiedetails om deze uit te vouwen.
In dit geval worden één logische server en één SQL-database geïmplementeerd. U ziet dat het opslagaccount en de controle-instellingen zich niet in de lijst met resources bevinden.
Laat de pagina in uw browser open. U controleert de implementaties later opnieuw.
Opnieuw implementeren voor de productieomgeving
In de vorige implementatie werd de standaardwaarde voor de environmentName
parameter gebruikt, wat betekende dat deze is ingesteld op Development
.
Nu stelt u de parameterwaarde expliciet in op Production
. Als u deze wijziging aanbrengt, wordt het opslagaccount voor controledoeleinden geïmplementeerd en wordt controle ingeschakeld op de logische server.
De sjabloon voor de productieomgeving implementeren
Implementeer in de Visual Studio Code-terminal de Bicep-sjabloon in Azure door de volgende code uit te voeren:
az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3
Implementeer de sjabloon in de Visual Studio Code-terminal in Azure door de volgende Azure PowerShell-opdracht uit te voeren:
New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3
Let op
Zorg ervoor dat u dezelfde aanmelding en hetzelfde wachtwoord gebruikt als u eerder hebt gebruikt, anders wordt de implementatie niet voltooid.
Na enkele minuten moet de implementatie zijn voltooid.
De herployment controleren
Als u deze oefening wilt voltooien, controleert u of het opnieuw implementeren is voltooid en of de controle is ingeschakeld.
Ga terug naar Azure Portal en ga naar uw resourcegroep. Als u de resourcegroep al hebt geopend, selecteert u Vernieuwen.
U ziet dat er een extra opslagaccount is geïmplementeerd voor controledoeleinden.
Selecteer uw logische server (zoek de resource met het type SQL-server).
Voer controle in het zoekveld in. Selecteer Controle onder Beveiliging.
Controleer of controle is ingeschakeld voor deze logische server.