Ansible: ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ : ec2 ๋ชจ๋“ˆ์ด "์˜ค๋ฅ˜! ๋ชจ๋“ˆ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ค„์ด ์—†์Šต๋‹ˆ๋‹ค"์™€ ํ•จ๊ป˜ ์†์ƒ๋จ

์— ๋งŒ๋“  2015๋…„ 10์›” 14์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ansible/ansible

๋ฌธ์ œ ์œ ํ˜• :

Bug Report

Ansible ๋ฒ„์ „ :

ansible 2.0.0 (devel 2963bba901) last updated 2015/10/14 15:07:35 (GMT +300)
  lib/ansible/modules/core: (devel 95b10c9fdd) last updated 2015/10/14 10:52:54 (GMT +300)
  lib/ansible/modules/extras: (devel 15480e3d04) last updated 2015/10/14 10:52:56 (GMT +300)
  config file = /etc/ansible/ansible.cfg
  configured module search path = None

Ansible ๊ตฌ์„ฑ :

ansible.cfg์˜ github ๋ฒ„์ „์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ:

MacOSX ์š”์„ธ๋ฏธํ‹ฐ 10.10.5

์š”์•ฝ:

์ตœ๊ทผ ๊ฐœ๋ฐœ์—์„œ ec2 ๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ec2_module -page์˜ ๊ธฐ๋ณธ ์˜ˆ์ œ๋„ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋ฉด ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! module is missing interpreter line"}

๋ชจ๋“ˆ ์˜ต์…˜์ด ๊ตฌ๋ฌธ ๋ถ„์„๋˜๊ธฐ ์ „์—๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹ 18e2ee16ef0895831ead312550eb5de44c99524c ์ดํ›„ ๊ธฐ๋Šฅ์ด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ปค๋ฐ‹์ด ec2 ๋ชจ๋“ˆ์„ ๋ง๊ฐ€ ๋œจ๋ฆฐ ์ด์œ ๋ฅผ ํ•ด๋… ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„ :

- hosts: localhost
  tasks:
   - ec2:
      key_name: mykey
      instance_type: t2.micro
      image: ami-123456
      wait: yes
      group: webserver
      count: 3
      vpc_subnet_id: subnet-29e63245
      assign_public_ip: yes

์˜ˆ์ƒ ๊ฒฐ๊ณผ :

ec2 ๋ชจ๋“ˆ์€ ์ด์ „์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผํ•˜๋ฉฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ๊ฒฐ๊ณผ:

๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ์ธ์‡„๋˜๊ณ  ํ”Œ๋ ˆ์ด ๋ถ ์‹คํ–‰์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

fatal: [localhost -> localhost]: FAILED! => {"failed": true, "msg": "ERROR! module is missing interpreter line"}

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฐธ๊ณ ๋กœ ๋‹ค์Œ์ด ๋ˆ„๋ฝ ๋œ ๊ฒฝ์šฐ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/usr/bin/python

๋ชจ๋“ˆ ํŒŒ์ผ ์ƒ๋‹จ์— hashbang. ์•„๋งˆ๋„ ์ž์‹ ์˜ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋งŒ ๊ด€๋ จ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ๋„˜์–ด ๋œจ๋ ธ๋‹ค!

๋ชจ๋“  3 ๋Œ“๊ธ€

๋ณต์ œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ๊ฒฝ๋กœ๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด์ง€ ๋งŒ ์‹ค์ œ๋กœ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/ansible/ansible-modules-core/blob/devel/cloud/amazon/ec2.py#L1

๊ฒฝ๋กœ ๋ฌธ์ œ ๋ฐ / ๋˜๋Š” ์„ค์ • ๋ฌธ์ œ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

OSX : 10.10.2

ํ…Œ์ŠคํŠธ ๋œ HEAD :

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [ec2 aws_secret_key=***** count=1 aws_access_key=****** group=All key_name=***** region=us-west-1 vpc_subnet_id=subnet-64e9d522 instance_type=t2.micro assign_public_ip=True image=ami-df6a8b9b wait=True] ***
changed: [localhost] => {"changed": true, "instance_ids": ["i-249c1196"], "instances": [{"ami_launch_index": "0", "architecture": "x86_64", "block_device_mapping": {"/dev/sda1": {"delete_on_termination": true, "status": "attached", "volume_id": "vol-c611fe3e"}}, "dns_name": "ec2-54-193-42-241.us-west-1.compute.amazonaws.com", "ebs_optimized": false, "groups": {"sg-f2953597": "All"}, "hypervisor": "xen", "id": "i-249c1196", "image_id": "ami-df6a8b9b", "instance_type": "t2.micro", "kernel": null, "key_name": "*****", "launch_time": "2015-10-20T05:02:16.000Z", "placement": "us-west-1a", "private_dns_name": "ip-172-31-10-161.us-west-1.compute.internal", "private_ip": "172.31.10.161", "public_dns_name": "ec2-54-193-42-241.us-west-1.compute.amazonaws.com", "public_ip": "54.193.42.241", "ramdisk": null, "region": "us-west-1", "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "tags": {}, "tenancy": "default", "virtualization_type": "hvm"}], "tagged_instances": []}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0

ํ…Œ์ŠคํŠธ ๋œ ์ปค๋ฐ‹ : 18e2ee16ef0895831ead312550eb5de44c99524c

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [ec2 aws_secret_key=***** count=1 aws_access_key=*****group=All key_name=***** region=us-west-1 vpc_subnet_id=subnet-64e9d522 instance_type=t2.micro assign_public_ip=True image=ami-df6a8b9b wait=True] ***
changed: [localhost] => {"changed": true, "instance_ids": ["i-9d911c2f"], "instances": [{"ami_launch_index": "0", "architecture": "x86_64", "block_device_mapping": {"/dev/sda1": {"delete_on_termination": true, "status": "attached", "volume_id": "vol-7468878c"}}, "dns_name": "ec2-54-193-61-87.us-west-1.compute.amazonaws.com", "ebs_optimized": false, "groups": {"sg-f2953597": "All"}, "hypervisor": "xen", "id": "i-9d911c2f", "image_id": "ami-df6a8b9b", "instance_type": "t2.micro", "kernel": null, "key_name": "*****", "launch_time": "2015-10-20T05:21:45.000Z", "placement": "us-west-1a", "private_dns_name": "ip-172-31-5-245.us-west-1.compute.internal", "private_ip": "172.31.5.245", "public_dns_name": "ec2-54-193-61-87.us-west-1.compute.amazonaws.com", "public_ip": "54.193.61.87", "ramdisk": null, "region": "us-west-1", "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "tags": {}, "tenancy": "default", "virtualization_type": "hvm"}], "tagged_instances": []}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0

ํ”Œ๋ ˆ์ด ๋ถ :

- hosts: localhost
  connection: local
  tasks:
   - ec2:
      aws_access_key: '*****'
      aws_secret_key: '*****'
      region: us-west-1
      key_name: *****
      instance_type: t2.micro
      image: ami-df6a8b9b
      wait: yes
      group: All
      count: 1
      vpc_subnet_id: subnet-64e9d522
      assign_public_ip: yes

๋งˆ์นจ๋‚ด ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” '๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ'-๋””๋ ‰ํ† ๋ฆฌ์— ec2.ini๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  ์–ด๋–ค ์ด์œ ๋กœ ec2 ๋ชจ๋“ˆ์„ ์ฐพ์„ ๋•Œ ansible์ด ๊ทธ๊ฒƒ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ec2.ini์˜ ์ด๋ฆ„์„ ec2_dynamic_inventory.ini๋กœ ๋ฐ”๊พธ๊ณ  'export EC2_INI_PATH = library / ec2_dynamic_inventory.ini'๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋‹ค์Œ์ด ๋ˆ„๋ฝ ๋œ ๊ฒฝ์šฐ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/usr/bin/python

๋ชจ๋“ˆ ํŒŒ์ผ ์ƒ๋‹จ์— hashbang. ์•„๋งˆ๋„ ์ž์‹ ์˜ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋งŒ ๊ด€๋ จ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ๋„˜์–ด ๋œจ๋ ธ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

renaudguerin picture renaudguerin  ยท  3์ฝ”๋ฉ˜ํŠธ

rchady picture rchady  ยท  3์ฝ”๋ฉ˜ํŠธ

hryamzik picture hryamzik  ยท  3์ฝ”๋ฉ˜ํŠธ

greggilbert picture greggilbert  ยท  3์ฝ”๋ฉ˜ํŠธ

arkag picture arkag  ยท  3์ฝ”๋ฉ˜ํŠธ