演習 - 変数ループと出力ループを使用する
その玩具会社では、テディ ベアを発売する各国/地域に仮想ネットワークをデプロイする必要があります。 開発者は、デプロイした各リージョンの Azure SQL 論理サーバーの完全修飾ドメイン名 (FQDN) を提供することも求めています。
この演習では、仮想ネットワークとその構成を Bicep コードに追加し、論理サーバーの FQDN を出力します。
このプロセスでは、次のことを行います。
- Bicep コードを更新して、各仮想ネットワークのサブネットのパラメーターを指定します。
- 変数ループを追加してサブネット配列を作成し、仮想ネットワークのリソース宣言でそれを使用します。
- 出力ループを追加し、論理サーバーの FQDN のリストを作成します。
- Bicep ファイルをデプロイして、デプロイを確認します。
仮想ネットワークを Bicep ファイルに追加する
main.bicep ファイルを開きます。
パラメーター宣言の下に、次のパラメーターを追加します。
@description('The IP address range for all virtual networks to use.') param virtualNetworkAddressPrefix string = '10.10.0.0/16' @description('The name and IP address range for each subnet in the virtual networks.') param subnets array = [ { name: 'frontend' ipAddressRange: '10.10.5.0/24' } { name: 'backend' ipAddressRange: '10.10.10.0/24' } ]
パラメーターの下に空白行を追加し、
subnetProperties
変数ループを追加します。var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
ファイルの末尾にある
databases
モジュール ループの下に、次のリソース ループを追加します。resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: { name: 'teddybear-${location}' location: location properties:{ addressSpace:{ addressPrefixes:[ virtualNetworkAddressPrefix ] } subnets: subnetProperties } }]
注意
この例では、すべての仮想ネットワークに同じアドレス空間を使用します。 通常、複数の仮想ネットワークを作成するとき、それらを一緒に接続することが必要になる場合は異なるアドレス空間を指定します。
変更をファイルに保存します。
データベース モジュールに出力を追加する
modules/database.bicep ファイルを開きます。
ファイルの末尾に次の出力を追加します。
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
変更をファイルに保存します。
親 Bicep ファイルを通して出力を渡す
main.bicep ファイルを開きます。
ファイルの末尾に次の出力ループを追加します。
output serverInfo array = [for i in range(0, length(locations)): { name: databases[i].outputs.serverName location: databases[i].outputs.location fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName }]
変更をファイルに保存します。
Bicep ファイルを確認する
上記のすべての変更を完了すると、main.bicep ファイルは次の例のようになります。
@description('The Azure regions into which the resources should be deployed.')
param locations array = [
'westeurope'
'eastus2'
'eastasia'
]
@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 IP address range for all virtual networks to use.')
param virtualNetworkAddressPrefix string = '10.10.0.0/16'
@description('The name and IP address range for each subnet in the virtual networks.')
param subnets array = [
{
name: 'frontend'
ipAddressRange: '10.10.5.0/24'
}
{
name: 'backend'
ipAddressRange: '10.10.10.0/24'
}
]
var subnetProperties = [for subnet in subnets: {
name: subnet.name
properties: {
addressPrefix: subnet.ipAddressRange
}
}]
module databases 'modules/database.bicep' = [for location in locations: {
name: 'database-${location}'
params: {
location: location
sqlServerAdministratorLogin: sqlServerAdministratorLogin
sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
}
}]
resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: {
name: 'teddybear-${location}'
location: location
properties:{
addressSpace:{
addressPrefixes:[
virtualNetworkAddressPrefix
]
}
subnets: subnetProperties
}
}]
output serverInfo array = [for i in range(0, length(locations)): {
name: databases[i].outputs.serverName
location: databases[i].outputs.location
fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName
}]
database.bicep ファイルは次の例のようになります。
@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 : ''
}
}
output serverName string = sqlServer.name
output location string = location
output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
そうでない場合は、例をコピーするか、例に合わせてテンプレートを調整します。
Bicep テンプレートを Azure にデプロイする
Visual Studio Code ターミナルで、次のコードを実行して Bicep テンプレートを Azure にデプロイします。 このプロセスが完了するには数分かかる場合があり、その後でデプロイが成功します。
az deployment group create --template-file main.bicep
Visual Studio Code ターミナルで次の Azure PowerShell コマンドを実行して、Bicep テンプレートを Azure にデプロイします。 このプロセスが完了するには数分かかる場合があり、その後でデプロイが成功します。
New-AzResourceGroupDeployment -TemplateFile main.bicep
注意事項
前に使用したのと同じログインとパスワードを使用してください。そうしないと、デプロイが正常に完了しません。
デプロイが完了するのを待機します。
デプロイを検証する
デプロイが完了したら、新しい仮想ネットワークがデプロイされたこと、および意図したようにサブネットが構成されていることを確認します。
Azure portal に移動し、サンドボックス サブスクリプション内にいることを確認します。
[サンドボックス リソース グループ名] を選択します。仮想ネットワークが 3 つの Azure の場所にデプロイされていることを確認します。
teddybear-eastasia
という名前の仮想ネットワークを選択します。検索バーに「サブネット」と入力します。 [設定] で、 [サブネット] を選択します。
デプロイされたサブネットの名前と IP アドレスが、
subnets
パラメーターの既定値で指定されているものになっていることを確認します。デプロイ コマンドの出力を確認します。 次に示すように、デプロイされた 3 つの論理サーバーすべての名前と FQDN が含まれている必要があります。
Azure portal に移動し、サンドボックス サブスクリプション内にいることを確認します。
[サンドボックス リソース グループ名] を選択します。仮想ネットワークが 3 つの Azure の場所にデプロイされていることを確認します。
teddybear-eastasia
という名前の仮想ネットワークを選択します。検索バーに「サブネット」と入力します。 [設定] で、 [サブネット] を選択します。
デプロイされたサブネットの名前と IP アドレスが、
subnets
パラメーターの既定値で指定されているものになっていることを確認します。デプロイ コマンドの出力を確認します。 次に示すように、デプロイされた 3 つの論理サーバーすべての名前と FQDN が含まれている必要があります。