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 の方は引数で指定できるが、ローカルにファイルが残らないのがなんだかな...

2014年12月12日金曜日

Beanstalk の ebextensions から composer.phar

Beanstalk の .ebextensions で command 定義にて composer.phar を呼んでいる
だけど、どうしても失敗してしまう。
Beanstalk はプロジェクトルートにある composer.json を勝手に実行してくれる
のになんでそんなことやるの?てツッコミはなしで。
(以下と同じことをやりたいため。
http://stackoverflow.com/questions/17521843/aws-elastic-beanstalk-and-composer)

こんなエラー↓
ERROR [Instance: i-070023f5 Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: [CMD-AppDeploy/AppDeployStage0/EbExtensionPreBuild] command failed with error code 1: Error occurred during build: Command 30composer failed.
これ以上詳細なメッセージがなく困ってたんだけど、仕方なく command: の中で
出力をリダイレクトしてファイルに吐かせることに成功。以下のエラーだった。


  [RuntimeException]                                                                    
  The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly

HOMEが無いから怒られている? env HOME=/root などとしたら解消。

2014年12月9日火曜日

.ebextension を git リポジトリに含めないと実行されない

Beanstalk の件。
.gitignore に .ebextension を書いちゃうとどうやら .config は実行
されないようだ。
.ebextension は git リポジトリから外せない。

2014年12月6日土曜日

PHP から作ったファイルが他のセッションから見えない

Fedora20, Apache 2.4.10, PHP5.5 な環境なんだけど、例えばこんな↓
ことして Apache からアクセスして /var/tmp/foo.txt とか作ってみる。

 <?php
  system("echo abc > /var/tmp/foo.txt");
  print("OK");
?>

でも、ターミナル等からは /var/tmp/foo.txt が見えない。
PHP からなら見える。で、Apache を再起動すると PHP からも見えなくなる。

おそらく mod_php がプログラムからのファイル作成をフックしてあらかじめ
unlink() してるんだろうと思い Apache 起動中に lsof で確認してみたが、
foo.txt は deleted な状態でも open されていない。

この動き不思議すぎるわ。selinux を disabled にしても同じ。
いったいなんじゃこれ。