はじめに
前回の続きでAnsibleでEC2インスタンスを構築を目指していこうと思います。
やっとこさEC2インスタンスの構築。
前提
OS X El Capitan (バージョン 10.11.4 )
Python 2.7.10
Ansible 2.0.1.0
プレイブックの作成
以下のファイルを作成してください。
ec2の作成は、ec2モジュールを使って作成します。
その前に、キーペアの作成をec2_keyモジュールで
セキュリティグループをec2_groupモジュールで作成します。
./roles/aws/tasks/create_ec2.yml
---
- name: "create keypair"
ec2_key:
name: "{{ keypair.name }}"
register: keypair_regst
- name: "create keypair file"
file:
path=~/.ssh/{{ keypair_regst.key.name }}.pem
state=touch
mode=0600
when: keypair_regst.key.private_key is defined
- name: "keypair write"
local_action: shell echo "{{ keypair_regst.key.private_key }}" > ~/.ssh/"{{ keypair_regst.key.name }}".pem
when: keypair_regst.key.private_key is defined
- name: "create Security Group"
ec2_group:
name: "{{ secgrp.name }}"
description: "{{ secgrp.description }}"
vpc_id: "{{ vpc_regst.vpc.id }}"
region: "{{ vpc.region }}"
rules:
- proto: tcp
from_port: "{{ secgrp.fromport }}"
to_port: "{{ secgrp.toport }}"
cidr_ip: "{{ secgrp.destip }}"
- name: "create ec2 instance"
ec2:
instance_tags:
Name: "{{ ec2.name }}"
key_name: "{{ keypair.name }}"
instance_type: "{{ ec2.instance_type }}"
image: "{{ ec2.image }}"
wait: yes
group: "{{ secgrp.name }}"
count: 1
vpc_subnet_id: "{{ vpc_regst.subnets[0].id }}"
assign_public_ip: yes
register: ec2_regst
- debug: var=ec2_regst
when: ec2_regst | success
変数を追記してください。
./roles/aws/vars/main.yml
---
vpc:
vpc_name: "AnsibleVPC"
region: "ap-northeast-1"
cidr_block: "172.22.0.0/16"
sabnet_name1: "sabnet1"
sabnet_name2: "sabnet2"
sabnet_cidr1: "172.22.1.0/24"
sabnet_cidr2: "172.22.2.0/24"
az1: "ap-northeast-1a"
az2: "ap-northeast-1c"
keypair:
name: "lamp"
secgrp:
name: "lampSecgrp"
description: "web application security group"
fromport: "22"
toport: "22"
destip: "0.0.0.0/0"
ec2:
name: "lampserver"
image: "ami-f80e0596"
instance_type: "t2.micro"
こちらも追記してください。
./roles/aws/tasks/main.yml
- name: "create vpc"
include: create_vpc.yml
- name: "create ec2"
include: create_ec2.yml
プレイブックの実行
プレイブックの実行は前回と同じコマンドでできます。
$ ansible-playbook lamp.yml
まとめ
EC2インスタンスの構築がAnsibleでできるようになりました。
残念のことにこのプレイブックだと再度実行した時に、別途EC2インスタンスが作成されてしまいます。
あと、AIMの指定が調べておかないといけないから面倒ですね。ここは、ec2_ami_findモジュールを使えばできるかもしれません。
VPC〜EC2構築するところは、CloudFormationのほうがよいのかなぁ。
Keypairが作成できるのはとっても便利です。
AnsibleからCloudFormationの実行できるのでうまく組み合わせていきたいです。