7.20.2014

AWS: Creating New EC2 Instance in N.Virginia by Vagrant

AWS: 米国東部リージョンの EC2 インスタンスを Vagrant で作成する

 

AWS を日常的に使うなら、やはり単価の安い米国リージョンを選びたいもの。

しかし安易に日本のインスタンス作成で使った Vagrantfile を使い回すと、以下のような落とし穴にハマる。

 

エラーメッセージとその対応

 

アベイラビリティゾーンが無い
InvalidParameterValue => Invalid availability zone: [us-east-1a]

何も考えず、リージョン名に「a」を付けるといきなりハマる。

現在、存在するのは「us-east-1b」「us-east-1c」「us-east-1d」のみ。EC2 -> Dashboard で最新情報を確認できる。

 

セキュリティグループが無い
The security group 'vagrant' does not exist

リージョン単位で定義を作成する必要がある。一方、IAM のグループ・ユーザは全リージョン共通。

 

AMI が無い
The image id '[ami-29dc9228]' does not exist

これも、リージョンごとに異なるイメージIDを持っているので、調べ直す必要がある。

 

ネットワーク環境とセキュリティグループの設定が対応していない
InvalidParameterCombination => VPC security groups may not be used for a non-VPC launch

セキュリティグループを作るとき、適当な VPC を選ぶとこうなる。

米国東部リージョンの場合、「サブネットID」または「ネットワーク・インタフェースID」の指定がない場合、そのインスタンスは non-VPC、つまり EC2-Classic 環境に作成されるようだ。

これに対する正しい対応は、正しい「サブネットID」を Vagrantfile の中で指定すること。

AWS Management Console の Services -> Compute & Networking -> VPC -> Subnets の画面で確認できる。

目的の「VPC」および「アベイラビリティゾーン」に対応したサブネットの「Subnet ID」を控え、以下のような記述を Vagrantfile に追加する。

 aws.subnet_id = "subnet-xxxxxxxx"

 

インスタンスタイプが Non-VPC に対応していない
VPCResourceNotSpecified => The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.

セキュリティグループを作るとき、No VPC を選んでしまうとこうなる。
t2.micro インスタンスを立ち上げるためには、VPC に所属させないといけない。

 

セキュリティグループのグループ名が認識されない
InvalidParameterCombination => The parameter groupName cannot be used with the parameter subnet

aws.security_groups には、セキュリティグループの「Group Name」ではなく「Group ID」(sg-xxxxxxxx) を指定する必要があるようだ。

 

キーペアが無い
The key pair 'vagrant' does not exist

キーペアもリージョン単位で作成する必要がある。これが最後の難関。

 

Public IP の永続化

デフォルトの VPC を使えば Public IP が自動的に割り振られるが、これはインスタンスを起動するたびに
変わる可能性がある。

Vagrantfile に次の1行を書けば、自動的に新規の Elastic IP を取得し、立ち上げたインスタンスと紐付けてくれる。
素晴らしい。

aws.elastic_ip = true

 

 

 

References
Related Posts

0 件のコメント:

コメントを投稿