概要
-
ゼロから始めるJavaでAWS Elastic Beanstalk #1~ EB CLIを使ったJava Webアプリ環境構築 ~の続編です
-
Elastic Beanstalkで構築するWebアプリを以下のようにします
- HTTPS対応
- 独自ドメイン対応
- うっかりHTTPでリクエスト来たらHTTPSにリダイレクト
- Auto Scalingは不要
-
ということで、以下のように構成するときの設定例をみていきます
本編
ALB(Application Load Balancer)をHTTPSに対応する
Elastic BeanstalkでつくったWebアプリをHTTPSに対応させるため、拡張設定用のYAMLファイルを作る。
プロジェクトのルートに .ebextensionsというディレクトリをつくり、そこにalb-secure-listener.configというファイルを作成する。
elastic-beantalk-java-app
├── .ebextensions
│ └── alb-secure-listener.config
・
・ その他のファイル達
・
alb-secure-listener.configは以下のようにする
option_settings:
aws:elbv2:listener:default:
ListenerEnabled: 'false'
aws:elbv2:listener:443:
DefaultProcess: https
ListenerEnabled: 'true'
Protocol: HTTPS
SSLCertificateArns: arn:aws:acm:ap-northeast-1:123456789:certificate/abcdef-01234-6123-caca-123456789b
aws:elasticbeanstalk:environment:process:https:
Port: '80'
Protocol: HTTP
以下、設定内容の説明をしていく。
設定その1:「HTTPは受け付けません」
aws:elbv2:listener:default:
ListenerEnabled: 'false'
aws:elbv2:listener:defaultはデフォルトのリスナー(ポート80)の設定を意味する。
ここでListenerEnabled: 'false'
としていったんポート80、つまり、HTTPは利用不可とした。つまりHTTPでのアクセスを受け付けない設定にした。
(「こういう設定もアリだよね」という例のためで、後で変更してHTTP(ポート80)でアクセス来たらHTTPS(ポート443)にリダイレクトするように構成する。)
設定その2:「HTTPSを受け付けます、証明書はこれです。」
aws:elbv2:listener:443:
DefaultProcess: https
ListenerEnabled: 'true'
Protocol: HTTPS
SSLCertificateArns: arn:aws:acm:ap-northeast-1:123456789:certificate/abcdef-01234-6123-caca-123456789b
aws:elbv2:listener:443はポート443の設定。
ここでは、HTTPSでつかうポート443についての設定で、HTTPSプロトコルで使うことを指定している。
SSLCertificateArnsにはACM(Certificate Mangaer)で取得した証明書のARNを指定する
設定その3:「ロードバランサーにHTTPSでアクセス来たら、ロードバランサーはEC2のポート80番にHTTPでつなぎます」
aws:elbv2:listener:443:
以下にあったDefaultProcess: https
の部分だが、
このhttpsというのは、以下の設定にあるaws:elasticbeanstalk:environment:process:https:
のhttpsに対応している。つまり単なる名前。httpsじゃなくてもOK。
aws:elasticbeanstalk:environment:process:https:
Port: '80'
Protocol: HTTP
これで、ロードバランサーにHTTPSでアクセスがきたら、その先にあるEC2の80番ポートにつなぎに行くという設定ができた。
つまり、以下の赤マルの部分の設定ができた。
Auto Scalingを構成する
aws:autoscaling:asg:
Availability Zones: Any
MaxSize: '1'
MinSize: '1'
っこではaws:autoscaling:asgでAuto Scalingグループで使用するインスタンスの最小数と最大数を、それぞれ1に設定した。つまりこれはスケールしない設定。
最大数を2以上に設定した場合、Availability Zones: Anyになってるときは、使用可能なAvailability Zone間で均等にインスタンスを起動するようになる。
HTTPSのみ有効で、AutoScaleしないalb-secure-listener.configの内容
ここまでの内容まとめると
alb-secure-listener.configは以下のようにする
elastic-beantalk-java-app
├── .ebextensions
│ └── alb-secure-listener.config
・
・ その他のファイル達
・
HTTPSのみ有効で、AutoScaleしないalb-secure-listener.configの内容
option_settings:
aws:elbv2:listener:default:
ListenerEnabled: 'false'
aws:elbv2:listener:443:
DefaultProcess: https
ListenerEnabled: 'true'
Protocol: HTTPS
SSLCertificateArns: arn:aws:acm:ap-northeast-1:456509554684:certificate/fa982b4b-01f3-4efe-9db6-782e1144a88b
aws:elasticbeanstalk:environment:process:https:
Port: '80'
Protocol: HTTP
aws:autoscaling:asg:
Availability Zones: Any
MaxSize: '1'
MinSize: '1'
アプリをデプロイする
さて、ここまで設定したところでアプリをデプロイする
eb create my-jetty-app-test2 --instance_type t2.small --elb-type application --vpc.id vpc-xxxxxxxxxxxxxxxxx --vpc.elbpublic --vpc.elbsubnets subnet-xxxxxxxxxxxxxxxxx,subnet-yyyyyyyyyyyyyyyyy --vpc.publicip --vpc.ec2subnets subnet-xxxxxxxxxxxxxxxxx,subnet-yyyyyyyyyyyyyyyyy
独自ドメイン対応
アプリのデプロイが終わったら、Elastic Beanstalkを独自ドメインに対応する
Webコンソールから Route 53 に行き、対象ドメインを選択してレコードセットの作成をクリック
エイリアス を選択し、エイリアス先から Elastic Beanstalk環境グループのなかから、このドメインを割り当てたい環境を選択し作成をクリックすればOK
これで、ドメインがElastic Beanstalkに作った環境にひもづいた。
ドメイン名は仮にexample.comとすると
で無事アプリが公開できた。
ここまでで独自ドメイン+HTTPS化が終了。
HTTPアクセスのHTTPSへのリダイレクト対応
ALB(Application Loadbalancer)の機能アップにより、ALBの設定だけでHTTP→HTTPSへのダイレクトができるようになっている。
さきほどは、alb-secure-listener.configの設定で以下のようにHTTPを無効にしてしまったが、これを有効にする
option_settings:
aws:elbv2:listener:default:
ListenerEnabled: 'false'
↓
option_settings:
aws:elbv2:listener:default:
ListenerEnabled: 'true'
既にデプロイしているなら、Webコンソールから有効にしてもOK
Webコンソールから有効にするには、Elastic Beanstalkにアクセスし、
ElasticBeanstalk>変更したい環境>設定>ロードバランサーとメニューを選択して、変更をクリック
ロードバランサーの変更画面で、無効になっているポート80を有効にして、適用をクリックすればOK
5分程度まつと、構成の更新が終了する。
ポート80のリスナーが有効になったらロードバランサーのリダイレクト設定をする
https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#LoadBalancers:
Elastic Beanstalkが自動生成したロードバランサーを選択し、リスナータブを選択する。
HTTP:80のリスナーのルールを表示をクリックする
IFとTHENの条件式を設定できるので、
- IFには**パスが・・・**を選択し、値として *(アスタリスク=ワイルドカード) を入力
- THENには、アクションの追加で リダイレクト先 を選択する
リダイレクト先として HTTPSを選択し、ポート番号として443と入力する
できたら、保存をクリック。
これで、HTTPにアクセスが来たらHTTPSにリダイレクトする設定は完了。
実際に、
http://example.com にアクセスしてみると、ちゃんと https://example.com にリダイレクトされる。
まとめ
-
ゼロから始めるJavaでAWS Elastic Beanstalk #1~ EB CLIを使ったJava Webアプリ環境構築 ~の続編として、Elastic BeanstalkのWebアプリを独自ドメイン、HTTPS、HTTPからのリダイレクトに対応するための方法について説明しました
-
シンプルな設定・操作で実用に耐える環境を構築できるElastic Beanstalkは本番環境構築だけでなく、プロトタイピングなどのラピッドな開発にも向いており色々なシーンで重宝しそうです。
本稿で使用したソースコード
https://github.com/riversun/java-jetty-app-on-elasticbeanstalk/tree/https_conf_with_ebextensions_dir