Chefのテストをするために、簡単に使い捨てられる環境があると便利です。
以前、VagrantとVirtualBoxを使って、ローカルマシンで仮想環境を立ち上げる方法について書きました。
VagrantとVirtualBoxで簡単に仮想環境の一発構築!
Chefのテストができたところで、今度はEC2インスタンスを起動して、Chefによる環境構築をしたくなりました。
そこで今回は、VagrantからEC2インスタンスを起動してみたいと思います。
AWSプラグインとダミーボックスのインストール
そんな時に便利なのが、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 ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/ 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と使ってみた « サーバーワークス エンジニアブログ