Edited at

ElasticBeanstalk .ebextensions 逆引き辞典

More than 3 years have passed since last update.

ElasticBeanstalkの設定やカスタマイズをする .ebextensions 以下のファイルですが、

これをやるにはどうすんの?というのをいちいち調べないとできないので、調べてやってみた結果を逆引き形式でまとめます。複数のやり方があるので、これがイケてるかどうかは分かりません。

思いつき次第追記していきます。


01. yumでパッケージをインストールする

書くファイル: .ebextensions/01.xxx.config

packages:

yum:
git: []


02. timezone を変更する

書くファイル: .ebextensions/01.xxx.config

commands:

01-set_timezone:
command: cp /usr/share/zoneinfo/Japan /etc/localtime


03. td-agentをインストールする


04. newrelic のagentをインストールする

Amazon Web Services (AWS) users | New Relic Documentation

書くファイル: .ebextensions/01.newrelic-install.config

packages:

yum:
newrelic-php5: []
rpm:
newrelic: http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
commands:
configure_new_relic:
command: newrelic-install install
env:
NR_INSTALL_SILENT: true
NR_INSTALL_KEY: [INSERT LICENSE KEY]


05. mackerelのagentをインストールする

https://gist.github.com/hakobera/897fd96ba2d3c7b112a6


06. ドキュメントルートを指定する

書くファイル: .ebextensions/01.xxx.config

option_settings:

- namespace: aws:elasticbeanstalk:container:php:phpini
option_name: document_root
value: /public


07. root volume のサイズを変更する

デフォルトだと 8GBですが、少なすぎる場合は大きくする。

書くファイル: .ebextensions/01-change-root-volume-size.config

option_settings:

- namespace: aws:autoscaling:launchconfiguration
option_name: RootVolumeSize
value: "20"
- namespace: aws:autoscaling:launchconfiguration
option_name: RootVolumeType
value: gp2

※ 2015/06/19 書き方が古いとのことで修正しました。


08. php.ini を設定する


option_settings で指定する場合

いくつかの設定項目は、option_settings で指定できる。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html#command-options-php

指定できる項目は下記


  • document_root

  • memory_limit

  • zlib.output_compression

  • allow_url_fopen

  • display_errors

  • max_execution_time

  • composer_options

(記述例)

option_settings:

- namespace: aws:elasticbeanstalk:container:php:phpini
option_name:<オプション名>
value: <値>


独自の php.ini を設置する場合

上記の option_settingsにない項目を設定したい場合は、独自のiniファイルを作って、php.ini置き場に置けばよい。

(あとで書く)


09. cronを設定する

書くファイル: .ebextensions/99.install-crontab.config

    "/opt/elasticbeanstalk/hooks/appdeploy/enact/99-install-crontab.sh" :

mode: "000777"
owner: ec2-user
group: ec2-user
content: |
#!/usr/bin/env bash

cp -f /var/app/ondeck/crontab/ec2-user /etc/cron.d/ec2-user
chmod 644 /etc/cron.d/ec2-user

これは、<プロジェクトディレクトリ>/crontab/ec2-user というファイルに cronの内容を書いておいて、それを /etc/cron.d/ にコピーする方法です。

crontab/ec2-user のファイルの中身は普通の crontabの記述とは違って下記のような感じです。

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ec2-user
HOME=/

*/30 * * * * ec2-user <実行するコマンド>


10. ec2インスタンスにタグ付けする

(あとで書く)


11. instance profile を指定する

$ eb create <環境名> \

--instance_profile <IAMロール> \


12. vpc 内に起動する

Environment生成時に指定する方法

$ eb create <環境名> \

--vpc.id vpc-xxxxxxxx \
--vpc.ec2subnets subnet-xxxxxxxx \


13. vcpのセキュリティグループを指定する

Environment生成時に指定する方法

$ eb create <環境名> \

--vpc.id vpc-xxxxxxxx \
--vpc.ec2subnets subnet-xxxxxxxx \
--vpc.securitygroups sg-xxxxxxxx \


14. インスタンスの鍵を指定する


Environment生成時に指定する方法

$ eb create <環境名> \

--keyname <キー名> \


option_settings で指定する方法

option_settings:

- namespace: aws:autoscaling:launchconfiguration
option_name: EC2KeyName
value: MyKeyName


15. cname を指定する

Environment生成時に指定する方法

$ eb create <環境名> \

--cname <CNAME> \

CNAMEは、 xxxx.elasticbeanstalk.com の xxxx の部分になる。


16. deploy時に composer update する (PHP)

(あとで書く)


17. カスタムAMIを使う

https://www.hands-lab.com/tech/entry/320.html

1)ベースとするBeanstalk のAMIを元にInstanceを立てる(Platform毎にいろいろあるので選択)

2)Instanceをカスタマイズ

3)Instanceを元にAMIを作成

4)Beanstalk の使うAMI を3)に設定

本家ドキュメント

http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.customenv.html


18. ヘルスチェックのURLを設定する


option_settings で指定

option_settings:

- namespace: aws:elasticbeanstalk:application
option_name: "Application Healthcheck URL"
value: /check.php


19. SNSの通知を設定する


option_settings で指定

option_settings:

- namespace: aws:elasticbeanstalk:sns:topics
option_name: "Notification Endpoint"
value: hoge@example.com


20. ELBのHTTPSを設定する(証明書を指定)


option_settings で指定

option_settings:

- namespace: aws:elb:loadbalancer
option_name: LoadBalancerHTTPSPort
value: 443
- namespace: aws:elb:loadbalancer
option_name: SSLCertificateId
value: "arn:aws:iam::xxxxxx:server-certificate/cloudfront/xxxxx/xxxxxxxx"
- namespace: aws:elb:loadbalancer
option_name: LoadBalancerSSLPortProtocol
value: HTTPS


21. インスタンスタイプを指定する


Environment生成時に指定する方法

$ eb create <環境名> \

--instance_type c3.large


option_settings で指定

option_settings:

- namespace: aws:autoscaling:launchconfiguration
option_name: InstanceType
value: t2.micro


22. AutoScaleのトリガー設定


option_settings で指定

下記は、2分間のCPU使用率が40%だったら1台増やす、20%だったら1台減らす設定。

option_settings:

- namespace: aws:autoscaling:trigger
option_name: MeasureName
value: CPUUtilization
- namespace: aws:autoscaling:trigger
option_name: Statistic
value: Average
- namespace: aws:autoscaling:trigger
option_name: Unit
value: Percent
- namespace: aws:autoscaling:trigger
option_name: UpperThreshold
value: "40"
- namespace: aws:autoscaling:trigger
option_name: LowerThreshold
value: "20"
- namespace: aws:autoscaling:trigger
option_name: UpperBreachScaleIncrement
value: "1"
- namespace: aws:autoscaling:trigger
option_name: LowerBreachScaleIncrement
value: "-1"
- namespace: aws:autoscaling:trigger
option_name: BreachDuration
value: "2"


23. ファイルをダウンロードして展開する

.ebextensions/xxx.config

sources:

/var/app/current/public/: https://s3-ap-northeast-1.amazonaws.com/xxxxxxx/xxxxxxx.tgz

※ /var/app/current/public/ に xxxxxxx.tgz の中身がぶちまけられる。



参考ページ