vagrant-awsプラグインでVagrantからEC2インスタンスを起動

Chefのテストをするために、簡単に使い捨てられる環境があると便利です。
以前、VagrantとVirtualBoxを使って、ローカルマシンで仮想環境を立ち上げる方法について書きました。
VagrantとVirtualBoxで簡単に仮想環境の一発構築!
Chefのテストができたところで、今度はEC2インスタンスを起動して、Chefによる環境構築をしたくなりました。
そこで今回は、VagrantからEC2インスタンスを起動してみたいと思います。

AWSプラグインとダミーボックスのインストール

そんな時に便利なのが、vagrant-awsプラグインです。
スクリーンショット 2014-09-22 2.15.24
mitchellh/vagrant-aws
vagrantコマンドから簡単にインストールできます。

$ vagrant plugin install vagrant-aws

VagrantでCentOSの仮想環境を起動するときには、CentOSのイメージをダウンロードしましたが、今回もボックスを追加します。

$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

これでインストールは完了です。

Vagrantfileの作成と記述

続いて、Vagrantfileを作成します。
まず、テキトーな作業ディレクトリでinitサブコマンドを実行します。

$ vagrant init

これで、Vagrantfileが作成されます。そして、それを書き換えるのですが、今回は次のような形にしました。

# -*- mode: ruby -*-
# vi: set ft=ruby :
# 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.box = "dummy"
  config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
  config.vm.provider :aws do |aws, override|
    aws.access_key_id = ENV['AWS_ACCESS_KEY']
    aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
    aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
    override.ssh.username = 'ec2-user'
    override.ssh.private_key_path = ENV['AWS_PRIVATE_KEY_PATH']
    aws.region = 'ap-northeast-1'
    aws.ami = 'ami-25dd9324'
    aws.instance_type = 'c3.large'
    aws.security_groups = ['vagrant']
    aws.tags = {"Name"=>"vagrant"}
    aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/# Defaults requiretty/' /etc/sudoers\n"
  end
end

ここで、いくつかの設定を環境変数にしていますので、事前に環境変数を読み込んでおきます。

# Vagrant for AWS
export AWS_ACCESS_KEY='xxxx'
export AWS_SECRET_ACCESS_KEY='yyyy'
export AWS_KEYPAIR_NAME=zzzz
export AWS_PRIVATE_KEY_PATH=/path/to/zzzz.pem

ここに指定するAWSのアクセスキーとキーペアは事前に発行しておきます。Vagrantfileの中にセキュリティグループも指定していますので、これも作成しておく必要があります。
ユーザーデータでsudoersの設定を変更していますが、これはknifeからChefを実行するために入れているので、EC2インスタンスを起動するだけであれば必須ではありません。
これで設定は完了です!

VagrantからEC2インスタンスの起動

いざ起動をしてみます。CentOSを起動した時と違って、providerオプションをつける必要があるので注意です。

$ vagrant up --provider=aws

無事に起動できたら、SSHで接続してみます!

$ vagrant ssh
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
AWS | Amazon Linux AMI
16 package(s) needed for security, out of 36 available Run "sudo yum update" to apply all updates. [ec2-user@ip-xx-xx-xx-xx ~]$

起動できています!
このホストへの接続設定を.ssh/configに追加したい場合は、ssh-configサブコマンドで設定を出力させて、それを.ssh/configに追加すれば良いです。

$ vagrant ssh-config
Host default
  HostName xx.xx.xx.xx
  User ec2-user
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /path/to/zzzz.pem
  IdentitiesOnly yes
  LogLevel FATAL

VagrantからEC2インスタンスの停止

起動も簡単ですが、停止も一発です。

$ vagrant destroy

これでEC2に対してChefのテストをする場合も、サクッと起動して環境構築して、いらなくなったらサクッと削除できて楽になります!

参考ページ

参考にさせていただきました。
VagrantをEC2と使ってみた « サーバーワークス エンジニアブログ

タイトルとURLをコピーしました