Oefening: een implementatiescript toevoegen aan een ARM-sjabloon
Belangrijk
U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Als onderdeel van het implementatieproces van uw team moet u een opslagaccount maken en een bestand in blobopslag fasen om de toepassing te kunnen lezen. Tot nu toe hebt u het bestand handmatig gekopieerd telkens wanneer er een nieuwe omgeving is ingesteld. U besluit een implementatiescript te gebruiken om deze stap te automatiseren als onderdeel van het proces voor het maken van uw omgeving.
In deze oefening gebruikt u een bestaande ARM-sjabloon (Azure Resource Manager) en voegt u een nieuw implementatiescript toe.
Tijdens het proces gaat u het volgende doen:
- Maak een beginsjabloon.
- Voeg de vereisten toe voor implementatiescripts, inclusief een door de gebruiker toegewezen beheerde identiteit en roltoewijzing.
- Voeg een implementatiescript toe.
- Implementeer de sjabloon en controleer het resultaat.
De oefening gebruikt de Azure Resource Manager Tools for Visual Studio Code. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.
In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.
De beginsjabloon maken
U begint met een bestaande sjabloon die uw team heeft gebruikt. De sjabloon maakt het opslagaccount, stelt blobservices in en vereist HTTPS en maakt de blobcontainer voor uw configuratiebestanden.
Open Visual Studio Code.
Maak een nieuw bestand met de naam azuredeploy.json.
Sla het lege bestand op zodat Visual Studio Code de ARM-sjabloonhulpprogramma's laadt.
U kunt Bestand> selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met scripts maken waarin u deze wilt opslaan.
Kopieer de volgende beginsjabloon naar azuredeploy.json.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.1", "apiProfile": "", "parameters": {}, "variables": { "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]", "storageBlobContainerName": "config" }, "functions": [], "resources": [ { "name": "[variables('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-01-01", "tags": { "displayName": "[variables('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS", "tier": "Standard" }, "properties": { "allowBlobPublicAccess": true, "encryption": { "services": { "blob": { "enabled": true } }, "keySource": "Microsoft.Storage" }, "supportsHttpsTrafficOnly": true } }, { "type": "Microsoft.Storage/storageAccounts/blobServices", "apiVersion": "2019-04-01", "name": "[concat(variables('storageAccountName'), '/default')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]" ] }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-04-01", "name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]" ], "properties": { "publicAccess": "Blob" } } ] }
Sla de sjabloon op.
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> selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met scripts maken om deze op te slaan in.
Kopieer de volgende beginsjabloon naar main.bicep.
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}' var storageBlobContainerName = 'config' resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = { name: storageAccountName tags: { displayName: storageAccountName } location: resourceGroup().location kind: 'StorageV2' sku: { name: 'Standard_LRS' tier: 'Standard' } properties: { allowBlobPublicAccess: true encryption: { services: { blob: { enabled: true } } keySource: 'Microsoft.Storage' } supportsHttpsTrafficOnly: true } resource blobService 'blobServices' existing = { name: 'default' } } resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = { parent: storageAccount::blobService name: storageBlobContainerName properties: { publicAccess: 'Blob' } }
Sla de sjabloon op.
Een door de gebruiker toegewezen beheerde identiteit toevoegen
Vervolgens moet u een door de gebruiker toegewezen beheerde identiteit maken. Gezien de benadering van infrastructuur als code kunt u de identiteit in de sjabloon maken.
Bewerk de
variables
sectie van azuredeploy.json om het volgende op te nemen:"userAssignedIdentityName": "configDeployer",
Bewerk de
resources
sectie van azuredeploy.json om het volgende op te nemen:{ "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[variables('userAssignedIdentityName')]", "location": "[resourceGroup().location]" }
Sla de sjabloon op.
Voeg onder de variabeledefinities in main.bicep het volgende toe:
var userAssignedIdentityName = 'configDeployer'
Voeg onder de resourcedefinities het volgende toe:
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }
Sla de sjabloon op.
De rol inzender voor de beheerde identiteit instellen
Nu u een beheerde identiteit hebt gedefinieerd, kunt u deze een rol toewijzen met rechten voor de resourcegroep. U wijst deze toe aan de rol Inzender. U identificeert een rol op basis van de id van de roldefinitie, een GUID. De rol Inzender is ingebouwd in Azure, zodat de roldefinitie-id wordt gedocumenteerd.
De roltoewijzing heeft ook een GUID-naam nodig. U kunt de guid
functie gebruiken om een GUID te maken die uniek is voor de resourcegroep en de rolnaam.
Bewerk de
variables
sectie van azuredeploy.json om het volgende op te nemen:"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
Bewerk de
resources
sectie van azuredeploy.json om het volgende op te nemen:{ "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2020-04-01-preview", "name": "[variables('roleAssignmentName')]", "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ], "properties": { "roleDefinitionId": "[variables('contributorRoleDefinitionId')]", "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]", "scope": "[resourceGroup().id]", "principalType": "ServicePrincipal" } }
Sla de sjabloon op.
Voeg onder de variabeledefinities in main.bicep het volgende toe:
var roleAssignmentName = guid(resourceGroup().id, 'contributor') var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
Voeg onder de resourcedefinities het volgende toe:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { name: roleAssignmentName properties: { roleDefinitionId: contributorRoleDefinitionId principalId: userAssignedIdentity.properties.principalId principalType: 'ServicePrincipal' } }
Sla de sjabloon op.
Het implementatiescript maken
U hebt nu alle vereisten voor het implementatiescript. U begint met de algemene waarden die het implementatiescript nodig heeft. Er zijn twee afhankelijkheden, de roltoewijzing en de blobopslagcontainer. Voor uw script moeten beide bestaan voordat het kan worden uitgevoerd.
Bewerk de
variables
sectie van azuredeploy.json om het volgende op te nemen:"deploymentScriptName": "CopyConfigScript"
Bewerk de
resources
sectie van azuredeploy.json om het volgende op te nemen:{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2020-10-01", "name": "[variables('deploymentScriptName')]", "location": "[resourceGroup().location]", "kind": "AzurePowerShell", "dependsOn": [ "[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]", "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]" ], "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {} } } }
Voeg een
properties
sectie toe aan de resource om het script en de andere vereiste waarden te definiëren."properties": { "azPowerShellVersion": "3.0", "scriptContent": " Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json' $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' } $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context $DeploymentScriptOutputs = @{} $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri ", "retentionInterval": "P1D" }
Sla de sjabloon op.
Voeg onder de variabeledefinities in main.bicep het volgende toe:
var deploymentScriptName = 'CopyConfigScript'
Voeg onder de resourcedefinities het volgende toe:
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: deploymentScriptName location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '${userAssignedIdentity.id}': {} } } dependsOn: [ roleAssignment blobContainer ] }
Voeg een
properties
sectie toe aan de resource om het script en de andere vereiste waarden te definiëren.properties: { azPowerShellVersion: '3.0' scriptContent: ''' Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json' $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' } $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context $DeploymentScriptOutputs = @{} $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri ''' retentionInterval: 'P1D' }
Sla de sjabloon op.
Een sjabloonuitvoer toevoegen
Nu u een implementatiescript hebt dat een bestand uploadt naar Azure Blob Storage, moet u mogelijk verwijzen naar die bestandslocatie in latere automatisering. (Misschien voert u een test uit om te controleren of het bestand waar u denkt dat het moet zijn.)
Voeg na de resources
sectie van de ARM-sjabloon een uitvoer toe die verwijst naar de URI voor het bestand, zoals gerapporteerd door het implementatiescript.
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
Voeg onder aan het bestand, na de resourcedefinities, een uitvoer toe die verwijst naar de URI voor het bestand, zoals gerapporteerd door het implementatiescript.
output fileUri string = deploymentScript.properties.outputs.Uri
Uw sjabloon controleren
Uw sjabloon moet er als volgt uitzien:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"apiProfile": "",
"parameters": {},
"variables": {
"storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]",
"storageBlobContainerName": "config",
"userAssignedIdentityName": "configDeployer",
"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
"contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"deploymentScriptName": "CopyConfigScript"
},
"functions": [],
"resources": [
{
"name": "[variables('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"tags": {
"displayName": "[variables('storageAccountName')]"
},
"location": "[resourceGroup().location]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS",
"tier": "Standard"
},
"properties": {
"allowBlobPublicAccess": true,
"encryption": {
"services": {
"blob": {
"enabled": true
}
},
"keySource": "Microsoft.Storage"
},
"supportsHttpsTrafficOnly": true
}
},
{
"type": "Microsoft.Storage/storageAccounts/blobServices",
"apiVersion": "2019-04-01",
"name": "[concat(variables('storageAccountName'), '/default')]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.Storage/storageAccounts/blobServices/containers",
"apiVersion": "2019-04-01",
"name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
],
"properties": {
"publicAccess": "Blob"
}
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2018-11-30",
"name": "[variables('userAssignedIdentityName')]",
"location": "[resourceGroup().location]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[variables('roleAssignmentName')]",
"dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ],
"properties": {
"roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]",
"scope": "[resourceGroup().id]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "[variables('deploymentScriptName')]",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"dependsOn": [
"[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]",
"[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]"
],
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {}
}
},
"properties": {
"azPowerShellVersion": "3.0",
"scriptContent": "
Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
$blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
$DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
}
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
var storageBlobContainerName = 'config'
var userAssignedIdentityName = 'configDeployer'
var roleAssignmentName = guid(resourceGroup().id, 'contributor')
var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
var deploymentScriptName = 'CopyConfigScript'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
tags: {
displayName: storageAccountName
}
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
properties: {
allowBlobPublicAccess: true
encryption: {
services: {
blob: {
enabled: true
}
}
keySource: 'Microsoft.Storage'
}
supportsHttpsTrafficOnly: true
}
resource blobService 'blobServices' existing = {
name: 'default'
}
}
resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = {
parent: storageAccount::blobService
name: storageBlobContainerName
properties: {
publicAccess: 'Blob'
}
}
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: userAssignedIdentityName
location: resourceGroup().location
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
name: roleAssignmentName
properties: {
roleDefinitionId: contributorRoleDefinitionId
principalId: userAssignedIdentity.properties.principalId
principalType: 'ServicePrincipal'
}
}
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: deploymentScriptName
location: resourceGroup().location
kind: 'AzurePowerShell'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${userAssignedIdentity.id}': {}
}
}
properties: {
azPowerShellVersion: '3.0'
scriptContent: '''
Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
$blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
$DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
'''
retentionInterval: 'P1D'
}
dependsOn: [
roleAssignment
blobContainer
]
}
output fileUri string = deploymentScript.properties.outputs.Uri
Als dit niet het geval is, kopieert u het voorbeeld of past u de sjabloon aan zodat deze overeenkomt met het voorbeeld.
De sjabloon implementeren
Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI-hulpprogramma's hebt geïnstalleerd.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster bash aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u ook een bash-shellpictogram aan de rechterkant ziet, kunt u deze selecteren om de shell te starten.
Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Git Bash.
Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:
cd templates
Aanmelden bij Azure met behulp van Azure CLI
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.
Zoek in de lijst het abonnement dat u voor deze oefening wilt gebruiken.
Als u de lijst uit de aanmelding hebt gemist, kunt u het volgende fragment gebruiken om uw abonnementen opnieuw weer te geven.
az account list --output table
Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.
az account set --subscription "Your Subscription Name or ID"
Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI-hulpprogramma's hebt geïnstalleerd.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster bash aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u ook een bash-shellpictogram aan de rechterkant ziet, kunt u deze selecteren om de shell te starten.
Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Git Bash.
Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:
cd templates
Bicep installeren
Voer de volgende opdracht uit om te controleren of u de nieuwste versie van Bicep hebt:
az bicep install && az bicep upgrade
Aanmelden bij Azure met behulp van Azure CLI
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.
Zoek in de lijst het abonnement dat u voor deze oefening wilt gebruiken.
Als u de lijst uit de aanmelding hebt gemist, kunt u het volgende fragment gebruiken om uw abonnementen opnieuw weer te geven.
az account list --output table
Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.
az account set --subscription "Your Subscription Name or ID"
Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd en meld u aan bij hetzelfde account dat de sandbox heeft geactiveerd.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster pwsh of powershell aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u aan de rechterkant een PowerShell-shellpictogram ziet, kunt u deze optie selecteren om de shell te starten.
Als een andere shell dan pwsh of powershell wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.
Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:
Set-Location -Path templates
Aanmelden bij Azure met behulp van Azure PowerShell
Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:
Connect-AzAccount
Meld u aan bij uw Azure-account in de browser die wordt geopend.
Haal de id op van het abonnement dat u voor deze oefening wilt gebruiken door de volgende opdracht uit te voeren:
Get-AzSubscription
De abonnements-id is de tweede kolom. Kopieer de tweede kolom. Het ziet er ongeveer uit als aaaa0a0a-bb1b-cc2c-dd3d-eeeee4e4e4e4e.
Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.
Set-AzContext -SubscriptionId {Your subscription ID}
Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster pwsh of powershell aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u aan de rechterkant een PowerShell-shellpictogram ziet, kunt u deze optie selecteren om de shell te starten.
Als een andere shell dan pwsh of powershell wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.
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
Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:
Connect-AzAccount
Meld u aan bij uw Azure-account in de browser die wordt geopend.
Haal de id op van het abonnement dat u voor deze oefening wilt gebruiken door de volgende opdracht uit te voeren:
Get-AzSubscription
De abonnements-id is de tweede kolom. Kopieer de tweede kolom. Het ziet er ongeveer uit als aaaa0a0a-bb1b-cc2c-dd3d-eeeee4e4e4e4e.
Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.
Set-AzContext -SubscriptionId {Your subscription ID}
Vervolgens moet u een resourcegroep maken die de resources bevat die u gaat maken als onderdeel van deze oefening. Door een nieuwe resourcegroep te gebruiken, maakt u het opschonen na de oefening veel eenvoudiger.
Voer vanuit de terminal in Visual Studio Code deze opdracht uit om de resourcegroep voor deze oefening te maken:
Een resourcegroep maken voor de oefening
resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName
Notitie
Als u een andere naam voor uw resourcegroep gebruikt, moet u ervoor zorgen dat u het script bijwerkt. Verderop in deze module ziet u hoe u hardcoderingsresourcegroepnamen in uw scripts kunt voorkomen.
De sjabloon implementeren in Azure
Met de volgende code wordt de ARM-sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.
Implementeer de sjabloon met behulp van Azure CLI-opdrachten in de Visual Studio Code-terminal.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Met de volgende code wordt de ARM-sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.
Implementeer de sjabloon met behulp van Azure CLI-opdrachten in de Visual Studio Code-terminal.
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Met de volgende code wordt de sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.
Implementeer de sjabloon met behulp van Azure PowerShell-opdrachten in de terminal.
$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Met de volgende code wordt de sjabloon geïmplementeerd in Azure. U ziet een geslaagde implementatie.
Implementeer de sjabloon met behulp van Azure PowerShell-opdrachten in de terminal.
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Bekijk het resultaat van uw sjabloon
Nadat de implementatie is voltooid, krijgt u een URL die verwijst naar het bestand dat uw implementatiescript naar blobopslag heeft gekopieerd.
Haal dat bestand op met behulp van de URL-uitvoer van de sjabloonimplementatie om te bevestigen dat het implementatiescript correct werkte.
uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv) curl $uri
De opdracht retourneert de volgende code.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }
U kunt ook de logboeken (en andere details over de implementatie) bekijken vanuit Azure Portal of met behulp van de volgende opdracht.
az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
Haal dat bestand op met behulp van de URL-uitvoer van de sjabloonimplementatie om te bevestigen dat het implementatiescript correct werkte.
$fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value Invoke-RestMethod $fileUri
De opdracht retourneert de volgende code.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}
U kunt ook de logboeken (en andere details over de implementatie) bekijken vanuit Azure Portal of met behulp van de volgende opdrachtregel.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
De resourcegroep opschonen
Nu u een ARM-sjabloon met een implementatiescript hebt geïmplementeerd, kunt u de resourcegroep verwijderen die alle resources en roltoewijzingen bevat die u hebt gemaakt.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName