戦場のプログラマー

名前は誰も知らない。

Vagrant AWS Provider を使ってみた

まずはダミーの box イメージをインポートする。

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

そして次のような Vagrantfile を書く。
前提条件は以下。

  • IAMで予めEC2にアクセスを制限したユーザのクレデンシャルを払いだしておくこと
  • 使用するキーペアの名前は vagrant
  • 起動するインスタンスタイプは t2.micro (デフォルトだと m3.medium で起動してしまう)
  • Vagrant 用のセキュリティグループを定義してそれを使用
  • 東京リージョンを指定(ap-northeast-1)
  • 起動する AMI は Amazon Linux AMI 2014.03.2 (HVM) (ami-29dc9228)
  • SSH ユーザ名は ec2-user
  • 対応する秘密鍵の場所を指定する。
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = ""
    aws.secret_access_key = ""
    aws.keypair_name = "vagrant"

    aws.instance_type = "t2.micro"
    aws.security_groups = [ "vagrant" ]

    aws.region = "ap-northeast-1"
    # Amazon Linux AMI 2014.03.2 (HVM)
    aws.ami = "ami-29dc9228"

    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "~/.ssh/aws-ec2-vagrant.pem"
  end
end

そして

vagrant up --provider=aws

以下の様なエラーが出るが、ここでは気にしない。

==> default: Rsyncing folder: /Users/wnoguchi/Documents/tmp/vagrant-ec2/ => /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mkdir -p '/vagrant'

Stdout from the command:



Stderr from the command:

sudo: sorry, you must have a tty to run sudo

IPアドレス知らなくてもSSHできる。

vagrant ssh

グローバルIPが知りたければインスタンスメタデータcurl で取得する。

[ec2-user@ip-172-31-25-90 ~]$ curl -w "\n" http://169.254.169.254/latest/meta-data/public-hostname
ec2-54-64-60-151.ap-northeast-1.compute.amazonaws.com
[ec2-user@ip-172-31-25-90 ~]$ curl -w "\n" http://169.254.169.254/latest/meta-data/public-ipv4
54.64.60.151

あとは nginx 入れるなりなんなりして実験して、用が済んだら

vagrant halt

か潔く

vagrant destroy -f

References

  1. mitchellh/vagrant-aws
  2. インスタンスメタデータとユーザーデータ - Amazon Elastic Compute Cloud