다음을 통해 공유


Bicep 접근자 연산자

접근자 연산자는 자식 리소스, 개체의 속성 및 배열의 요소에 액세스하는 데 사용됩니다. 속성 접근자를 사용하여 일부 함수를 사용할 수도 있습니다.

오퍼레이터 이름
[] 인덱스 접근자
[^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 문자열 '개발'

역방향 인덱스 접근자

Bicep CLI 버전 0.34.x부터 역방향 인덱스 접근자 연산자(^)를 사용하면 끝에서 계산하여 배열에서 요소를 검색할 수 있습니다. 이 1부터 시작하는 인덱스란 마지막 항목, ^1 두 번째에서 마지막까지의 항목을 반환하는 것을 의미 ^2 합니다. 인덱스는 0보다 큰 양의 정수여야 하며 리터럴 또는 정수로 계산되는 식으로 지정할 수 있습니다.

array[^index]

인덱스가 배열의 길이를 초과하면 정적 인덱스에 대한 컴파일 오류가 발생하거나 동적 인덱스에 대한 런타임 오류가 발생합니다.

상수 배열의 경우 연산자는 컴파일 시간에 평가됩니다. 매개 변수와 같은 동적 입력의 경우 평가는 배포 시 발생합니다.

예시

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

output secondToLast string = items[^2]

예제의 출력:

이름 유형 가치
secondToLast 문자열 'orange'

함수 접근자

resourceName.functionName()

getSecretlist*의 두 함수는 함수를 호출하기 위한 접근자 연산자를 지원합니다. 이 두 함수는 접근자 연산자를 지원하는 유일한 함수입니다.

예시

다음 예제에서는 기존 키 자격 증명 모음을 참조한 다음 모듈에 비밀을 전달하는 데 사용합니다 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 정수 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

다음 단계