演習 - ループを使用して複数のリソースをデプロイする

完了

これまでの Bicep テンプレートでは、運用環境のための監査設定が含まれる単一の Azure SQL 論理サーバーがデプロイされました。 ここでは、会社が新しいスマート テディ ベアを発売するリージョンごとに 1 つずつ、複数の論理サーバーをデプロイする必要があります。

この演習では、データベースのインスタンスを複数の Azure リージョンにデプロイできるよう、前に作成した Bicep コードを拡張します。

このプロセスでは、次のことを行います。

  • 既存の Bicep コードをモジュールに移動します。
  • モジュールのリソースを複数回デプロイするためのコピー ループが含まれる新しい Bicep ファイルを作成します。
  • Bicep ファイルをデプロイし、リソースのデプロイを確認します。
  • パラメーターを変更して場所を追加し、ファイルを再デプロイした後、新しいリソースがデプロイされていることを確認します。

リソースをモジュールに移動する

  1. Visual Studio Code で、 main.bicepファイルを作成したフォルダーにmodulesという名前の新しいフォルダーを作成します。

  2. main.bicep ファイルを、作成した modules フォルダーに移動します。

  3. main.bicep ファイルの名前を database.bicep に変更します。

コピー ループを使用して複数のインスタンスをデプロイする

  1. 新しい main.bicep ファイルを作成し、移動して名前を変更したファイルを置き換えます。

  2. 新しい 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
    
  3. パラメーター宣言の下に、次のモジュール宣言を追加します。

    module databases 'modules/database.bicep' = [for location in locations: {
      name: 'database-${location}'
      params: {
        location: location
        sqlServerAdministratorLogin: sqlServerAdministratorLogin
        sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }]
    

    モジュール宣言で、locations 配列パラメーターのすべての値がループ処理されることに注意してください。

  4. 変更をファイルに保存します。

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 リージョンに配置されていることを確認してください。

  1. Azure portal に移動し、サンドボックス サブスクリプション内にいることを確認します。

  2. [サンドボックス リソース グループ名] を選択します。

  3. 新しい論理サーバーとデータベースが、locations パラメーターの既定値で指定されている米国東部 2 リージョンに配置されていることを確認します。

    Screenshot of the Azure portal, showing the deployment of the logical servers and databases in various locations.

  4. ブラウザーでページを開いたままにします。 デプロイは後でもう一度確認します。

論理サーバーの場所を追加してテンプレートを更新し、Azure に再デプロイする

テディ ベアおもちゃチームは、今回はアジアで発売しようとしています。 チームから、東アジア リージョンに新しいサーバーとデータベースをデプロイするよう依頼されました。 これを行うには、Bicep パラメーターを更新し、テンプレートを再デプロイする必要があります。

  1. Visual Studio Code に戻ります。 main.bicep ファイルの先頭で、locations 配列に新しい値を追加します。

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. 変更をファイルに保存します。

  3. Visual Studio Code ターミナルで、次のコードを実行してファイルを再デプロイします。

    az deployment group create --template-file main.bicep
    
  1. Visual Studio Code に戻ります。 main.bicep ファイルの先頭で、locations 配列に新しい値を追加します。

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. 変更をファイルに保存します。

  3. Visual Studio Code ターミナルで、次のコードを実行してファイルを再デプロイします。

    New-AzResourceGroupDeployment -TemplateFile main.bicep
    

注意事項

前に使用したのと同じログインとパスワードを使用してください。そうしないと、デプロイが正常に完了しません。

デプロイが完了するのを待機します。

再デプロイを検証する

リソースを再デプロイしたので、追加の論理サーバーとデータベース リソースが東アジア リージョンに作成されていることを確認します。

  1. Azure portal に戻り、[サンドボックス リソース グループ名] リソース グループを選択します。 必要に応じて [最新の情報に更新] を選択し、新しくデプロイされたリソースを表示します。

  2. 新しい論理サーバーとデータベースが、東アジア リージョンにデプロイされていることを確認します。

    Screenshot of the Azure portal, showing the deployment of a logical server and database in an additional region.