Elastic BeanstalkでヘルスチェックURLを.ebextensionsで設定しようとしてハマった

Elastic BeanstalkでヘルスチェックURLを.ebextensionsで設定しようとしてハマったので記録しておく。

## 発生したこと

以下のような.ebextensionsを書いてElastic Beanstalkにデプロイしても反映されない。

```yaml
option_settings:
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: /
```

## 原因

Management ConsoleでElastic Beanstalkの環境を作成していた。
Management Consoleから環境を作成するとヘルスチェックURLを設定することになり空を設定していた。

[設定オプション - AWS Elastic Beanstalk](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/command-options.html#configuration-options-precedence)のように優先度順としては以下のようになっていてAPIで設定した値が優先される。

* Management ConsoleなどのAPIで設定した値
* .ebextensionsで設定した値
* デフォルト値

Management Console上ではどうしようもないが上のリンク先にあるようにaws-cliやeb-cliで設定された値を削除することで.ebextensionsが効くようになる。

```bash
# 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で設定した値が書いてある。
(もっと簡単な確認方法があったら教えてください)

```bash
/elasticbeanstalk-[region]-[id]/resources/templates/[アプリ名]
```

* aws-cliで環境を作成した場合の設定ファイルの中身

```yaml
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で環境を作成した場合の設定ファイルの中身

```yaml
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で環境を作成した場合の設定ファイルの中身

```yaml
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
```