Help us understand the problem. What is going on with this article?

Elastic Beanstalk メモ

More than 3 years have passed since last update.

注意!

この記事は eb cli の ver2の頃の内容のため古いです。
eb cli ver3 については、下記の方が参考になると思います。

AWS - ElasticBeanstalk .ebextensions 逆引き辞典 - Qiita


ドキュメント
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_PHP_eb.sdlc.html

やったこと

1. CLIツールを入れてパスを通す

http://aws.amazon.com/code/6752709412171743
からダウンロード

解凍したファイルを/usr/local/AWS-ElasticBeanstalk-CLI-2.6.0/に置いて、
.zshrc に下記を追記

export PATH=$PATH:/usr/local/AWS-ElasticBeanstalk-CLI-2.6.0/eb/macosx/python2.7/
export PATH=$PATH:/usr/local/AWS-ElasticBeanstalk-CLI-2.6.0/api/bin/

2. eb init

$ eb init

(いろいろ聞かれる)

$ eb start
Starting application "xxxxxxxx".
Would you like to deploy the latest Git commit to your environment? [y/n]: 
Application is available at "xxxxxx-dev-xxxxxx.elasticbeanstalk.com".

しばらくして 上記のURLにアクセスすると画面が表示された。

ちょっと編集して commit.

$ git aws.push 

でデプロイされることを確認。

ハマリポイント

1. eb init の Select a solution stack. で先に進めなくなる。

http://stackoverflow.com/questions/16600746/no-solution-stacks-listed-in-elastic-beanstalk-configuration

$ eb init
   :
   :
Select a solution stack.
Available solution stacks are:
Select (1 to 0): 1

ここで、何を入れても同じ質問を繰り返される。原因はIAMに権限が不足してる。

2. /.elasticbeanstalk/optionsettings.*** の罠

/.elasticbeanstalk/optionsettings.{ApplicationName}* のファイルに下記のような部分があったので、

[aws:elasticbeanstalk:container:php:phpini]
allow_url_fopen=On
composer_options=
display_errors=On
document_root=/public
max_execution_time=60
memory_limit=256M
zlib.output_compression=Off

下記の項目を追加してみたが反映されない。

date.timezone="Asia/Tokyo"

どうも、元からある設定項目しか変更できないっぽい。
なので、.ebextensions で php.ini の設定をするようにする。

ちなみに、optionsettings.{ApplicationName}* のファイルを変更をしたあと、

$ eb update

とすると、環境のアップデートができる模様。

3. .ebextensions に php.ini に値を追加しても反映されない

デプロイ後 apache を再起動するようにした。

files:
  "/etc/php-5.5.d/project.ini" :
    mode: "000644"
    owner: root
    group: root
    content: |
      date.timezone="Asia/Tokyo"

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/99_reload_http_server.sh" :
    mode: "000777"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/support/envvars

      service httpd restart

datetime.timezone みたいに、PHP_INI_ALL で設定変更が可能なものは、
config.php とかで ini_set() でセットしたほうが良さそう。
php.ini設定が反映されてなくてバグるとか嫌だ。
http://www.php.net/manual/ja/ini.list.php

4. AWSマネジメントコンソールで Key pair設定したら deployできなくなった

.elasticbeanstalk/optionsettings.*** のEC2KeyNameを設定してなかったので、不整合が起きたぽい。

[aws:autoscaling:launchconfiguration]
EC2KeyName=********* ← ここに追記
InstanceType=t1.micro

こっちにも書いて解決。

5. .ebextensions/ の configファイルに composer.phar update 書いてもアップデートできない

/var/log/eb-tools.log というログ見たら

sh: git: command not found 

というログが出てた。composer ってgit使ってるの?

config ファイルに下記のように書いて解決。

packages:
  yum:
      git: []

6. 何か作業したら git aws.push できなくなった。

何をやったらできなくなったのかが不明…

http://d.hatena.ne.jp/j3tm0t0/20120404/1333531368

↑ここを見てとりあえず、AWSDevTools-RepositorySetup.sh を叩いたら治った。

/usr/local/AWS-ElasticBeanstalk-CLI-2.6.0/AWSDevTools/Linux/AWSDevTools-RepositorySetup.sh

根本的に何がダメだったのかが分かってないのでなんとかしたい。

7. OptionSettingFile フルパス問題

.elasticbeanstalk/config に記載のある、OptionSettingFile のパスがフルパスで書かれていた。
プロジェクトのディレクトリごと移動した影響でパスが無効になっていたので、いくら optionsettings.*** のファイルをいじって eb update しても反映されなくてはまった。

相対パスじゃだめなのかな… 試してない。

8. git aws.push で注釈付きタグがデプロイできない

git aws.push でデプロイする時、タグを指定できるんだけど、注釈付きタグだと
なぜか出来ない。

$ git tag -a ver1

$ git aws.push -c ver1
ver1 is a tag. The value of the --commit option must refer to commit

おそらく、rev-parse が注釈付きタグの場合コミットのハッシュではなく、
注釈付きタグのハッシュを返すのが原因ぽい。
(普通のタグの場合は コミットのハッシュ値を返す。)

デプロイ時のコマンド発行順

  1. コンフィグファイルの "commands"
  2. /opt/elasticbeanstalk/hooks/appdeploy/pre/*
  3. コンフィグファイルの "container_commands"
  4. /opt/elasticbeanstalk/hooks/appdeploy/enact/*
     → 新バージョン有効化時に行うべき処理(アプリケーション・サーバーの再起動など)

  5. /opt/elasticbeanstalk/hooks/appdeploy/post/*
    → デプロイ後に行うべき処理(バックグラウンドワーカーの起動など)

参考

PHP 環境をカスタマイズし設定する
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_PHP_custom_container.html

AWS Elastic Beanstalk で PHP コンテナを設定する
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_PHP.container.html

[AWSマイスターシリーズ] AWS Elastic Beanstalk
http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk
.ebextensions周りの説明が詳しいので参考になる。

mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした