1
1

More than 5 years have passed since last update.

AWS Beanstalk(Multi-Container Docker)をPythonで試してみた ! Web編その5 / ebextensions

Last updated at Posted at 2019-04-02

第5回です。Web編の最終回になります。

連載一覧

今回の概要

beanstalkではeb createをするディレクトリに

.ebextensionsというディレクトリを作り、「.config」で終わる

yamlまたはjsonファイルを配備することによって

Benastalkで構築されるAWS環境やEC2サーバの設定を行うことができます。

この記事ではyamlフォーマットを元にサンプルをお伝えします。

設定ファイルについて

設定ファイルは複数ファイルに分けることが可能です。

ファイル名の昇順で読み込まれていく為、

01-xxxx.config、02-yyyy.configなど順序性が必要な場合は

連番のファイル名にします。

1ファイルで複数の設定定義することも可能です。

今回説明する設定内容

  • EC2のタイムゾーン設定
  • EC2のインスタンスタイプ
  • 構築対象のVPCやサブネットの設定
  • ALB(ロードバランサ)の設定やSSLの設定
  • オートスケールの設定
  • CloudWatchLogsの連携設定

その他のAWSサービスの設定や詳細については

公式ドキュメントを確認してください。

EC2のタイムゾーン設定

files:
  "/etc/sysconfig/clock" :
    mode: "000644"
    owner: root
    group: root
    content: |
      ZONE="Asia/Tokyo"
      UTC=false

commands:
  timezone:
    command: ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

EC2のインスタンスタイプ

option_settings:
  aws:autoscaling:launchconfiguration:
    InstanceType: t2.micro

t2インスタンスでは後述のVPCやサブネットの設定が必須です。

構築対象のVPCやサブネットの設定

option_settings:
  aws:ec2:vpc:
    VPCId: vpc-xxxxxxx
    Subnets: subnet-yyyyyyy,subnet-zzzzzzz
    ELBSubnets: subnet-yyyyyyy,subnet-zzzzzzz
    AssociatePublicIpAddress: true

ALB(ロードバランサ)の設定やSSLの設定

option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: application

# HTTPでリクエストを受け付ける
  aws:elbv2:listener:80:
    Protocol: HTTP
    DefaultProcess: default
    ListenerEnabled: true

# HTTPSで独自ドメインを利用する場合
# 証明書を発行してACMに登録済みである必要があります。
  aws:elb:listener:443:
    SSLCertificateId: {ACMのARNを指定}
    Protocol: HTTPS
    DefaultProcess: default
    ListenerEnabled: true

オートスケールの設定

option_settings:
  aws:autoscaling:asg:
    MinSize: 1
    MaxSize: 3

どの条件の時にインスタンスを増減させるかは
公式ドキュメントを確認してください。

各EC2インスタンスの平均CPU使用率がN%の場合、1台増やす・・・など。

CloudWatchLogsの連携設定

files:
  "/etc/awslogs/config/logs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/containers/python-container/app.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "python"]]}`
      log_stream_name = {instance_id}
      file = /var/log/containers/python-container/app.log
      [/var/log/containers/nginx-proxy/access.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "nginx"]]}`
      log_stream_name = {instance_id}
      file = /var/log/containers/nginx-proxy/access.log

commands:
  "01":
    command: chkconfig awslogs on
  "02":
    command: service awslogs restart

インスタンスプロファイル(例:aws-elasticbeanstalk-ec2-role)に
CloudWatchのCreateLogGroup権限を与える必要があります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1