Ec2にALB+ACMを導入してみた
今回は、
AWSのec2インスタンスに常時SSL化で通信を行うために、
ACMをインストールしたALBを導入してみました。
私が今回、ALBを導入するにあたっての前提としては、 以下のような状態でした。
・ec2インスタンスを使用
・Route53を使用
・ACMを取得済み
そもそもALBとは?
ALBってそもそも何?っていうところなのですが、
ALBは
Application
Load
Balancer
の略で、AWSが提供しているロードバランサの一つです。
ロードバランサというのは、 複数あるサーバーにアクセスの負荷分散をさせたり、 メンテナンスや障害時に切り離しを行うためのものです。
ただ、今回は、自分の作成したアプリにhttps通信できるようにしたかったので、
ACMとALBを使うことで実現したいと思い、導入をしてみました。
導入方法
まず、AWSコンソールにログインし、「サービスを検索する」のところで、 ec2を検索し、ec2ダッシュボードへ移ります。
まず、ALBを作成する前に、 ターゲットグループを作成します。
ターゲットグループというのは、
通信のリクエストをどこに割り振るのか、
ALBが対象にしているサーバを登録しているグループのことです。
ターゲットグループを選択。
「ターゲットグループを作成」をクリック。
すると、こんな画面が出てきます。
ターゲットグループ名は何でもいいです。
他の設定に関しては、特に何もいじらずに、デフォルトのままで作成をクリック。 ターゲットグループが作成されます。
次に、ロードバランサーをクリック。
ロードバランサーの作成をクリックすると、
以下のような画面が出るので、
一番左のApplication Load Balancerをクリック。
「基本的な設定」の部分で名前の入力がありますが、 名前は何でも構いません。
スキームやIPアドレスタイプはそのままで。
ロードバランサーのプロトコルには、 HTTPSを追加します。(ロードバランサーのポートは自動的に443が入ります。)
アベイラビリティーゾーンの設定では、 選択肢の中から、少なくとも2つ以上のアベイラビリティーゾーンを選択します。
なおこの際、ec2インスタンスが属しているアベイラビリティーゾーンを含む必要があります。
そして、次の手順: セキュリティ設定の構成をクリック。
ACMから証明書を選択するを選び、
証明書の名前のところで、デプロイしたいACMを選択します。
セキュリティポリシーの選択は、
特にデフォルトのままで進めます。
次の手順をクリック。
セキュリティグループの設定が出ますので、 新しいセキュリティグループの設定をクリックし
下記のように、httpとhttps通信を許可する設定をします。
次の手順をクリック。
ターゲットグループで、 既存のターゲットグループを選択。
そして、先ほど作成したターゲットグループを選択します。
次の手順をクリックし、
ターゲットの登録に問題がなければ、確認をクリックします。
これで、ロードバランサーは作成されました!
次に、route 53から、 ALBに接続できるよう設定を行います。
「サービス」からroute53を検索し、ダッシュボードを表示します。
ホストゾーンをクリックし、 ec2インスタンスと紐づいたドメインを選択。
するとレコードセットの画面が表示されるので、
Aタイプのレコードを選択し、レコードの編集のところで、 エイリアス「はい」を選択します。
そして、エイリアス先として、 先ほど作成したALBを選択します。
これで、ALBを通じた通信が可能になりました!
ただ、このままだと、
「httpでもhttpsでも接続できる」
という状態なので、常時SSL化をするには、 http通信できたリクエストを、httpsにリダイレクトするという設定を行います。
今回は、webサーバ(nginx)に設定を記述しました。
[ec2-user@ip-172-31-25-189 ~]$ sudo vim /etc/nginx/conf.d/rails.conf
そして、以下の記述を追加します。
server { ~省略~ if ($http_x_forwarded_proto != https) { return 301 https://$host$request_uri; } ~省略~
この記述の意味は、
httpでアクセスが来たものに関しては、 httpsにリダイレクトします。
という意味です。