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を有効にしてないだけでした。