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

完了

これまでの 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@2021-11-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-11-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2021-11-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 リージョンに配置されていることを確認します。

    さまざまな場所の論理サーバーとデータベースのデプロイが示されている Azure portal のスクリーンショット。

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

    追加したリージョンに論理サーバーとデータベースがデプロイされていることを示す Azure portal のスクリーンショット。