読者です 読者をやめる 読者になる 読者になる

dehio3’s diary

仕事、生活、趣味のメモ

ansibleで複数台のEC2インスタンスを作成する

商用機としてインスタンスを作成する場合、2台以上の冗長構成にするのが普通なので、アベイラビリティーゾーンを分けてインスタンスを作成するplaybookを作成。

インベントリファイルにて、サーバ名とアベイラビリティーゾーンを指定するだけで、同じ種別の複数台作成する事が可能。

hosts

#localhost ansible_python_interpreter=/usr/local/bin/python

[servers]
hoge-01
hoge-02

[zone-a]
hoge-01

[zone-c]
hoge-02

[all:vars]
service=test
keypair=hoge
instance_type=t2.micro
instance_tags="Name='[{{ service }}]{{ inventory_hostname }}'"
security_group=sg-xxxx
image=ami-374db956
region=ap-northeast-1

[zone-a:vars]
vpc_subnet_id=subnet-xxxxx

[zone-c:vars]
vpc_subnet_id=subnet-xxxxx

playbook.yml

- name: Create a sandbox instance
  hosts: servers
  gather_facts: False
  tasks:
    - name: Launch instance
      local_action:
        module: ec2
        key_name: "{{ keypair }}"
        group_id: "{{ security_group }}"
        instance_type: "{{ instance_type }}"
        instance_tags: "{{ instance_tags }}"
        image: "{{ image }}"
        wait: true
        region: "{{ region }}"
        vpc_subnet_id: "{{ vpc_subnet_id }}"
      register: ec2

    - name: Add new instance to host group
      local_action: add_host hostname={{ item.public_ip }} groupname=launched
      with_items: ec2.instances

    - name: Wait for SSH to come up
      local_action: wait_for host={{ item.public_dns_name }} port=22 delay=60 timeout=320 state=started
      with_items: ec2.instances