Chef/Chef実践入門を読む/05章 Vagrantによるクックブック開発環境の構築/5.6 Vagrant で Amazon EC2 を利用する

Chef/Chef実践入門を読む/05章 Vagrantによるクックブック開発環境の構築/5.6 Vagrant で Amazon EC2 を利用する

これやってみたかったのでちょっと一足先に

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)'!

dummy box を導入する

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 へのフルアクセスの権限を加える。このへんの記述が本には無い。

環境変数を設定する

面倒だからしない

Vagrantfile を作成する

それ用のディレクトリを作る

$ 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

EC2インスタンスを起動する

起動する。本の指定では–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日ほど費やしてしまった。 最近のツール系の情報は進化が早すぎて半年ぐらい前の情報がもう使えないということによくなっているので辛いわ

server_configuration_management/chef/reading_chef_jissen_nyumon/c05/c0506_aws_ec2_by_vagrant.txt · 最終更新: 2019-03-01 18:59 by ore