menu
書いてる野郎
orebike@gmail.com
これやってみたかったのでちょっと一足先に
$ vagrant plugin install vagrant-aws Installing the 'vagrant-aws' plugin. This can take a few minutes... Installed the plugin 'vagrant-aws (0.6.0)'!
EC2 はファイルとしてイメージが存在するわけではないのでつっかい棒として dummy box というのを入れておくらしい
$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box ==> box: Adding box 'dummy' (v0) for provider: box: Downloading: https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box ==> box: Successfully added box 'dummy' (v0) for 'aws'!
中身がないのですぐに終わる
ここから EC2へ
っで ここ
画面上部の
ダイアログが開くのだが何か本と違う
2015-02-06 現在 VPC を使わないという選択肢がなくなっている。とりあえずここは自分のデフォルトのやつだけ選べたのでそれにする。 ルールに関しても Inbound だけじゃなく Outbound も作れるようになっている。とりあえず Inbound だけ設定
これ前に作ったやつあるからそれでやる
普通に Web のインターフェースから操作する分には必要ないのだが Vagrant 側からやる時にアクセスキーが必要になるので作る まず ここに行って、ユーザーを作る
作ったら Access Key ID と Secret Access Key が画面に表示されるのでメモしておく
↑で作成したユーザーに EC2 へのフルアクセスの権限を加える。このへんの記述が本には無い。
面倒だからしない
それ用のディレクトリを作る
$ mkdir ec2sample1 $ cd ec2sample1
初期化
$ vagrant init
出来上がった Vagrantfile を編集する。結果から言うとこのようなソースになる
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "dummy" config.vm.synced_folder ".", "/vagrant", type: "rsync" config.vm.provider :aws do |aws, override| # ユーザーを作った時にメモったアクセスキー aws.access_key_id = "XXXXXXXXXXXXXXXXXXXX" aws.secret_access_key = "xxxxxxxxxxxxx+XXXXXXXXX/xxxxxxxxxxxxxxxx" # AWSで秘密鍵と公開鍵を作った時に指定した名前 aws.keypair_name = "hoge" # userの名前 今回は AWS EC2 なのでこのデフォルトのユーザーを使う override.ssh.username = "ec2-user" # 秘密鍵 override.ssh.private_key_path = "~/.ssh/hoge.pem" # これがミソのフラグ override.ssh.pty = true # 東京ならこれを指定する。起動するとリージョンの指定の後ろにアルファベットがつくがそれは書かない aws.region = "ap-northeast-1" # AMI 指定、コレは 2015-02-12 現在最新の Amazon Linux のもの aws.ami = "ami-18869819" # これ無料分が毎月回復するやつ。本ではt1.micro になっているが現在は t2 を使うっポ aws.instance_type = "t2.micro" # セキュリティグループを名前で指定する aws.security_groups = ["sample1"] # タグを打つ。特に必要ないのだが名前ぐらいはやっておかないとコンソールで判別できなくなるので aws.tags = { "Name" => "hogehoge" } end end
起動する。本の指定では–provider=aws
オプションをつけているが、実際は必要なかった。
$ vagrant up
OK!と言いたいところだが実はあっさりできなかった。
まず本にある
aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers\n"
の記述はtty以外の経由でのsudoを可能にするためのものでこの記述が無いと、
ローカルとファイル共有するためのディレクトリ /vagrant
を作る際に失敗する。
aws.user_data というのは provisioning 時に最初に任意のコマンドを打ち込めるようになっている設定である。 手動でEC2インスタンスを作った場合も同じような設定項目があるアレである。
このようなエラーメッセージが出る。検索用に貼っておく
==> default: Rsyncing folder: /Users/hoge/myvagrant/ec2sample1/ => /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
ネットを調べてもこの対応策が真っ先にイロイロ出てくる。
しかしこの設定をしても vagrant up
が失敗する。 rsync の設定部分で失敗する。
実はこの対策は古い Vagrant 用のようで実際は不要である。 今使っているバージョン(vagrant 1.7.2)では新しいオプションがあってそれで回避可能。 それが、
override.ssh.pty = true
の設定で、この設定をすることにより aws.user_data
の記述は不要になる。
しかしこの設定をしても vagrant up
が失敗する。 同様に rsync の設定部分で失敗する
==> default: Rsyncing folder: /Users/hoge/myvagrant/ec2sample1/ => /vagrant There was an error when attempting to rsync a synced folder. Please inspect the error message below for more info. Host path: /Users/hoge/myvagrant/ec2sample1/ Guest path: /vagrant Command: rsync --verbose --archive --delete -z --copy-links --no-owner --no-group --rsync-path sudo rsync -e ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i '/Users/hoge/.ssh/hoge.pem' --exclude .vagrant/ /Users/hoge/myvagrant/ec2sample1/ ec2-user@999.999.999.999:/vagrant Error: Warning: Permanently added '999.999.999.999' (RSA) to the list of known hosts. sudo: sorry, you must have a tty to run sudo rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
なんだか意味不明である。ちなみに失敗はしているがVM自体は立ち上がっているので不要ならば消しておこう
vagrant-aws の github の issue をイロイロ読んでいくと、これは バージョン 0.6.0 特有の問題であるということが判明。 早速
$ vagrant plugin uninstall vagrant-aws $ vagrant plugin install vagrant-aws --plugin-version 0.5.0
で、一つ前のバージョンの 0.5.0 を入れたところ正常に vagrant up
が完了した。
問題の調査に3日ほど費やしてしまった。 最近のツール系の情報は進化が早すぎて半年ぐらい前の情報がもう使えないということによくなっているので辛いわ