LoginSignup
10
14

More than 3 years have passed since last update.

AnsibleでECインスタンスの作成

Last updated at Posted at 2016-04-03

はじめに

前回の続きで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の実行できるのでうまく組み合わせていきたいです。

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14