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
0 件のコメント:
コメントを投稿