VagrantをEC2と使ってみた

記事タイトルとURLをコピーする
エンジニアの新井です。 今回はVagrantをちょっと触ってみようかと思います。

Vagrantとは

設定ファイルを用いてVirtualboxの仮想マシンの操作ができるツールです。 chefやpuppetとの親和性も高く、仮想マシンの環境構築が非常に簡単に行えます。 最近AWSとかVMwareにも対応しました。

前準備

Vagrantを利用するにはVirtualBoxをインストールしておく必要があります。 Downloadsから自分のマシンに合ったバイナリを落としてインストールしましょう。

まずは試してみる

公式サイトからパッケージを取得します。 インストールをしたら
$ vagrant box add base http://files.vagrantup.com/lucid32.box
$ vagrant init
$ vagrant up
これだけで仮想マシンが立ち上がります。 仮想マシンが立ち上がったら
$ vagrant ssh
で仮想マシンにSSHで入ることができます。 ね、簡単でしょ? 削除する時はdestroyをしましょう。(haltやsuspendもあります)
# VMの削除
$ vagrant destroy

EC2をVagrantで起動してみる

Vagrantは1.1から公式に操作できる対象にEC2+VPCが増えました。(他にもRackspaceやVMware Fusion) EC2に対応しているのにやらない理由がありません。 注意点としては
  • セキュリテイグループはSSH(22番ポート)を許可してある必要がある。
    • 起動直後にsshでログインできるかチェックしてるのでそこでハマります。
  • 起動したインスタンスに対してデフォルトではタグがつきません。
    • 共用アカウント等を利用している場合はちゃんとNameタグ等をつけましょう。
  • Amazon LinuxではDefaults requirettyが有効な状態になっているので無効化したAMIを用意する必要がある(見事にハマった)。
    • visudoから編集しておきましょう。
では、Amazon LinuxをVagrantで起動しましょう。
$ vagrant plugin install vagrant-aws
AWSを利用する場合、OSのイメージは必要ありませんが、Boxは必要なのでダミーのそれを用意します。
$ vagrant box add aws-dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
Vagrantfileを作成し、編集します。
$ vagrant init
# Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "aws-dummy"

  config.vm.provider :aws do |aws|
    aws.access_key_id = ENV['AWS_ACCESS_KEY']
    aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
    aws.keypair_name = 'darai'
    aws.ssh_username = 'ec2-user'
    aws.ssh_private_key_path = '~/.ssh/darai'
    aws.instance_type = 't1.micro'
    aws.region = 'ap-northeast-1'
    aws.ami = 'ami-2c85072d'
    aws.security_groups = ['darai-dev']
  end
end
設定ファイルを書き終えたら起動しましょう。
$ vagrant up --provider aws
Bringing machine 'default' up with 'aws' provider...
[default] Warning! The AWS provider doesn't support any of the Vagrant
high-level network configurations (`config.vm.network`). They
will be silently ignored.
[default] Launching an instance with the following settings...
[default]  -- Type: t1.micro
[default]  -- AMI: ami-2c85072d
[default]  -- Region: ap-northeast-1
[default]  -- SSH Port: 22
[default]  -- Keypair: darai
[default]  -- Security Groups: ["darai-dev"]
[default] Waiting for instance to become "ready"...
[default] Waiting for SSH to become available...
[default] Machine is booted and ready for use!
[default] Rsyncing folder: /Users/darai/Vagrant/ => /vagrant
起動したのでインスタンスに接続!
$ vagrant ssh

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|___|___|

https://aws.amazon.com/amazon-linux-ami/2012.09-release-notes/
使い終わったインスタンスはterminateしましょう。
$ vagrant destroy

まとめ

今回は起動/削除しか紹介していませんが、shellコマンドを実行したり、chefを利用したりも出来るので ちょこっと検証用の使い捨ての環境を作るにはとても便利ですね! また、AWSプラグインは物足りないところも多く、例えば、Vagrant経由ではまだhalt(=stop)が出来なかったりします。(stopに関してはPull requestは出ているようです。) オープンソースなのでパッチを送ってどんどんよくしていきたいですね!