2014年12月23日火曜日

Beanstalk の eb コマンド (v.2.6.4 not v3) と VPC

Beanstalk のコマンドラインインタフェースである eb コマンドについて。v2.6.4 の eb コマンドは VPC と相性があまり良くない感じ。

eb startして environment を作成後、GUI で VPC を設定して eb stop すると、.elasticbeanstalk/optionsettings.<環境名> に以下のような値が返ってくる。

[aws:ec2:vpc]
Subnets=subnet-3fxxxxx
VPCId=vpc-dexxxxx
これをそのまま次回 eb start すると、すごく長い時間 launching... 状態となり以下のようなエラーが発生し environment が正常起動しない。どうやら、EC2 が正常起動したことを Beanstalk に通知できないでいるらしい。外部に出られる経路を確保する必要があるようだ。GUI的に Beanstalk 内の VPC 設定画面における「Associate Public IP Address」の
設定の部分だが、これが eb コマンド側の optionsettings.xxx に戻ってこないのが問題。

 Stack named 'awseb-e-xxxxxxxxxxxx' aborted operation. Current state: 'CREATE_FAILED' Reason: The following resource(s) failed to create: [ AWSEBInstanceLaunchWaitCondition ]. 
 The EC2 instances failed to communicate with AWS Elastic Beanstalk, either because of configuration problems with the VPC or a failed EC2 instance. Check your VPC configuration and try launching the environment again.


これを回避するため、eb start 前に optionsettings.xxx に以下のように
AssociatePublicIpAddress=true を追加するのが良い。

[aws:ec2:vpc]
Subnets=subnet-3fxxxxx
VPCId=vpc-dexxxxx
AssociatePublicIpAddress=true


なお、ELB 配下にいて Multi AZ な環境にしている場合は、以下の設定も引き継がれない
ので、eb start 前に要設定。

[aws:elb:loadbalancer]
CrossZone=true


ただ、eb start した直後に何故かこの設定が消されてしまう。eb start 毎度これを設定
しなきゃならんのがかなりダルい。


eb の v3 の方は引数で指定できるが、ローカルにファイルが残らないのがなんだかな...

0 件のコメント:

コメントを投稿