LoginSignup
16
18

More than 3 years have passed since last update.

AnsibleでVPCの作成

Last updated at Posted at 2016-04-03

はじめに

前回の続きでAnsibleでEC2インスタンスを構築を目指していこうと思います。
まずは、VPCの構築。

前提

OS X El Capitan (バージョン 10.11.4 )
Python 2.7.10
Ansible 2.0.1.0
AWSのIAMアカウントのアクセスキー
-->アクセスキーはAWSのコンソールでIAMから作成しておいてください。
image

botoのインストール

ここを参考にAWS SDK For Python (Boto)をインストール

$ sudo pip install boto
Password:
Collecting boto
  Downloading boto-2.39.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.4MB 435kB/s
Installing collected packages: boto
Successfully installed boto-2.39.0

アクセスキーの設定

aws configureコマンドで~/.awsディレクトリ配下にファイルを作成します。
リージョンは特に理由がなければ、東京リージョンであるap-northeast-1にします。

$ aws configure
AWS Access Key ID []: <アクセスキーの入力>
AWS Secret Access Key []: <シークレットキーの入力>
Default region name [None]: ap-northeast-1
Default output format [None]: json
$ ls ~/.aws
config      credentials

プレイブックの作成

以下のファイルを作ってください。
VPCの作成には、ec2_vpcモジュールを使います。

./roles/aws/tasks/main.yml
---

- name: "create vpc"
  include: create_vpc.yml
./roles/aws/tasks/create_vpc.yml
---

- name: "create vpc"
  ec2_vpc:
    cidr_block: "{{ vpc.cidr_block }}"
    resource_tags: { "Name":"{{ vpc.vpc_name }}" }
    subnets:
      - cidr: "{{ vpc.sabnet_cidr1 }}"
        az: "{{ vpc.az1 }}"
        resource_tags: { "Name":"{{ vpc.sabnet_name1 }}" }
      - cidr: "{{ vpc.sabnet_cidr2 }}"
        az: "{{ vpc.az2 }}"
        resource_tags: { "Name":"{{ vpc.sabnet_name2 }}" }
    internet_gateway: True
    route_tables:
      - subnets:
        - "{{ vpc.sabnet_cidr1 }}"
        - "{{ vpc.sabnet_cidr2 }}"
        routes:
          - dest: 0.0.0.0/0
            gw: igw
    region: "{{ vpc.region }}"
    state: present
    wait: true
  register: vpc_regst

- debug: var=vpc_regst
  when: vpc_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"
./lamp.yml
---
- hosts: localhost
  roles:
    - aws
./hosts
[localhost]
127.0.0.1

lamp.ymlのrolesには、実行するロールを定義します。(roles/<ココ>/tasks/)
tasks/main.ymlには、実行するPlaybookを定義します。
./roles/aws/vars/main.ymlに変数を定義します。

プレイブックの実行

Playbookの実行には、ansible-playbookでlamp.ymlを指定します。

$ ansible-playbook lamp.yml
 [WARNING]: provided hosts list is empty, only localhost is available


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

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

TASK [aws : create vpc] ********************************************************
included: /Users/XXXX/ansible/roles/aws/tasks/create_vpc.yml for localhost

TASK [aws : create vpc] ********************************************************
changed: [localhost]

TASK [aws : debug] *************************************************************
ok: [localhost] => {
    "vpc_regst": {
        "changed": true,
        "igw_id": "igw-37fa4052",
        "subnets": [
            {
                "az": "ap-northeast-1a",
                "cidr": "172.22.1.0/24",
                "id": "subnet-0f7f4c78",
                "resource_tags": {
                    "Name": "sabnet2"
                }
            },
            {
                "az": "ap-northeast-1c",
                "cidr": "172.22.2.0/24",
                "id": "subnet-0eade557",
                "resource_tags": {
                    "Name": "sabnet1"
                }
            }
        ],
        "vpc": {
            "cidr_block": "172.22.0.0/16",
            "dhcp_options_id": "dopt-e660868e",
            "id": "vpc-e88cd98d",
            "region": "ap-northeast-1",
            "state": "available"
        },
        "vpc_id": "vpc-e88cd98d"
    }
}

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

詳細を出力したい場合は、vvvvオプションつけてください。

ansible-playbook lamp.yml -vvvv

その他

./roles/aws/vars/main.ymlでアベイラビリティゾーンの指定間違えてたら
ansible実行時に以下のエラーがでました。

AttributeError: 'NoneType' object has no attribute 'get_all_vpcs'

botoインストールするの忘れてると以下のエラーがでました。
※間違えてboto3だけ入れてたらでました。

fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "ec2_vpc"}, "parsed": false}

まとめ

これでVPCが作成されます。
次に、debugモジュールで出力した情報を元にec2を作成していきます。
それにしても、ansible実行すると毎回、ステータスがchange=1になるのが不思議です。

16
18
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
16
18