LoginSignup
86
93

More than 5 years have passed since last update.

vagrant-awsを使用する際のVagrantファイル詳細

Last updated at Posted at 2014-03-24

使い方

  • vagrant-awsのインストール
vagrant plugin install vagrant-aws
  • 起動方法
vagrant up --provider=aws

Vagrantfileのサンプル

VAGRANTFILE_API_VERSION = "2"

$script = <<SCRIPT
# 
echo 'Start ShellScript'
# タイムゾーンを日本に変更
sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
# AWSのVolumeのリサイズ(デフォルトだと8GBのため)
sudo resize2fs /dev/sda1
SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Box名
  config.vm.box = "dummy"
  # 「vagrant box add」をしなくていいように設定
  config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
  # 同期するフォルダを選択(vagrant-awsでは常に同期される訳ではなく、provisionやupなどのコマンド実行時に同期される)
  config.vm.synced_folder "./", "/home/ec2-user/vagrant", disabled: true
  config.vm.provider :aws do |aws, override|
    # アクセスキー(リポジトリに入れたいので環境変数に保持)
    aws.access_key_id     = ENV['AWS_ACCESS_KEY_ID']
    # シークレットアクセスキー(リポジトリに入れたいので環境変数に保持)
    aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
    # キー名
    aws.keypair_name = "キーペア名"
    # インスタンスタイプ(http://aws.amazon.com/jp/ec2/pricing/ を参照)
    aws.instance_type = "c3.large"
    # リージョン(東京はap-northeast-1)
    aws.region = "ap-northeast-1"
    # アベイラビリティゾーン
    aws.availability_zone =  "ap-northeast-1c"
    # 使用するAMIのID
    aws.ami = "AMIのID"
    # セキュリティグループ(複数指定でor判定)
    aws.security_groups = ['group1','group2']
    # タグ
    aws.tags = {
      'Name' => '名前',
      'Description' => '詳細'
    }
    # 最初に実行されるシェルスクリプト(sudoできるamiを作成した方が良い)
    aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers\n"
    # EBSの指定が可能
    aws.block_device_mapping = [
      {
        # デバイス名
        'DeviceName' => "/dev/sda1",
        # 名称
        'VirtualName' => "ボリューム名",
        # ボリュームサイズ(GB単位)
        'Ebs.VolumeSize' => 100,
        # ターミネートした際に削除するかどうか
        'Ebs.DeleteOnTermination' => true,
        # EBSのタイプを指定      
        'Ebs.VolumeType' => 'standard',
        #'Ebs.VolumeType' => 'io1',
        # standardでIOPSを指定するとエラーが発生するので注意
        #'Ebs.Iops' => 1000
      }
    ]
    # -----
    # ここからはVPCを使用する際の設定
    # サブネットID(マネジメントコンソールから取得)
    #aws.subnet_id = 'サブネットID'
    # VPC内のローカルIPアドレスを指定
    #aws.private_ip_address = '192.168.0.33'
    # 自動的にEIPを割り当てる場合(EIPの取得上限は5個のためそれ以上の指定はエラーとなる)
    #aws.elastic_ip = true

    # -----
    # SSHのユーザー名を指定(AMIはec2-user、ubuntuはubuntu)
    override.ssh.username = "ec2-user"
    # SSHのKeyのパスを指定
    override.ssh.private_key_path = "~/.ssh/aws-key.pem"
  end
  # シェルを実行
  config.vm.provision "shell", inline: $script
  # Chefを実行
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["./site-cookbooks"]
    chef.add_recipe     "php54"
    chef.add_recipe     "apache"
    chef.json = {
    }
    # ログレベル
    #chef.log_level = :debug
  end
  # 仮想環境にインストールするchefのバージョン(latestは最新バージョンという意味)
  config.omnibus.chef_version = :latest

end

各オプションについて

  • vagrant-awsを使用する際のおまじない
config.vm.box = "dummy"
config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
aws.keypair_name = 'keypair'

知っておくと便利なこと

  • 「./.vagrant/machines/aws/id」にEC2のインスタンスIDが記述されているので削除すればAWS起動前と同じ状態になり、 編集、作成すればVagrantで起動していないEC2インスタンスについても 操作することが可能です。

その他

  • vagrant-awsはREADME.mdに書かれていないオプションがあるので使用する際には調査が必要
  • 便利ですけど個人的にはaws-cliとChefを組み合わせた方がいい気がします。
  • 今時はvagrant-aws使わないでProductionでは他のものを使ったほうがいいですね。

便利コマンド

  • AWSのインスタンスのIDを取得
INSTANCE_ID=`cat .vagrant/machines/default/aws/id | sed  "s/$//g"`
  • AWSのパブリックIDアドレスを取得(aws-cliが必要になります)
AWS_PUBLIC_IP=`aws ec2  describe-instances --instance-ids ${AWS_ID} | grep PublicIpAddress | awk {'print $2 '} | sed s/,//g | sed s/\"//g`
86
93
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
86
93