구성 또는 템플릿의 속성을 정의할 때 직접 값을 제공하는 대신 다른 리소스의 속성에 대한 참조를 사용할 수 있습니다. 예를 들어 동일한 배포의 인스턴스 템플릿을 사용하는 인스턴스 그룹 관리자를 만들려는 경우 인스턴스 템플릿의 전체 링크를 명시적으로 입력하는 대신 $(ref.instance-template.selfLink)
구문을 통해 참조를 사용할 수 있습니다.
참조로 다음을 수행할 수 있습니다.
리소스가 생성될 때까지 정의되지 않은 속성에 액세스합니다. 예를 들어 구성에 가상 머신을 정의할 때는 가상 머신의 IP 주소를 모릅니다. 그러나 IP 주소에 대한 참조는 계속 사용할 수 있습니다. 구성을 배포할 때 VM이 먼저 생성되고 Deployment Manager가 외부 IP 주소(있는 경우)를 가져옵니다.
가독성이 뛰어나고 문제 해결도 용이한 구성 또는 템플릿을 만듭니다. 예를 들어 전달 규칙을 여러 개 구성해야 하는 경우 사용할 네트워크도 지정해야 합니다. 각 전달 규칙마다 네트워크 링크를 제공하는 대신 다음 구문을 사용하여 네트워크의
selfLink
속성에 대한 참조를 만들 수 있습니다.$(ref.network-name.selfLink)
구성 문제를 해결해야 하는 경우 참조를 통해 전달 규칙에서 어떤 네트워크가 사용되는지 쉽게 알 수 있습니다.
리소스에 대한 참조를 만들 때 리소스 간에 종속 항목도 만듭니다. 다음과 같이 sandbox-vm
이 network-a
에 대한 참조를 사용하는 예시를 들어 보겠습니다.
resources:
- name: sandbox-vm
type: compute.v1.instance
properties:
network: $(ref.network-a.selfLink)
...
...
- name: network-a
type: compute.v1.network
properties:
...
이 구성을 배포하면 참조가 확인될 수 있도록 Deployment Manager가 network-a
를 만든 후 sandbox-vm
을 만듭니다. 참조가 성공적으로 확인되지 않으면 배포가 실패합니다.
참조는 구성 및 템플릿 모두에서 사용할 수 있습니다.
시작하기 전에
- 이 가이드의 명령줄 예시를 사용하려면 'gcloud' 명령줄 도구를 설치합니다.
- 이 가이드의 API 예시를 사용하려면 API 액세스를 설정합니다.
- 구성 만들기를 확인합니다.
- 기본 템플릿 만들기를 확인합니다.
구성 파일에서 참조 만들기
다음 형식을 사용하여 구성에서 참조를 선언합니다.
$(ref.RESOURCE_NAME.PROPERTY)
다음 예제에서는 네트워크를 만든 다음 새로 만든 네트워크에 대한 참조를 사용하는 두 개의 인스턴스를 만듭니다. 이 예시에서 참조는 다음과 같습니다.
$(ref.a-new-network.selfLink)
이 구성을 배포하면 네트워크가 두 인스턴스보다 먼저 생성되며 참조는 네트워크 리소스의 selfLink
로 확인됩니다.
템플릿에서 참조 만들기
템플릿 파일에서 전체 참조는 앞에 $
를 표시하고 괄호로 묶어야 합니다.
$(ref.RESOURCE_NAME.PROPERTY)
참조에는 템플릿 속성 및 환경 변수와 같은 다른 기능을 조합할 수 있습니다. Deployment Manager가 참조를 올바르게 파싱하도록 하려면 전체 참조 문자열을 괄호로 묶어야 합니다.
다음은 템플릿에 참조를 선언하는 방법에 대한 몇 가지 예입니다.
Jinja
환경 변수를 포함하는 참조
network: $(ref.{{ env["deployment"] }}-network.selfLink)
배열의 값에 대한 참조
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
템플릿 속성을 포함하는 참조
network: $(ref.{{ properties["network"] }}.selfLink)
Jinja 매개변수를 사용한 참조
network: $(ref.{{ NETWORK_NAME }}.selfLink)
출력의 참조
outputs: - name: UrlToService value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
Python
환경 변수를 포함하는 참조
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
배열의 값에 대한 참조
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
템플릿 속성을 포함하는 참조
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Python 매개변수를 사용한 참조
'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
출력의 참조
outputs = [{'name': 'UrlToService', 'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]