演習 - モジュールを使用するようにテンプレートをリファクターする
この演習では、Azure App Service リソースにモジュールを使用するように、前に作成した Bicep テンプレートを更新します。 モジュールは、メインテンプレートの意図を明確にするのに役立ちます。 他のテンプレートでは、App Service モジュールを再利用できます。
このプロセスでは、次のことを行います。
- 新しいモジュールを追加し、App Service リソースをそこに移動します。
- Main Bicep テンプレートからモジュールを参照します。
- App Service アプリのホスト名の出力を追加し、モジュールとテンプレートのデプロイから出力します。
- テンプレートが有効であることを確認するために、デプロイをテストします。
新しいモジュール ファイルを追加する
Visual Studio Code で、 main.bicepファイルを作成したフォルダーにmodulesという名前の新しいフォルダーを作成します。 Modulesフォルダーに、appService.bicep という名前のファイルを作成します。 ファイルを保存します。
次のコンテンツを 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@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
appService.bicep テンプレートは自己完結している必要があるため、main.bicep テンプレートからパラメーターと変数をコピーしたことに注意してください。
変更をファイルに保存します。 Visual Studio Code には、不足している変数、パラメーターがない、または無効なリソースに関する警告を示す赤い波線が表示されないことに注意してください。
親テンプレートからモジュールへの参照を追加する
App Service リソースをデプロイするモジュールが完成したので、親テンプレート内のモジュールを参照できます。 モジュールにより App Service リソースがデプロイされるので、関連付けられているリソースと変数を親テンプレートから削除できます。
main.bicep ファイルで、App Service リソースと
appServicePlanName
およびappServicePlanSkuName
変数の定義を削除します。 App Service のパラメーターは、まだ必要であるため、削除しないでください。 また、ストレージ アカウントのパラメーター、変数、リソースも削除しないでください。main.bicep ファイルの下部に、次の Bicep コードを追加します。
module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName environmentType: environmentType } }
親テンプレートのパラメーターを参照することによって、モジュールのパラメーターを指定していることに注意してください。
変更をファイルに保存します。
ホスト名を出力として追加する
appService.bicep ファイルの下部に、次の Bicep コードを追加します。
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
このコードは、
appServiceAppHostName
という名前のこのモジュールの出力がstring
型であることを宣言しています。 出力は、App Service アプリのdefaultHostName
プロパティから値を取得します。変更をファイルに保存します。
この出力は、モジュールとして使用する Bicep ファイル内で宣言されているので、親テンプレートでのみ使用できます。 また、テンプレートをデプロイしたユーザーに出力を返す必要もあります。
main.bicep ファイルを開き、ファイルの末尾に次のコードを追加します。
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
この出力は、モジュールの出力と同様の方法で宣言されていることに注意してください。 しかし今回は、リソース プロパティではなくモジュールの出力を参照しています。
変更をファイルに保存します。
Bicep ファイルを確認する
上記のすべての変更を完了すると、main.bicep ファイルは次の例のようになります。
param location string = 'eastus'
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@2023-05-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@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-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
デプロイをチェックする
ブラウザーで、Azure portal に移動します。 リソース グループに移動すると、成功したデプロイが 2 件あります。
成功した 2 つのリンクを選択します。 一覧に、main というデプロイと、appService という新しいデプロイが含まれることに注意してください。
main というデプロイを選択してから、[デプロイの詳細] を選択して、デプロイされたリソースの一覧を展開します。
モジュールのデプロイが一覧に表示されるのでご注意ください。
[出力] タブを選択します。App Service アプリのホスト名を使用して、appServiceAppHostName という出力が表示されていることに注意してください。 ホスト名をクリップボードにコピーします。
新しいブラウザータブを開き、コピーしたホスト名を貼り付けます。 既定の App Service ウェルカム ページが表示されます。
おめでとうございます。 優れたアプリの基礎が正常にデプロイされました。