LoginSignup
30
28

More than 5 years have passed since last update.

Vagrant + AWS + Ansible をやってみる

Last updated at Posted at 2014-12-24

AWS準備

AWSアカウントを作成

AWSクラウドのご利用開始方法にアクセスしてアカウントを作成する。
以降の作業はAWS Management Consoleで行う。

リージョンを選択

Tokyoリージョンを選択する。

グループを追加する

AWS - IAM Management Console - Groupvagrant グループを追加する。

  • Create New Groupを選択する
  • Group Nameに vagrant を設定する
  • Select Policy Templateは Power User Access 選択する

ユーザを追加する

AWS - IAM Management Console - Uservagrant ユーザを追加する。

  • Create New Usersを選択する
  • Enter User Namesに vagrant を設定する
  • 追加後 access_key_idsecret_access_key が表示されるので記録する
    • secret_access_key は二度と確認できないので注意!

セキュリティグループを追加する

AWS - EC2 Management Console - SecurityGroupvagrant セキュリティグループを追加する。

  • Create Security Groupを選択する
  • 基本情報を設定する
    • GroupName - vagrant
    • Description - sg-vagrant
    • VPC - デフォルトVPC(*がついているもの)
  • Security group rulesのInboundに以下を追加する
    • SSH, TCP, 22, 0.0.0.0/0
    • HTTP, TCP, 80, 0.0.0.0/0
    • HTTPS, TCP, 443, 0.0.0.0/0

キーペアを追加する

AWS - EC2 Management Console - Key Pairsvagrant キーペアを追加する。

  • Create Key Pairを選択する
  • Key pair nameに vagrant を設定してCreateを押す

生成後、vagrant.pem がダウンロードできる。
${HOME}/.ssh/vagrant.pem に配置する。

Vagrant準備

インストール

公式サイトからインストーラをダウンロードしてインストールする。

Pluginをインストール

以下のコマンドを実行する。

$ vagrant plugin install vagrant-aws
$ vagrant plugin install dotenv

VagrantでAWSの仮想マシンを立ち上げる

作業ディレクトリを作成

どこでもいいので適当に作成する。
以下の作業は、作成したディレクトリで行う。

.envファイルを追加する

dotenvプラグインを使って環境変数を設定する。

.env
AWS_SSH_USERNAME="ec2-user"
AWS_SSH_KEY=${HOME}/.ssh/vagrant.pem
AWS_ACCESS_KEY_ID="置き換える"
AWS_SECRET_ACCESS_KEY="置き換える"
AWS_KEYPAIR_NAME="vagrant"
AWS_SECURITY_GROUP="vagrant"

Vagrantfileを追加する

立ち上げる仮想マシンの情報を設定する。

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Dotenv.load

# change default provider to digital_ocean
ENV['VAGRANT_DEFAULT_PROVIDER'] = "aws"

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.provider :aws do |provider, override|
    override.vm.hostname          = "vagrant-test"
    override.vm.box_url           = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
    override.vm.box               = "aws"
    override.ssh.username         = ENV['AWS_SSH_USERNAME']
    override.ssh.private_key_path = ENV['AWS_SSH_KEY']
    override.ssh.pty              = false

    provider.access_key_id        = ENV['AWS_ACCESS_KEY_ID']
    provider.secret_access_key    = ENV['AWS_SECRET_ACCESS_KEY']
    provider.keypair_name         = ENV['AWS_KEYPAIR_NAME']
    provider.region               = "ap-northeast-1"  # Tokyo
    provider.availability_zone    = "ap-northeast-1c" # Tokyo
    provider.ami                  = "ami-c9562fc8"    # Tokyo Amazon Linux AMI 2014.03 (64-bit)
    provider.instance_type        = "t1.micro"
    provider.instance_ready_timeout = 120
    provider.terminate_on_shutdown  = false

    provider.security_groups      = [
                                      ENV['AWS_SECURITY_GROUP'], # sg-vagrant
                                    ]

    provider.tags                 = {
                                      "Name"        => "vagrant-test",
                                      "Description" => "Boot from vagrant-aws",
                                    }

    provider.block_device_mapping = [{
                                      "DeviceName"              => "/dev/sda1",
                                      "VirtualName"             => "VagrantDisk",
                                      "Ebs.VolumeSize"          => "8",
                                      "Ebs.DeleteOnTermination" => true,
                                      "Ebs.VolumeType"          => "standard",
                                     #"Ebs.VolumeType"          => "io1", # only if you choose PIOPS
                                     #"Ebs.Iops"                => 1000,  # only if you choose io1
                                    }]

    # enable these properties only if you plan not to use Default VPC
    #provider.subnet_id            = ENV['AWS_SUBNET_ID']
    #provider.private_ip_address   = "172.31.16.10"
    #provider.elastic_ip           = true

    # enable sudo without tty
    # NOTE: setting [ ssh.pty = true ] causes file provisioner fail
    provider.user_data = <<-USER_DATA
#!/bin/sh
echo "Defaults    !requiretty" > /etc/sudoers.d/vagrant-init
chmod 440 /etc/sudoers.d/vagrant-init
    USER_DATA

    # disable synced_folder:
    override.vm.synced_folder "./", "/vagrant", disabled: true

    # provision
    override.vm.provision "ansible" do |ansible|
      ansible.playbook = "provisioning/playbook.yml"
    end
    # Do whatever you wanna do !!
  end

end

起動する

--provider=awsENV['VAGRANT_DEFAULT_PROVIDER'] = "aws" を設定してある場合は、省略できる。

$ vagrant up --provider=aws

参考

30
28
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
30
28