Azure ストレージには静的な Web サイトの機能があり、静的コンテンツを Azure ストレージで公開する際に活用することができます。
この機能を Bicep で有効にしようとしたのですが、Bicep の定義として設定する機能が提供されていませんでした。
実施した対応としては Storage Account – Enable Static web site #10337 と同じですが、現状は deploymentSciprts で対応をする必要があるようですね。
Azure Portal から設定を有効化した場合の変更方法
Azure Portal から静的な Web サイトを有効にした場合、ストレージアカウントの BLOB サービスに対しての操作を行うことで、静的な Web サイトの有効化が行われています。
要求のペイロードとしては、次のようなペイロードを送信することで有効化が行われています。
<StorageServiceProperties> <StaticWebsite> <Enabled>true</Enabled> </StaticWebsite> </StorageServiceProperties>
Bicep を使用した静的な Web サイトの有効化
Bicep の定義については Microsoft.Storage storageAccounts から確認することができます。
現状、静的な Web サイトを有効化するためのプロパティは提供されておらず Microsoft.Storage/storageAccounts の設定として静的な Web サイトの有効化を行うことはできないようです。
2024/07 の投稿を書いている時点でも、deploymentScripts での対応が必要なのではないでしょうか。
deploymentScripts については、次のドキュメントで情報を確認することができます。
インラインスクリプトにより、Enable-AzStorageStaticWebsite を実行することでの展開の例としては次のような Bicep となります。
var location = resourceGroup().location var storageAccountName = 'st${uniqueString(resourceGroup().id)}' resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = { name: storageAccountName location: location kind: 'StorageV2' sku: { name: 'Standard_LRS' } properties: { publicNetworkAccess: 'Enabled' } } resource customScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = { name: 'customScript' location: location kind: 'AzurePowerShell' properties: { azPowerShellVersion: '12.0' environmentVariables: [ { name: 'storageAccountKey' secureValue: storage.listKeys().keys[0].value } ] arguments: '-storageAccountName ${storage.name}' scriptContent: ''' param($storageAccountName) $context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $ENV:storageAccountKey Enable-AzStorageStaticWebsite -Context $context ''' retentionInterval: 'PT1H' } }
ストレージの操作については、ストレージアカウントキーを使用することで対応ができますのでユーザーマネージド ID を使用せずにストレージアカウントキーを使用して有効化を実施していますが、secureValue を使用しているため、「コンテンツと入力」から確認できる情報としては、ストレージアカウントキーは表示されない状態になっているかと思います。
セキュリティ情報を隠蔽化するのであればユーザー割り当てマネージド ID の展開まで検討したほうが良いのでしょうね。
Bicep による展開を実施すると次のように静的な Web サイトが Azure ストレージで有効になった状態となっています。