第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権限を与える必要があります。