LoginSignup
6
7

More than 5 years have passed since last update.

AWS Elastic Beanstalk で CLB から ALB への移行

Last updated at Posted at 2018-03-17

2018/04/12 の更新

Elastic BeanstalkコンソールからALBが選択できるようになりました!

という発表で狂喜乱舞でしたが、よく調べるとこういうことでした。

  • 新規作成時に、管理コンソールで、ALB/CLBを選択可能になった
  • ALBの設定を、管理コンソールで更新できる
  • CLBからALBへの移行は、やはり↓のように頑張る必要がある

前段

EBをALBで新規に立てるときは、以下のように簡単にできます。
https://dev.classmethod.jp/cloud/aws/elastic-beanstalk-support-alb/

しかし、いますでに本番でガッツリ運用してるEBを移行する方法は、ググっても出てきません。

いずれはウィザードでALBで組めるようになったり、設定画面でALBに組み直せたり、そうなってほしいですが、今日明日ではなさそうです。

私は今回、EBにWAFを付けたい要件が発生したため、ALBに移行しました。手順を確立するまではマジ四苦八苦でしたが、もう誰も苦しまないことを祈って記事に残します。

手順の図解

中央の列が開発者の作業で、上から順に進めます。左右に作業の入出力。

hoge.jpg

以下にサンプルなど添えつつ解説します。

EB(CLB)の「環境の保存」

S3に設定がテキストファイルになっているので、ダウンロード&編集&アップロードします。

URLはこんなで、環境の保存でつけた名前のファイルが転がってます。

https://s3.console.aws.amazon.com/s3/buckets/elasticbeanstalk-ap-northeast-1-<account-id>/resources/templates/<environment-name>/

編集のポイントは、以下を含むCLB関連の設定をバッサリ削除することです。

  • aws:elb:healthcheck
  • aws:elb:loadbalancer
  • aws:elb:listener
  • aws:elb:listener:listener_port
  • aws:elb:policies
  • aws:elb:policies:policy_name

ここはawsebcliをうまく使えば、S3直接編集とか不要な気はするんですが、、、。

.ebextensions でALBの設定を記述

ALBの設定は、ebextensionsで入れました。先程のS3のファイルに含めてもよいですが、こちらに入れておけばgitで管理できるので良い気がしています。

.ebextensions/01_loadbalancer.config みたいな名前で作成します。内容は、ALBは80,443で受ける。443にはCertificateManagerで作った証明書を付ける。80,443で受けたトラフィックは、EC2の80に流す。という記述です。

option_settings:
  aws:elasticbeanstalk:environment:
    EnvironmentType: LoadBalanced
    LoadBalancerType: application
  aws:elbv2:listener:default:
    DefaultProcess: default
    ListenerEnabled: 'true'
    Protocol: HTTP
  aws:elbv2:listener:443:
    DefaultProcess: default
    ListenerEnabled: 'true'
    Protocol: HTTPS
    SSLCertificateArns: arn:aws:acm:ap-northeast-1:<account-id>:certificate/<certificate>
  aws:elasticbeanstalk:environment:process:default:
    Port: '80'
    Protocol: HTTP
    HealthCheckPath: /fabicon.ico

記述可能なすべての設定は公式マニュアルを参照してください。

HealthCheckPathはデフォが「/」なのですが、「/」がHTTP200以外を返すウェブアプリなら、上の例のようにfabicon.icoとか、なにか200になるものを指定してください。CLB構成のときにヘルスチェックパスを空欄にしておくと、「TCP80にpingして反応あればOK」でCLBを組んでくれてましたが、ALBはそういうのありません。

eb create

elb-type、VPC設定をつけて、eb createすると、ALBなBeanstalk環境が起動します。

eb create eb-sample-alb \
--cfg eb-sample-clb \
--elb-type application \
--vpc \
--vpc.publicip \
--vpc.id <vpc-id> \
--vpc.ec2subnets <subnet-id-1>,<subnet-id-2> \
--vpc.elbpublic \
--vpc.elbsubnets <subnet-id-1>,<subnet-id-2> \

VPCまわりのオプション指定を端折ると、default VPCに立ちます。

環境のスワップ、クローン

最後に、デプロイまわりの都合があって、eb-sample-alb と作ったけど、どうにか eb-sample-clb にしたいので、以下のように進めました。

  • eb-sample-alb と eb-sample-clb をCNAME Swap
  • eb-sample-clb を削除
  • 昼飯をくって消滅を待つ
  • eb-sample-alb のクローンを、eb-sample-clb という名前で作る
  • eb-sample-alb を削除

完了!

おつかれさまでした。

こうして組んだALBなEBに、WAFをつけようと思ったら、どうやらebextensionsのoption_settingsの記法では投入できず、CloudFormationの記法で頑張る必要があるらしいです。よくわかっていません。だいぶ萎えていますが、もう一声がんばります。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7