Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

使い方

  • 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`
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした