こんにちは!!こんにちは!!
インフラエンジニアのyamamotoです。
ElasticBeanstalkを使うと、複雑なインフラ構成も簡単に構築できますよね。
でもちょっと細かいところに手を入れようとすると、なかなか難しかったりするのが難点です。
今回は、ElasticBeanstalkで作られるALBに手を加えてみたいと思います。
ALBの設定を変更する
実はElasticBeanstalkでは、 .ebextensions
以下のファイルでいろいろ細かな設定をすることができます。
一例として、リスナーの設定を変更するには、下記のように設定します。
Resources: AWSEBV2LoadBalancerListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: Conditions: - Field: "path-pattern" Values: - "/notaccess/*" Actions: - Type: "fixed-response" FixedResponseConfig: StatusCode: "404" ListenerArn: Ref: AWSEBV2LoadBalancerListener Priority: 1 AWSEBV2LoadBalancerListenerRule443: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: Conditions: - Field: "path-pattern" Values: - "/notaccess/*" Actions: - Type: "fixed-response" FixedResponseConfig: StatusCode: "404" ListenerArn: Ref: AWSEBV2LoadBalancerListener443 Priority: 1
上記では、特定のパスにアクセスしようとするとALBで404を返す設定が入っています。
キモとなるのは ListenerArn
で、本来はARNを指定しなければならないところを、Refで定数を参照しています。
AWSEBV2LoadBalancerListener
ならびに AWSEBV2LoadBalancerListener443
はElasticBeanstalkで作られるALBの80ポートと443ポートのリスナーのARNを表しています。
この指定を入れることで、 .ebextensions
以下の定義で、ElasticBeanstalkで作られるALBのリスナーの設定が可能になっています。
ElasticBeanstalkは裏でCloudFormationが動いています。そのため .ebextensions
以下のファイルでもCloudFormationの多彩な定義を使うことが可能になっています。
たとえば、インスタンスを別のALBのターゲットグループに登録したり、CloudWatchのアラームを設定したりすることも可能です。
さいごに
ElasticBeanstalkで設定できないところは、ついついコンソールから設定してしまいがちですが、そうすると再構築する際にまたコンソールから設定するはめになってしまいます。
可能な限り .ebextensions
以下のファイルで設定してInfrastracture as Code化しておくことをおすすめします。