Windows7+Cygwinな環境からvagrant-aws使ってみた。

経緯

DockerとかAlminiumとか試したいものがいろいろあるのだけど、たいだい64bit版OSでないと入らなくなってきてる。 自宅のPCは一応64bitマシンなのだけど、vt-xが有効にできないため、仮想環境で64bitOS使えない

なるべくお金かけずに出来ないかなと考えた末 昨年もらったAWSの無料利用枠の期限が迫ってきてるのを思い出したので、使ってみることに。

やり方

naoyaさんの記事を参考に

Vagrant 1.1 で EC2 を vagrant up - naoyaのはてなダイアリー

Vagrantの公式サイトからwin版を落としてきてインストール

# awsプラグイン
$ vagrant.bat plugin install vagrant-aws
# 適当にディレクトリを切って移動
$ mkdir -p ~/work/aws && cd ~/work/aws

$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
$ vagrant.bat init
$ emacs Vagrantfile

バージョンアップしてVagrantfileの鍵の指定方法が微妙に変わってたのでこちらを参考に修正 vagrant 1.2を使ってみる - Qiita

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "dummy"

  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 = "ec21" #先にWeb上でKeyPairを生成するか、インポートしておく必要あり

    aws.ami = "ami-0d13700c"
    aws.availability_zone = "ap-northeast-1a"
    aws.region = "ap-northeast-1"
    aws.security_groups = ['test'] #先にWeb上でセキュリティグループを設定する必要(sshのポートあけないと繋げない)
    aws.instance_type = "t1.micro"

    # ログインユーザーと秘密鍵の指定部分
    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "~/.ssh/ec21.pem"
  end
end

アクセスキーを環境変数に設定するスクリプト

env.sh

#!/bin/bash
export AWS_ACCESS_KEY_ID=<アクセスキーID>
export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>

加えて、cygwin環境だとvagrant upの最期に共有ディレクリをつくろうとしてエラーがでる。 sudoerの中で、requirettyされてるため

vagrant-awsを使う際はuser_dataを設定してみよう - akadama vagrant-awsでmkdir -p /vagrantで失敗する - あんこの成長記録

強引だけど適当にソースいじってmkdirしないようにしてしまった。

$ emacs ~/.vagrant.d/gems/gems/vagrant-aws-0.4.1/lib/vagrant-aws/action/sync_folders.rb 

 50            # on windows rsync.exe requires cygdrive-style paths
 51            if Vagrant::Util::Platform.windows?
 52              hostpath = hostpath.gsub(/^(\w):/) { "/cygdrive/#{$1}" }
+ 53              return

実行

$ sh env.sh
# 立ち上げ
$vagrant.bat up --provider=aws

# 接続
$vagrant.bat ssh

# 止める(インスタンスを消すとき) cygwinからだと--forceをつけないととまらないっぽい
$vagrant.bat destroy --force
 

cygwinだと、vagrant upでなくvagrant.bat upを実行しないと証明書関連のエラーがでる。

An error occurred while executing multiple actions in parallel.
Any errors that occurred are shown below.

An unexpected error ocurred when executing the action on the
'default' machine. Please report this as a bug:

Unable to verify certificate, please set `Excon.defaults[:ssl_ca_path] = path_to
_certs`, `ENV['SSL_CERT_DIR'] = path_to_certs`, `Excon.defaults[:ssl_ca_file] =
path_to_file`, `ENV['SSL_CERT_FILE'] = path_to_file` or `Excon.defaults[:ssl_ver
ify_peer] = false` (less secure).

C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/ssl_socket.rb:76:i
n `connect'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/ssl_socket.rb:76:i
n `initialize'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:373:
in `new'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:373:
in `socket'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:122:
in `request_call'
(略)

感想

週に2~3時間起動する程度だったらVPS借りるより安くすみそう。 $0.020 /1 時間だから 1ドル=100円 1ヶ月5週として 0.020 * 3 * 5 = 3ドル 300円程度

ServersMan@VPS(490円/月)

digitalOceanも気になる。 徳丸浩の雑記帳: 試験環境用VPSとして1時間1円から使えるDigitalOceanが安くて便利