ํ…œํ”Œ๋ฆฟ ์†์„ฑ ์ •์˜

ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ปค์Šคํ…€ ํ…œํ”Œ๋ฆฟ ์†์„ฑ์„ ๋งŒ๋“ค๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ์†์„ฑ์€ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— ์ •์˜ํ•˜๋Š” ์ž„์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์€ ํ…œํ”Œ๋ฆฟ์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์†์„ฑ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ๊ฐ์˜ ๊ณ ์œ  ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์†์„ฑ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ค„์€ ๋จธ์‹  ์œ ํ˜•์˜ URL์—์„œ ํ…œํ”Œ๋ฆฟ ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

์ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ์—์„œ๋Š” ํ…œํ”Œ๋ฆฟ์˜ properties ์„น์…˜์— ์žˆ๋Š” zone ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager๋Š” ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์— zone ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๋งŒ๋“ค๊ธฐ

ํ…œํ”Œ๋ฆฟ ์†์„ฑ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Jinja

Jinja์—์„œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

{{ properties["PROJECT_NAME"] }}

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

Python์—์„œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  context.properties["PROPERTY_NAME"]

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/machineTypes/n1-standard-1']),
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

์ „์ฒด Python ์˜ˆ๋Š” Deployment Manager GitHub ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ตœ์ƒ์œ„ ๊ตฌ์„ฑ์—์„œ ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’ ์„ค์ •

์ตœ์ƒ์œ„ ๊ตฌ์„ฑ์—์„œ ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

ํ…œํ”Œ๋ฆฟ์˜ ๋ชจ๋“  ํ…œํ”Œ๋ฆฟ ์†์„ฑ์— ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ…œํ”Œ๋ฆฟ์— ํ…œํ”Œ๋ฆฟ ์†์„ฑ zone, image, network๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ์ƒ์œ„ ๊ตฌ์„ฑ์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ ๊ฐ’์„ ๋ชจ๋‘ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ํ…œํ”Œ๋ฆฟ ์†์„ฑ์— ๊ธฐ๋ณธ๊ฐ’์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ ์†์„ฑ์€ ํ•ด๋‹น ๊ธฐ๋ณธ๊ฐ’์ด ๋ฐฐํฌ์— ์ ํ•ฉํ•œ ๊ฒฝ์šฐ, ์ตœ์ƒ์œ„ ๊ตฌ์„ฑ์—์„œ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’ ์„ค์ •

ํ…œํ”Œ๋ฆฟ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ƒ์œ„ ํŒŒ์ผ์— ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  Deployment Manager๋Š” Google Cloud CLI์—์„œ ์ง์ ‘ ์ด๋Ÿฌํ•œ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ YAML ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Deployment Manager๋Š” ์š”์ฒญ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐํฌ์˜ ์ตœ์ƒ์œ„ ๊ตฌ์„ฑ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ํ…œํ”Œ๋ฆฟ์— zone์ด๋ผ๋Š” ํ…œํ”Œ๋ฆฟ ์†์„ฑ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ์ง์ ‘ ์ „๋‹ฌํ•˜๊ณ  ๋ช…๋ น์ค„์—์„œ ํ…œํ”Œ๋ฆฟ ์†์„ฑ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์š”์ฒญ์€ ํ…œํ”Œ๋ฆฟ์„ ์ „๋‹ฌํ•˜๊ณ  ๋ช…๋ น์ค„์—์„œ ์ง์ ‘ zone ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud deployment-manager deployments create a-single-vm --template vm_template.jinja \
    --properties zone:us-central1-a

๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์„ธ์š”.

  • ๋ชจ๋“  ๊ฐ’์€ YAML ๊ฐ’์œผ๋กœ ํŒŒ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด version: 3์€ ์ •์ˆ˜๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด๋กœ ์ง€์ •ํ•˜๋ ค๋ฉด version: \'3\' ๊ฐ’์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋œ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค.

  • ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ TRUE, true, True๋Š” ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

  • ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ •์˜๋œ ๋ชจ๋“  ํ•„์ˆ˜ ์†์„ฑ์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ œ๊ณตํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํŠน์ • ์†์„ฑ์— ๊ธฐ๋ณธ๊ฐ’์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ, ๋ช…๋ น์ค„์—์„œ ํ•ด๋‹น ์†์„ฑ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์†์„ฑ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ํ‚ค:๊ฐ’ ์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Œ์„ ์ง€์ •ํ•˜๋Š” ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gcloud deployment-manager deployments create my-igm \
    --template vm_template.jinja \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Deployment Manager๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ๋˜๋Š” gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ๋ฐฐํฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ๋ณด๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„