Vagrantは基本的にVirtualBoxみたいな仮想化ソフトウェアをローカルにインストールして使っている人が多いと思いますが、この仮想化ソフトウェアのことをプロバイダと呼びます。Vagrant AWS Providorプラグインを使うことにより、AWS EC2をプロバイダとして使うことができます。
結構あちこちで解説されているネタでもあるので備忘録的なsomethingとして軽く流します。
なお、AWSについての知識も少なからず必要になるので、事前にVPCとEC2を触って知識をつけてから試すことをおすすめします。
Contents
環境
以下の環境が既にインストール済み
– Mac OS X El Capitan 10.11.3
– Vagrant 1.7.4
必要な情報を準備
AWSマネジメントコンソール、またはAWS CLIから、次の情報を取得しておきます。
後ろの括弧内は今回設定するサンプル値です。
- EC2を操作する権限のあるアクセスキー [your_acc_key, your_sec_acc_key]
- 起動するAMI ID [ami-59bdb937]
- リージョンコード [ap-northeast-1]
- VPCのSubnet ID [subnet-5a1fb42a]
- セキュリティグループID [sg-42c13b8]
- キーペア名 [kp1234]
セキュリティグループは操作しているネットワークから接続できるようにSSHポートを開いておく必要があります。
Vagrantにプラグインをインストール
|
1 2 3 |
$ vagrant plugin install vagrant-aws Installing the 'vagrant-aws' plugin. This can take a few minutes... Installed the plugin 'vagrant-aws (0.7.0)'! |
アクセスキーを環境変数に設定
Vagrantfileは基本的にバージョン管理対象なので、IAMのクレデンシャルは環境変数から読み込むことにします。
|
1 2 |
$ export AWS_ACCESS_KEY="your_acc_key" $ export AWS_SECRET_ACCESS_KEY="your_sec_acc_key" |
Vagrantfileの設定
こんな感じで作ります。適宜環境に合わせて書き換えてください。
なお、AZコードやVPC IDなども指定可能ですが、サブネットIDがあれば不要なので省略しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Vagrant.configure("2") do |config| config.vm.box = "dummy" config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" config.ssh.pty = true config.vm.synced_folder ".", "/vagrant" config.vm.provider :aws do |aws, override| # IAM Credentials aws.access_key_id = ENV["AWS_ACCESS_KEY"] aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"] # Location and Networking aws.region = "ap-northeast-1" aws.subnet_id = "subnet-5a1fb42a" aws.security_groups = ["sg-42c13b81"] aws.associate_public_ip = true # Instance Settings aws.ami = "ami-59bdb937" aws.instance_type = "t2.micro" # Instance Credentials aws.keypair_name = "kp1234" override.ssh.username="ec2-user" override.ssh.private_key_path = '~/.ssh/secret_key_for_kp1234.pem' # Additional options aws.tags = { 'Name' => 'vagrant-vm', } end end |
動かしてみる
起動するときはプロバイダを指定して。一度起動した後は省略できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ vagrant up --provider=aws Bringing machine 'default' up with 'aws' provider... ==> default: Warning! The AWS provider doesn't support any of the Vagrant ==> default: high-level network configurations (`config.vm.network`). They ==> default: will be silently ignored. ==> default: Warning! You're launching this instance into a VPC without an ==> default: elastic IP. Please verify you're properly connected to a VPN so ==> default: you can access this machine, otherwise Vagrant will not be able ==> default: to SSH into it. ==> default: Launching an instance with the following settings... ==> default: -- Type: t2.micro ==> default: -- AMI: ami-59bdb937 ==> default: -- Region: ap-northeast-1 ==> default: -- Keypair: kp1234 ==> default: -- Subnet ID: subnet-5a1fb42a ==> default: -- Security Groups: ["sg-42c13b81"] ==> default: -- Block Device Mapping: [] ==> default: -- Terminate On Shutdown: false ==> default: -- Monitoring: false ==> default: -- EBS optimized: false ==> default: -- Source Destination check: ==> default: -- Assigning a public IP address in a VPC: true ==> default: -- VPC tenancy specification: default ==> default: Waiting for instance to become "ready"... ==> default: Waiting for SSH to become available... ==> default: Machine is booted and ready for use! |
vagrant statusで running (aws) と表示されれば接続できます。
|
1 2 3 4 5 6 7 8 |
$ vagrant ssh Last login: Wed Feb 17 18:43:18 2016 from your.host __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| [ec2-user@ip-aws-local-ip ~]$ |
ちなみに起動したインスタンスIDは .vagrant/machines/default/aws/id に保存されていて、haltで停止してupし直した場合などはこのIDのインスタンスが立ち上がります。
使えないsynced_folder
synced_folder機能はrsync over sshで実現されているために、最小限のサポートに留まります。
というのは、vagrant up|reload|provision のタイミングでしかrsyncされません。
個人的にはこれを開発用で使いたかったので、リアルタイムrsyncしてほしかったです…。
IDEの機能を使うか、lsyncd等を使えばできなくもないでしょうけれど、どちらにしろ自分で実装する必要がありますね。
もちろんこの環境を本番用のデプロイに使うのもナンセンスなので、ちょっと使いどころが微妙な感じ。
所感
リアルタイムでsyncしてほしかったトコロ…。また色々試行錯誤してみるかもしれません。


