Elastic BeanstalkでヘルスチェックURLを.ebextensionsで設定しようとしてハマったので記録しておく。
発生したこと
以下のような.ebextensionsを書いてElastic Beanstalkにデプロイしても反映されない。
option_settings:
aws:elasticbeanstalk:application:
Application Healthcheck URL: /
原因
Management ConsoleでElastic Beanstalkの環境を作成していた。
Management Consoleから環境を作成するとヘルスチェックURLを設定することになり空を設定していた。
設定オプション - AWS Elastic Beanstalkのように優先度順としては以下のようになっていてAPIで設定した値が優先される。
- Management ConsoleなどのAPIで設定した値
- .ebextensionsで設定した値
- デフォルト値
Management Console上ではどうしようもないが上のリンク先にあるようにaws-cliやeb-cliで設定された値を削除することで.ebextensionsが効くようになる。
# aws-cliでの削除例
$ aws elasticbeanstalk update-environment --application-name [アプリ名] --environment-name [環境名] --options-to-remove "Namespace=aws:elasticbeanstalk:application,OptionName=Application Healthcheck URL"
APIで設定された値かどうかの判別
Elastic Beanstalkで環境の設定を保存しておき、s3の以下の場所に保管されている設定ファイルの中身を見るとAPIで設定した値が書いてある。
(もっと簡単な確認方法があったら教えてください)
/elasticbeanstalk-[region]-[id]/resources/templates/[アプリ名]
- aws-cliで環境を作成した場合の設定ファイルの中身
EnvironmentConfigurationMetadata:
DateCreated: '1465284305000'
DateModified: '1465284305000'
SolutionStack: 64bit Amazon Linux 2016.03 v2.1.2 running Ruby 2.3 (Passenger Standalone)
EnvironmentTier:
Type: Standard
Name: WebServer
AWSConfigurationTemplateVersion: 1.1.0.0
- eb-cliで環境を作成した場合の設定ファイルの中身
EnvironmentConfigurationMetadata:
DateCreated: '1465283380000'
DateModified: '1465283380000'
SolutionStack: 64bit Amazon Linux 2016.03 v2.1.2 running Ruby 2.3 (Passenger Standalone)
OptionSettings:
aws:elasticbeanstalk:command:
BatchSize: '30'
BatchSizeType: Percentage
aws:elb:policies:
ConnectionDrainingEnabled: true
aws:elb:loadbalancer:
CrossZone: true
aws:elasticbeanstalk:environment:
ServiceRole: aws-elasticbeanstalk-service-role
aws:elasticbeanstalk:healthreporting:system:
AWSEBHealthdGroupId: XXX
SystemType: enhanced
aws:autoscaling:launchconfiguration:
IamInstanceProfile: aws-elasticbeanstalk-ec2-role
EC2KeyName: labo
InstanceType: t2.micro
aws:autoscaling:updatepolicy:rollingupdate:
RollingUpdateType: Health
RollingUpdateEnabled: true
EnvironmentTier:
Type: Standard
Name: WebServer
AWSConfigurationTemplateVersion: 1.1.0.0
- Management Consoleで環境を作成した場合の設定ファイルの中身
EnvironmentConfigurationMetadata:
DateCreated: '1465285233000'
DateModified: '1465285233000'
SolutionStack: 64bit Amazon Linux 2016.03 v2.1.2 running Ruby 2.3 (Passenger Standalone)
OptionSettings:
aws:elasticbeanstalk:command:
BatchSize: '30'
BatchSizeType: Percentage
DeploymentPolicy: Rolling
aws:elasticbeanstalk:sns:topics:
Notification Endpoint: ''
aws:elb:policies:
ConnectionDrainingEnabled: true
ConnectionDrainingTimeout: '20'
aws:elb:loadbalancer:
CrossZone: true
aws:elasticbeanstalk:environment:
ServiceRole: aws-elasticbeanstalk-service-role
EnvironmentType: LoadBalanced
aws:elasticbeanstalk:application:
Application Healthcheck URL: ''
aws:elasticbeanstalk:healthreporting:system:
AWSEBHealthdGroupId: XXX
SystemType: enhanced
HealthCheckSuccessThreshold: Ok
aws:autoscaling:launchconfiguration:
IamInstanceProfile: aws-elasticbeanstalk-ec2-role
InstanceType: t1.micro
EC2KeyName: ''
aws:autoscaling:updatepolicy:rollingupdate:
RollingUpdateType: Health
RollingUpdateEnabled: true
EnvironmentTier:
Type: Standard
Name: WebServer
AWSConfigurationTemplateVersion: 1.1.0.0