アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

AWS ElasticBeanstalkで作られるALBに手を加える

こんにちは!!こんにちは!!
インフラエンジニアの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化しておくことをおすすめします。