次の方法で共有


Bicep アクセサー演算子

アクセサー演算子は、子リソース、オブジェクトのプロパティ、および配列内の要素にアクセスするために使用されます。 プロパティ アクセサーを使用して、いくつかの関数を使用することもできます。

オペレーター 名前
[] Index アクセサー
[^index] 逆引きインデックス アクセサー
. 関数アクセサー
:: 入れ子になったリソース アクセサー
. プロパティ アクセサー

Index アクセサー

array[integerIndex]

object['stringIndex']

インデックス アクセサーを使用して、配列から要素を取得するか、オブジェクトからプロパティを取得します。

配列の場合は、インデックスを整数として指定します。 整数は、取得する要素の 0 から始まる位置と一致します。

オブジェクトの場合は、インデックスを文字列として指定します。 この文字列は、取得するオブジェクトの名前と一致します。

次の例では、配列内の要素を取得します。

var arrayVar = [
  'Coho'
  'Contoso'
  'Fabrikam'
]

output accessorResult string = arrayVar[1]

例からの出力を次に示します。

名前 タイプ 価値
accessorResult ひも 'Contoso'

次の例では、オブジェクトのプロパティを取得します。

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

例からの出力を次に示します。

名前 タイプ 価値
accessorResult ひも 'Development'

逆引きインデックス アクセサー

Bicep CLI バージョン 0.34.x 以降では、逆インデックス アクセサー演算子 (^) を使用すると、末尾からカウントすることで配列から要素を取得できます。 この 1 から始まるインデックスは、 ^1 が最後の項目を返し、2 番目から最後 ^2 などを返します。 インデックスは 0 より大きい正の整数である必要があり、リテラルまたは整数に評価される式として指定できます。

array[^index]

インデックスが配列の長さを超えると、静的インデックスのコンパイル エラーが発生するか、動的インデックスの実行時エラーが発生します。

定数配列の場合、演算子はコンパイル時に評価されます。 パラメーターなどの動的入力の場合、評価はデプロイ時に行われます。

var items = [
  'apple'
  'banana'
  'orange'
  'grape'
]

output secondToLast string = items[^2]

例からの出力を次に示します。

名前 タイプ 価値
secondToLast ひも 'orange'

関数アクセサー

resourceName.functionName()

getSecretlist* の 2 つの関数は、関数を呼び出すためのアクセサー演算子をサポートします。 これら 2 つの関数は、アクセサー演算子をサポートする唯一の関数です。

次の例では、既存のキー コンテナーを参照し、 getSecret を使用してシークレットをモジュールに渡します。

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

入れ子になったリソース アクセサー

parentResource::nestedResource

入れ子になったリソースは、別のリソース内で宣言されているリソースです。 入れ子になったリソース アクセサー :: を使用して、親リソースの外部から入れ子になったリソースにアクセスします。

親リソース内では、シンボル名のみを使用して入れ子になったリソースを参照します。 入れ子になったリソース アクセサーは、親リソースの外部から入れ子になったリソースを参照する場合にのみ必要です。

次の例は、親リソース内と親リソースの外部から入れ子になったリソースを参照する方法を示しています。

resource demoParent 'demo.Rp/parentType@2024-01-01' = {
  name: 'demoParent'
  ___location: 'West US'

  // Declare a nested resource within 'demoParent'
  resource demoNested 'childType' = {
    name: 'demoNested'
    properties: {
      displayName: 'The nested instance.'
    }
  }

  // Declare another nested resource
  resource demoSibling 'childType' = {
    name: 'demoSibling'
    properties: {
      // Use symbolic name to reference because this line is within demoParent
      displayName: 'Sibling of ${demoNested.properties.displayName}'
    }
  }
}

// Use nested accessor to reference because this line is outside of demoParent
output displayName string = demoParent::demoNested.properties.displayName

プロパティ アクセサー

objectName.propertyName

プロパティ アクセサーを使用して、オブジェクトのプロパティにアクセスします。 プロパティ アクセサーは、オブジェクトであるパラメーターや変数など、任意のオブジェクトと共に使用できます。 オブジェクトではない式でプロパティ アクセスを使用すると、エラーが発生します。

次の例は、オブジェクト変数とプロパティにアクセスする方法を示しています。

var x = {
  y: {
    z: 'Hello'
    a: true
  }
  q: 42
}

output outputZ string = x.y.z
output outputQ int = x.q

例からの出力を次に示します。

名前 タイプ 価値
outputZ ひも 'Hello'
outputQ 整数 (integer) 42

通常は、Bicep ファイルにデプロイされたリソースでプロパティ アクセサーを使用します。 次の例では、パブリック IP アドレスを作成し、プロパティ アクセサーを使用して、デプロイされたリソースから値を返します。

resource publicIp 'Microsoft.Network/publicIPAddresses@2023-11-01' = {
  name: publicIpResourceName
  ___location: ___location
  properties: {
    publicIPAllocationMethod: dynamicAllocation ? 'Dynamic' : 'Static'
    dnsSettings: {
      domainNameLabel: publicIpDnsLabel
    }
  }
}

// Use property accessor to get value
output ipFqdn string = publicIp.properties.dnsSettings.fqdn

次のステップ