Latihan - Menambahkan skrip penyebaran ke templat ARM
Penting
Anda memerlukan langganan Azure Anda sendiri untuk menjalankan latihan ini, dan Anda mungkin dikenakan biaya. Jika Anda tidak 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 telah disiapkan. Anda memutuskan untuk menggunakan skrip penyebaran untuk mengotomatiskan langkah ini sebagai bagian dari proses pembuatan lingkungan Anda.
Dalam latihan ini, Anda akan mengambil templat Azure Resource Manager (ARM) yang sudah ada dan menambahkan skrip penyebaran baru.
Selama proses tersebut, Anda akan:
- 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 File>Simpan Sebagai atau pilih Ctrl+S untuk Windows (⌘+S untuk macOS). Pastikan Anda mengingat di mana Anda menyimpan file tersebut. 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": "2019-06-01", "tags": { "displayName": "[variables('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS", "tier": "Standard" }, "properties": { "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 File>Simpan Sebagai atau pilih Ctrl+S untuk Windows (⌘+S untuk macOS). Pastikan Anda mengingat di mana Anda menyimpan file tersebut. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpan file-nya.
Salin templat awal berikut ke main.bicep.
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}' var storageBlobContainerName = 'config' resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = { name: storageAccountName tags: { displayName: storageAccountName } location: resourceGroup().location kind: 'StorageV2' sku: { name: 'Standard_LRS' tier: 'Standard' } properties: { 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
variables
dari azuredeploy.json untuk menyertakan:"userAssignedIdentityName": "configDeployer",
Edit bagian
resources
dari azuredeploy.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. Anda akan menetapkannya peran Kontributor. Anda mengidentifikasi peran dengan ID definisi perannya, yang merupakan GUID. Peran Kontributor disertakan di Azure, sehingga ID definisi peran didokumentasikan.
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
variables
dari azuredeploy.json untuk menyertakan:"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
Edit bagian
resources
dari azuredeploy.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 akan mulai dengan nilai umum yang dibutuhkan skrip penyebaran. Ada dua ketergantungan, penetapan peran dan kontainer penyimpanan blob. Skrip Anda membutuhkan keduanya untuk ada sebelum dapat berjalan.
Edit bagian
variables
dari azuredeploy.json untuk menyertakan:"deploymentScriptName": "CopyConfigScript"
Edit bagian
resources
dari azuredeploy.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'))]": {} } } }
Tambahkan bagian
properties
ke sumber daya untuk 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 ] }
Tambahkan bagian
properties
ke sumber daya untuk 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 akan menjalankan tes untuk memvalidasi bahwa tempat file tersebut sudah sesuai.)
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": "2019-06-01",
"tags": {
"displayName": "[variables('storageAccountName')]"
},
"location": "[resourceGroup().location]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS",
"tier": "Standard"
},
"properties": {
"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@2019-06-01' = {
name: storageAccountName
tags: {
displayName: storageAccountName
}
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
properties: {
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 shell yang ditampilkan di sisi kanan jendela terminal adalah bash, shell yang benar terbuka dan Anda dapat melompat ke bagian berikutnya.
Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.
Dalam daftar shell terminal, pilih bash.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan template ke folder template, 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 login
Masuk 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 table
Tetapkan 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 shell yang ditampilkan di sisi kanan jendela terminal adalah bash, shell yang benar terbuka dan Anda dapat melompat ke bagian berikutnya.
Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.
Dalam daftar shell terminal, pilih bash.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan template ke folder template, 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 login
Masuk 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 table
Tetapkan 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 ko.
Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika shell yang ditampilkan di sisi kanan jendela terminal adalah powershell atau pwsh, shell yang benar terbuka, dan Anda dapat melompat ke bagian berikutnya.
Jika shell selain powershell atau pwsh muncul, pilih panah dropdown shell, lalu pilih PowerShell.
Dalam daftar shell terminal, pilih powershell atau pwsh.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpannya ke folder template, 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-AzAccount
Masuk ke akun Azure Anda melalui browser yang terbuka.
Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:
Get-AzSubscription
ID langganan adalah kolom kedua. Salin kolom kedua. Akan terlihat seperti cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.
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 Microsoft Azure PowerShell.
Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.
Jika shell yang ditampilkan di sisi kanan jendela terminal adalah powershell atau pwsh, shell yang benar terbuka, dan Anda dapat melompat ke bagian berikutnya.
Jika shell selain powershell atau pwsh muncul, pilih panah dropdown shell, lalu pilih PowerShell.
Dalam daftar shell terminal, pilih powershell atau pwsh.
Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpannya ke folder template, 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-AzAccount
Masuk ke akun Azure Anda melalui browser yang terbuka.
Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:
Get-AzSubscription
ID langganan adalah kolom kedua. Salin kolom kedua. Akan terlihat seperti cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.
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 menampung sumber daya yang akan Anda buat sebagai bagian dari latihan ini. Dengan menggunakan grup sumber daya baru, pembersihan setelah latihan menjadi jauh 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 harus memastikan anda memperbarui skrip. Nanti dalam modul ini, Anda akan melihat cara menghindari nama grup sumber daya hard-coding 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 $uri
Perintah ini mengembalikan kode berikut.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }
Anda juga dapat meninjau log (dan detail lain tentang penyebaran) dari portal Microsoft Azure, atau dengan 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 $fileUri
Perintah ini mengembalikan kode berikut.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}
Anda juga dapat meninjau log (dan detail lain tentang penyebaran) dari portal Microsoft Azure, atau dengan menggunakan baris 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 berisi semua sumber daya dan penetapan peran yang telah Anda buat.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName