Bicep のユーザー定義関数

Bicep ファイル内で、独自の関数を作成できます。 これらの関数は、Bicep ファイルで使用できます。 ユーザー定義関数は、Bicep ファイル内で自動的に使用可能になる標準 Bicep 関数とは別のものです。 Bicep ファイルで繰り返し使用される複雑な式がある場合は、独自の関数を作成します。

この機能を使用するには、Bicep CLI バージョン 0.26.X 以上が必要です。

制限事項

ユーザー関数を定義するときに、適用される制限がいくつかあります。

  • 関数は変数にアクセスできません。
  • 関数は、関数内で定義されているパラメーターのみを使用できます。
  • 関数では、reference 関数、またはいずれの list 関数も使用できません。
  • 関数のパラメーターでは既定値を指定できません。

関数を定義する

func ステートメントを使用して、ユーザー定義関数を定義します。

func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

次の例は、ユーザー定義関数を定義して使用する方法を示しています。

func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'

func sayHelloString(name string) string => 'Hi ${name}!'

func sayHelloObject(name string) object => {
  hello: 'Hi ${name}!'
}

func nameArray(name string) array => [
  name
]

func addNameArray(name string) array => [
  'Mary'
  'Bob'
  name
]

output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')

上記の例の出力は、次のとおりです。

名前 Type
azureUrl String https://microsoft.com/azure
greetingArray Array ["Hi Evie!","Hi Casper!"]
greetingObject オブジェクト {"hello":"Hi John!"}
nameArray Array ["John"]
addNameArray Array ["Mary","Bob","John"]

Bicep CLI バージョン 0.23.X 以上では、ユーザー定義関数内で別のユーザー定義関数を呼び出す柔軟性があります。 前の例では、sayHelloString 関数の定義を使用して、sayHelloObject 関数を次のように再定義することができます。

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

ユーザー定義関数では、ユーザー定義データ型の使用がサポートされています。 次に例を示します。

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

前の例からの出力は次のようになります。

名前 Type
要素 positiveInt 3

次のステップ