Latihan - Menambahkan skrip penyebaran ke templat ARM
Penting
Anda memerlukan langganan Azure Anda sendiri untuk menyelesaikan latihan ini, dan Anda mungkin dikenakan biaya. Jika Anda belum memiliki langganan Azure, buat akun gratis sebelum memulai.
Sebagai bagian dari proses penyebaran aplikasi tim Anda, Anda perlu membuat akun penyimpanan dan menggelar file di penyimpanan blob agar aplikasi dapat dibaca. Hingga saat ini, Anda telah menyalin file secara manual setiap kali lingkungan baru disiapkan. Anda memutuskan untuk menggunakan skrip penyebaran untuk mengotomatiskan langkah ini sebagai bagian dari proses pembuatan lingkungan Anda.
Dalam latihan ini, Anda mengambil templat Azure Resource Manager (ARM) yang sudah ada dan menambahkan skrip penyebaran baru.
Selama proses ini, Anda:
- Membuat templat awal.
- Tambahkan prasyarat untuk skrip penyebaran, termasuk identitas terkelola yang ditetapkan pengguna dan penetapan peran.
- Tambahkan skrip penyebaran.
- Sebarkan templat, dan verifikasi hasilnya.
Latihan ini menggunakan Alat Azure Resource Manager untuk Visual Studio Code. Pastikan untuk menginstal ekstensi ini di Visual Studio Code.
Latihan ini menggunakan ekstensi Bicep untuk Visual Studio Code. Pastikan untuk menginstal ekstensi ini di Visual Studio Code.
Membuat template memulai
Anda mulai dengan template yang sudah ada yang telah digunakan tim Anda. Templat membuat akun penyimpanan, mengatur layanan blob dan memerlukan HTTPS, serta membuat kontainer blob untuk file konfigurasi Anda.
Buka Visual Studio Code.
Buat file baru yang disebut azuredeploy.json.
Simpan file kosong agar Visual Studio Code dapat memuat peralatan templat ARM.
Anda dapat memilih Simpan File>Sebagai atau pilih Ctrl+S di Windows (⌘+S di macOS). Pastikan dan ingat di mana Anda menyimpan file. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpannya.
Salin templat awal berikut ke 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" } } ] }Simpan templat.
Buka Visual Studio Code.
Buat file baru yang disebut main.bicep.
Simpan file kosong sehingga Visual Studio Code dapat memuat alat Bicep.
Anda dapat memilih Simpan File>Sebagai atau pilih Ctrl+S di Windows (⌘+S di macOS). Pastikan untuk mengingat di mana Anda menyimpan file. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpannya.
Salin templat awal berikut ke 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' } }Simpan templat.
Tambahkan identitas terkelola yang ditetapkan pengguna
Selanjutnya, Anda membuat identitas terkelola yang ditetapkan pengguna. Menggunakan pendekatan infrastruktur sebagai kode, Anda dapat membuat identitas dalam templat.
Edit bagian
variablesazuredeploy.json untuk menyertakan:"userAssignedIdentityName": "configDeployer",Edit bagian
resourcesazuredeploy.json untuk menyertakan:{ "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[variables('userAssignedIdentityName')]", "location": "[resourceGroup().location]" }Simpan templat.
Di bawah definisi variabel di main.bicep, tambahkan:
var userAssignedIdentityName = 'configDeployer'Di bawah definisi sumber daya, tambahkan:
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }Simpan templat.
Atur peran kontributor untuk identitas terkelola
Sekarang setelah identitas terkelola ditentukan, Anda dapat menetapkan perannya dengan hak atas grup sumber daya. Tetapkan peran Kontributor. Anda mengidentifikasi peran dengan ID definisi perannya, yang merupakan GUID. Peran Kontributor dibangun ke dalam Azure sehingga ID definisi peran didokumenkan.
Penetapan peran juga membutuhkan nama GUID. Anda dapat menggunakan fungsi guid untuk membuat GUID yang unik untuk grup sumber daya dan nama peran.
Edit bagian
variablesazuredeploy.json untuk menyertakan:"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",Edit bagian
resourcesazuredeploy.json untuk menyertakan:{ "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" } }Simpan templat.
Di bawah definisi variabel di main.bicep, tambahkan:
var roleAssignmentName = guid(resourceGroup().id, 'contributor') var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')Di bawah definisi sumber daya, tambahkan:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { name: roleAssignmentName properties: { roleDefinitionId: contributorRoleDefinitionId principalId: userAssignedIdentity.properties.principalId principalType: 'ServicePrincipal' } }Simpan templat.
Buat skrip penyebaran
Sekarang, Anda memiliki semua prasyarat untuk skrip penyebaran. Anda mulai dengan nilai-nilai umum yang diperlukan oleh skrip penyebaran. Ada dua ketergantungan, penetapan peran dan kontainer penyimpanan blob. Skrip Anda memerlukan kedua dependensi ini agar ada sebelum dapat berjalan.
Edit bagian
variablesazuredeploy.json untuk menyertakan:"deploymentScriptName": "CopyConfigScript"Edit bagian
resourcesazuredeploy.json untuk menyertakan:{ "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'))]": {} } } }propertiesTambahkan bagian ke sumber daya yang menentukan skrip dan nilai lain yang diperlukan."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" }Simpan templat.
Di bawah definisi variabel di main.bicep, tambahkan:
var deploymentScriptName = 'CopyConfigScript'Di bawah definisi sumber daya, tambahkan:
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: deploymentScriptName location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '${userAssignedIdentity.id}': {} } } dependsOn: [ roleAssignment blobContainer ] }propertiesTambahkan bagian ke sumber daya yang menentukan skrip dan nilai lain yang diperlukan.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' }Simpan templat.
Tambahkan output templat
Sekarang, setelah Anda memiliki skrip penyebaran yang mengunggah file ke Azure Blob Storage, Anda mungkin perlu mereferensikan lokasi file tersebut di otomatisasi nanti. (Mungkin Anda menjalankan tes untuk memvalidasi bahwa file berada di tempat yang Anda pikir seharusnya.)
Setelah bagian resources templat ARM, tambahkan output yang merujuk URI untuk file seperti yang dilaporkan skrip penyebaran.
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
Di bagian bawah file, setelah definisi sumber daya, tambahkan output yang merujuk URI untuk file seperti yang dilaporkan skrip penyebaran.
output fileUri string = deploymentScript.properties.outputs.Uri
Verifikasi templat Anda
Templat Anda akan terlihat seperti ini:
{
"$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
Jika tidak, salin contoh atau sesuaikan templat Anda agar sesuai dengan contoh.
Menyebarkan templat
Untuk menyebarkan templat ini ke Azure, Anda harus masuk ke akun Azure Anda dari terminal Visual Studio Code. Pastikan Anda telah menginstal alat Azure CLI .
Pada menu Terminal , pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika jendela terminal menampilkan bash di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell bash di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.
Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat ke folder templat , Anda dapat menggunakan perintah ini:
cd templates
Masuk ke Azure menggunakan Azure CLI
Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:
az loginMasuk ke akun Azure Anda melalui browser yang terbuka.
Terminal Visual Studio Code menampilkan daftar langganan yang terkait dengan akun ini.
Dalam daftar, temukan langganan yang ingin Anda gunakan untuk latihan ini.
Jika Anda melewatkan daftar dari rincian masuk, Anda dapat menggunakan cuplikan berikut untuk mencantumkan langganan Anda lagi.
az account list --output tableTetapkan langganan default untuk semua perintah Azure CLI yang Anda jalankan dalam sesi ini.
az account set --subscription "Your Subscription Name or ID"
Untuk menyebarkan templat ini ke Azure, Anda harus masuk ke akun Azure Anda dari terminal Visual Studio Code. Pastikan Anda telah menginstal alat Azure CLI .
Pada menu Terminal , pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika jendela terminal menampilkan bash di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell bash di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.
Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat ke folder templat , Anda dapat menggunakan perintah ini:
cd templates
Menginstal Bisep
Jalankan perintah berikut untuk memastikan Anda memiliki Bicep versi terbaru:
az bicep install && az bicep upgrade
Masuk ke Azure menggunakan Azure CLI
Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:
az loginMasuk ke akun Azure Anda melalui browser yang terbuka.
Terminal Visual Studio Code menampilkan daftar langganan yang terkait dengan akun ini.
Dalam daftar, temukan langganan yang ingin Anda gunakan untuk latihan ini.
Jika Anda melewatkan daftar dari rincian masuk, Anda dapat menggunakan cuplikan berikut untuk mencantumkan langganan Anda lagi.
az account list --output tableTetapkan langganan default untuk semua perintah Azure CLI yang Anda jalankan dalam sesi ini.
az account set --subscription "Your Subscription Name or ID"
Untuk menyebarkan template ini ke Azure, masuk ke akun Azure dari terminal Visual Studio Code. Pastikan Anda telah menginstal Azure PowerShell, dan masuk ke akun yang sama yang mengaktifkan kotak pasir.
Pada menu Terminal , pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika jendela terminal menampilkan pwsh atau powershell di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell PowerShell di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.
Jika shell selain pwsh atau powershell muncul, pilih panah dropdown shell, lalu pilih PowerShell.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat di folder templat , Anda dapat menggunakan perintah ini:
Set-Location -Path templates
Masuk ke Azure menggunakan Azure PowerShell
Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:
Connect-AzAccountMasuk ke akun Azure Anda melalui browser yang terbuka.
Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:
Get-AzSubscriptionID langganan adalah kolom kedua. Salin kolom kedua. Ini terlihat seperti aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.
Tetapkan langganan default untuk semua perintah Microsoft Azure PowerShell yang dijalankan dalam sesi ini.
Set-AzContext -SubscriptionId {Your subscription ID}
Untuk menyebarkan template ini ke Azure, masuk ke akun Azure dari terminal Visual Studio Code. Pastikan Anda telah menginstal Azure PowerShell.
Pada menu Terminal , pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika jendela terminal menampilkan pwsh atau powershell di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell PowerShell di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.
Jika shell selain pwsh atau powershell muncul, pilih panah dropdown shell, lalu pilih PowerShell.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat di folder templat , Anda dapat menggunakan perintah ini:
Set-Location -Path templates
Menginstal Bicep CLI
Untuk menggunakan Bicep dari Azure PowerShell, instal Bicep CLI.
Masuk ke Azure menggunakan Azure PowerShell
Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:
Connect-AzAccountMasuk ke akun Azure Anda melalui browser yang terbuka.
Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:
Get-AzSubscriptionID langganan adalah kolom kedua. Salin kolom kedua. Ini terlihat seperti aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.
Tetapkan langganan default untuk semua perintah Microsoft Azure PowerShell yang dijalankan dalam sesi ini.
Set-AzContext -SubscriptionId {Your subscription ID}
Selanjutnya, Anda perlu membuat grup sumber daya untuk berisi sumber daya yang Anda buat sebagai bagian dari latihan ini. Dengan menggunakan grup sumber daya baru, membersihkan setelah latihan menjadi lebih mudah.
Dari terminal di Visual Studio Code, jalankan perintah ini untuk membuat grup sumber daya untuk latihan ini:
Membuat grup sumber daya untuk latihan
resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName
Catatan
Jika Anda menggunakan nama yang berbeda untuk grup sumber daya, Anda perlu memastikan Anda memperbarui skrip. Nanti dalam modul ini, Anda akan melihat cara menghindari penggunaan nama grup sumber daya yang sudah di-hardcode dalam skrip Anda.
Menyebarkan templat ke Azure
Kode berikut menyebarkan templat ARM ke Azure. Anda akan melihat penyebaran yang berhasil.
Menerapkan templat menggunakan perintah Azure CLI di terminal Visual Studio Code.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Kode berikut menyebarkan templat ARM ke Azure. Anda akan melihat penyebaran yang berhasil.
Menerapkan templat menggunakan perintah Azure CLI di terminal Visual Studio Code.
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today
az deployment group create \
--resource-group $resourceGroupName \
--name $deploymentName \
--template-file $templateFile
Kode berikut menyebarkan templat ke Azure. Anda akan melihat penyebaran yang berhasil.
Menyebarkan templat menggunakan perintah Azure PowerShell di terminal.
$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Kode berikut menyebarkan templat ke Azure. Anda akan melihat penyebaran yang berhasil.
Menyebarkan templat menggunakan perintah Azure PowerShell di terminal.
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Tinjau hasil templat Anda
Setelah penyebaran selesai, Anda akan diberikan URL yang menunjuk ke file yang disalin skrip penyebaran Anda ke penyimpanan blob.
Ambil file itu dengan menggunakan output URL dari penyebaran template untuk mengonfirmasi bahwa skrip penyebaran berfungsi dengan baik.
uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv) curl $uriPerintah ini mengembalikan kode berikut.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }Tinjau log dan detail lainnya tentang penyebaran dari portal Microsoft Azure. Atau, Anda dapat menggunakan perintah berikut.
az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
Ambil file itu dengan menggunakan output URL dari penyebaran template untuk mengonfirmasi bahwa skrip penyebaran berfungsi dengan baik.
$fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value Invoke-RestMethod $fileUriPerintah ini mengembalikan kode berikut.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}Tinjau log dan detail lainnya tentang penyebaran dari portal Microsoft Azure. Atau, Anda dapat menggunakan perintah berikut.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
Bersihkan grup sumber daya
Setelah berhasil menyebarkan templat ARM dengan skrip penyebaran, Anda dapat menghapus grup sumber daya yang berisi semua sumber daya dan penetapan peran yang Anda buat.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName