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

ElasticBeanstalk .ebextensions 逆引き辞典

More than 5 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 の中身がぶちまけられる。


参考ページ

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
ユーザーは見つかりませんでした