tjinjin's blog

インフラ要素多めの個人メモ

vagrantを使ってEC2インスタンスを立ててみる

vagrantプラグインを使ってAWS上にEC2インスタンスを立ててみます。

環境

準備

vagrantはすでに導入済みです。 awsについては下記の本を一通りこなしているので、アカウントは取得済みです。 Amazon Web Services 基礎からのネットワーク&サーバー構築

vagrant-awsをインストール

$ vagrant plugin install vagrant-aws
Installing the 'vagrant-aws' plugin. This can take a few minutes...
Installed the plugin 'vagrant-aws (0.6.0)'!

AWSの情報を環境変数に設定する

  • AWS上でアクセスキーIDとシークレットアクセスキーを取得する
    • IAMユーザ作ってから発行したほうがいいよとポップアップがあがったので、適当に作成
    • IAMユーザにpermissionを設定。今回はすぐ消すのでPower Userに。
    • 作成した情報をカレントディレクトリの.envに保存
$ cat .env
export AWS_ACCESS_KEY_ID=XXX
export AWS_SECRET_KEY=XXX

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.define :local do |local|
    local.vm.box = "chef/centos-6.5"
    local.vm.network "private_network", ip: "192.168.33.40"
    local.cache.scope = :box if Vagrant.has_plugin? 'vagrant-cachier'
  end


  config.vm.define 'aws', autostart: false do |aws|
    aws.vm.box_url  = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
    aws.vm.box = "dummy"
    aws.vm.provider 'aws' do |aws, override|
      aws.access_key_id     = ENV['AWS_ACCESS_KEY_ID']
      aws.secret_access_key = ENV['AWS_SECRET_KEY']
      aws.keypair_name = "vagrant-test"

      aws.tags = { 'Name' => 'aws' }
      aws.instance_type = "t1.micro" # CPU:2ECU x1, Memory size:613MiB

      aws.ami = "ami-173fbf16" # "Amazon Linux 2013.03 minimal"
      aws.region = "ap-northeast-1"
      aws.availability_zone = "ap-northeast-1c"
      aws.subnet_id = ENV['AWS_SUBNET_ID']
      aws.security_groups = ENV['AWS_SG_GROUP']

      aws.block_device_mapping = [
        {
        # デバイス名
        'DeviceName' => "/dev/sda1",
        # 名称
        'VirtualName' => "aws",
        # ボリュームサイズ(GB単位)
        'Ebs.VolumeSize' => 8,
          'Ebs.DeleteOnTermination' => true
        }
      ]

      override.ssh.username = "ec2-user"
      override.ssh.private_key_path =  ENV['AWS_SSH_KEY_PATH']

      ## Use pty Vagrantでsshするのに必要?
      override.ssh.pty = true

    end
  end
end

execute

$ vagrant up test --provider=aws
Bringing machine 'test' up with 'aws' provider...

起動後は削除しておきましょう!

感想

割と簡単にできましたね。寝る直前に始めてなんとか終わりました。ただパブリックサブネットに入れたはずなのにパブリックIPが振られてなかった。

  • (追記)サブネット側の問題でAuto assign public ipを有効にしてないだけでした。

link

[Vagrant] VagrantでAWSのEC2インスタンスを管理する #Vagrant - NAVER まとめ

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