bicepparamファイルを試してAzureFunctionsの環境変数を設定したメモ

## 概要
bicepparam形式でパラメータファイルを設定したメモ。
[ソースコード](https://github.com/hibohiboo/async-ttrpg/blob/1094da326ea4f132379672f2abfe798c84b23a8d/infra/biceps/main.bicepparam)

## ソースコード

```diff:infra/biceps/core/host/functions.bicep
+ param functionEnvironments array 

// 省略
resource functionApp 'Microsoft.Web/sites@2022-09-01' = {
  name: functionAppName
  location: location
  kind: kind
  properties: {
    reserved: true
    siteConfig: {
      cors: {
        allowedOrigins: [staticSites_my_first_static_web_app_name_resource.properties.defaultHostname]
      }
      linuxFxVersion: linuxFxVersion
      appSettings: [
      // 省略
        {
          name:'CONNECTION_STRING'
          value: connectionString
        }
+        ...functionEnvironments
      ]
    }
  }
}
```
[Bicep のスプレッド演算子][*4]  

```diff:minfra/biceps/main.bicep
param location string = resourceGroup().location
param keyVaultName string
@description('The runtime version of the Azure Functions app.')
param functionsRuntime object
+ param functionEnvironments array 
param staticSites_pl_static_web_app_name string

// 省略

module myFunctions 'core/host/functions.bicep' = {
  name: 'myFunctions'
  params: {
    location: location
    staticSites_pl_static_web_app_name: staticSites_pl_static_web_app_name
    databaseUrl: keyVault.getSecret('AsyncTrpgDatabaseURL')
    storageAccountName: storageAccountName
    kind: functionsRuntime.kind
    runtime: functionsRuntime.runtime
    linuxFxVersion: functionsRuntime.linuxFxVersion
    applicationInsightsInstrumentationKey: myFunctionsApplicationInsights.outputs.applicationInsightsInstrumentationKey
    extensionVersion: functionsRuntime.extensionVersion
    connectionString: keyVault.getSecret('AsyncTrpgConnectionString')
+    functionEnvironments: functionEnvironments
  }
}
```

```bicep:infra/bicep/main.bicepparam
using 'main.bicep'

param functionsRuntime = {
  runtime: 'node'
  linuxFxVersion: 'Node|20'
  kind: 'functionapp,linux'
  extensionVersion: '~4'
}
param staticSites_pl_static_web_app_name = readEnvironmentVariable('PL_STATIC_WEB_APP_NAME','')
param keyVaultName = readEnvironmentVariable('KEY_VAULT_NAME','')
param functionEnvironments = [
  {
    name: 'HOGE'
    value: 'hoge'
  }
]
```

[readEnvironmentVariable][*3]から環境変数を取得しようとしたがうまく行かなかった。「変数の読み込みは、実行時ではなくコンパイル中に発生します。」の一文が気になる。どの環境の環境変数を参照しているのか。。。

```bash:infra/bin/createFunctions.bash
#!/bin/bash

BIN_DIR=$(cd $(dirname $0) && pwd)
source $BIN_DIR/common.bash

cd $BICEP_DIR && az deployment group create \
  --name functionsDeployment \
  --template-file main.bicep \
  --parameters main.bicepparam \
  --parameters \
    keyVaultName=$KEY_VAULT_NAME \
    staticSites_pl_static_web_app_name=$PL_STATIC_WEB_APP_NAME \
  -g $RESOURCE_GROUP_NAME
```

[パラメータの説明][*1]より、あとに設定したパラメータが優先される。


## 過去のBicep記事

[Azure Functions の Bicep を node linux構成でできるだけシンプルに書いてみたメモ](https://qiita.com/hibohiboo/items/6a49ed68e6560594278b)
[Bicep デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡したメモ](https://qiita.com/hibohiboo/items/e69d856894a62e0bc221)
[BicepでAzure Container RegisterとAzure Container Appsを作ってAzure Functions をのせてみたメモ](https://qiita.com/hibohiboo/items/d7c5a0177cd2f13e71a2)
[Bicepで クラシック Application Insightsは2024年2月29日に廃止されました と出力されたことに対応したメモ](https://qiita.com/hibohiboo/items/6ef6e48d05fa93279efe)

## 参考

[省略可能のパラメーター --parameters][*1]  
[パラメーターの優先順位][*2]  
[readEnvironmentVariable][*3]  
[Bicep のスプレッド演算子][*4]  

[*1]:https://learn.microsoft.com/ja-jp/cli/azure/deployment/group?view=azure-cli-latest#az-deployment-group-create-optional-parameters
[*2]:https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/parameter-files?tabs=Bicep#parameter-precedence
[*3]:https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/bicep-functions-parameters-file#readenvironmentvariable
[*4]:https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/operator-spread