演習 - モジュールを使用するようにテンプレートをリファクターする

完了

この演習では、Azure App Service リソースにモジュールを使用するように、前に作成した Bicep テンプレートを更新します。 モジュールは、メインテンプレートの意図を明確にするのに役立ちます。 他のテンプレートでは、App Service モジュールを再利用できます。

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

  • 新しいモジュールを追加し、App Service リソースをそこに移動します。
  • Main Bicep テンプレートからモジュールを参照します。
  • App Service アプリのホスト名の出力を追加し、モジュールとテンプレートのデプロイから出力します。
  • テンプレートが有効であることを確認するために、デプロイをテストします。

新しいモジュール ファイルを追加する

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

  2. 次のコンテンツを appService.bicep ファイルに追加します。

    param location string
    param appServiceAppName string
    
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    var appServicePlanName = 'toy-product-launch-plan'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    appService.bicep テンプレートは自己完結している必要があるため、main.bicep テンプレートからパラメーターと変数をコピーしたことに注意してください。

  3. 変更をファイルに保存します。 Visual Studio Code には、不足している変数、パラメーターがない、または無効なリソースに関する警告を示す赤い波線が表示されないことに注意してください。

親テンプレートからモジュールへの参照を追加する

App Service リソースをデプロイするモジュールが完成したので、親テンプレート内のモジュールを参照できます。 モジュールにより App Service リソースがデプロイされるので、関連付けられているリソースと変数を親テンプレートから削除できます。

  1. main.bicep ファイルで、App Service リソースと appServicePlanName および appServicePlanSkuName 変数の定義を削除します。 App Service のパラメーターは、まだ必要であるため、削除しないでください。 また、ストレージ アカウントのパラメーター、変数、リソースも削除しないでください。

  2. main.bicep ファイルの下部に、次の Bicep コードを追加します。

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    親テンプレートのパラメーターを参照することによって、モジュールのパラメーターを指定していることに注意してください。

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

ホスト名を出力として追加する

  1. appService.bicep ファイルの下部に、次の Bicep コードを追加します。

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    このコードは、appServiceAppHostName という名前のこのモジュールの出力が string 型であることを宣言しています。 出力は、App Service アプリの defaultHostName プロパティから値を取得します。

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

    この出力は、モジュールとして使用する Bicep ファイル内で宣言されているので、親テンプレートでのみ使用できます。 また、テンプレートをデプロイしたユーザーに出力を返す必要もあります。

  3. main.bicep ファイルを開き、ファイルの末尾に次のコードを追加します。

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    この出力は、モジュールの出力と同様の方法で宣言されていることに注意してください。 しかし今回は、リソース プロパティではなくモジュールの出力を参照しています。

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

Bicep ファイルを確認する

上記のすべての変更を完了すると、main.bicep ファイルは次の例のようになります。

param location string = 'westus3'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

module appService 'modules/appService.bicep' = {
  name: 'appService'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

output appServiceAppHostName string = appService.outputs.appServiceAppHostName

appService.bicep ファイルは次の例のようになります。

param location string
param appServiceAppName string

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

いずれかのファイルが例と一致しない場合は、例をコピーするか、例に合わせてテンプレートを調整してください。

更新された Bicep テンプレートをデプロイする

ターミナルで、次の Azure CLI コマンドを実行します。

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

ターミナルで、次の Azure PowerShell コマンドを実行します。

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

デプロイをチェックする

  1. ブラウザーで、Azure portal に移動します。 リソース グループに移動して、2 件の成功デプロイがあることを確認します。

  2. 成功した 2 つのリンクを選択します。 一覧に、main というデプロイと、appService という新しいデプロイが含まれることに注意してください。

    Screenshot of the Azure portal interface for the deployments, with the two deployments listed and succeeded statuses.

  3. main というデプロイを選択してから、[デプロイの詳細] を選択して、デプロイされたリソースの一覧を展開します。

    モジュールのデプロイが一覧に表示されるのでご注意ください。

    Screenshot of the Azure portal interface for the specific deployment, with one resource listed.

  4. [出力] タブを選択します。App Service アプリのホスト名を使用して、appServiceAppHostName という出力が表示されていることに注意してください。 ホスト名をクリップボードにコピーします。

    Screenshot of the Azure portal interface for the specific deployment's outputs.

  5. 新しいブラウザータブを開き、コピーしたホスト名を貼り付けます。 既定の App Service ウェルカム ページが表示されます。

    Screenshot of the default App Service welcome page.

おめでとうございます。 優れたアプリの基礎が正常にデプロイされました。