演習 - ループを使用して複数のリソースをデプロイする
これまでの Bicep テンプレートでは、運用環境のための監査設定が含まれる単一の Azure SQL 論理サーバーがデプロイされました。 ここでは、会社が新しいスマート テディ ベアを発売するリージョンごとに 1 つずつ、複数の論理サーバーをデプロイする必要があります。
この演習では、データベースのインスタンスを複数の Azure リージョンにデプロイできるよう、前に作成した Bicep コードを拡張します。
このプロセスでは、次のことを行います。
- 既存の Bicep コードをモジュールに移動します。
- モジュールのリソースを複数回デプロイするためのコピー ループが含まれる新しい Bicep ファイルを作成します。
- Bicep ファイルをデプロイし、リソースのデプロイを確認します。
- パラメーターを変更して場所を追加し、ファイルを再デプロイした後、新しいリソースがデプロイされていることを確認します。
リソースをモジュールに移動する
Visual Studio Code で、 main.bicepファイルを作成したフォルダーにmodulesという名前の新しいフォルダーを作成します。
main.bicep ファイルを、作成した modules フォルダーに移動します。
main.bicep ファイルの名前を database.bicep に変更します。
コピー ループを使用して複数のインスタンスをデプロイする
新しい main.bicep ファイルを作成し、移動して名前を変更したファイルを置き換えます。
新しい main.bicep ファイルを開き、次のパラメーターを追加します。
@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' ] @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
パラメーター宣言の下に、次のモジュール宣言を追加します。
module databases 'modules/database.bicep' = [for location in locations: { name: 'database-${location}' params: { location: location sqlServerAdministratorLogin: sqlServerAdministratorLogin sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword } }]
モジュール宣言で、
locations
配列パラメーターのすべての値がループ処理されることに注意してください。変更をファイルに保存します。
Bicep ファイルを確認する
上記のすべての変更を完了すると、main.bicep ファイルは次の例のようになります。
@description('The Azure regions into which the resources should be deployed.')
param locations array = [
'westeurope'
'eastus2'
]
@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
module databases 'modules/database.bicep' = [for location in locations: {
name: 'database-${location}'
params: {
location: location
sqlServerAdministratorLogin: sqlServerAdministratorLogin
sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
}
}]
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 : ''
}
}
そうでない場合は、例をコピーするか、例に合わせてテンプレートを調整します。
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 リージョンに配置されていることを確認してください。
Azure portal に移動し、サンドボックス サブスクリプション内にいることを確認します。
[サンドボックス リソース グループ名] を選択します。新しい論理サーバーとデータベースが、
locations
パラメーターの既定値で指定されている米国東部 2 リージョンに配置されていることを確認します。ブラウザーでページを開いたままにします。 デプロイは後でもう一度確認します。
論理サーバーの場所を追加してテンプレートを更新し、Azure に再デプロイする
テディ ベアおもちゃチームは、今回はアジアで発売しようとしています。 チームから、東アジア リージョンに新しいサーバーとデータベースをデプロイするよう依頼されました。 これを行うには、Bicep パラメーターを更新し、テンプレートを再デプロイする必要があります。
Visual Studio Code に戻ります。 main.bicep ファイルの先頭で、
locations
配列に新しい値を追加します。@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' 'eastasia' ]
変更をファイルに保存します。
Visual Studio Code ターミナルで、次のコードを実行してファイルを再デプロイします。
az deployment group create --template-file main.bicep
Visual Studio Code に戻ります。 main.bicep ファイルの先頭で、
locations
配列に新しい値を追加します。@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' 'eastasia' ]
変更をファイルに保存します。
Visual Studio Code ターミナルで、次のコードを実行してファイルを再デプロイします。
New-AzResourceGroupDeployment -TemplateFile main.bicep
注意事項
前に使用したのと同じログインとパスワードを使用してください。そうしないと、デプロイが正常に完了しません。
デプロイが完了するのを待機します。
再デプロイを検証する
リソースを再デプロイしたので、追加の論理サーバーとデータベース リソースが東アジア リージョンに作成されていることを確認します。
Azure portal に戻り、
[サンドボックス リソース グループ名] リソース グループを選択します。 必要に応じて [最新の情報に更新] を選択し、新しくデプロイされたリソースを表示します。新しい論理サーバーとデータベースが、東アジア リージョンにデプロイされていることを確認します。