初めに
以前書いた記事では、ウェブサーバに HTTP でアクセスしようとした場合には、NLB の TLS:443 リスナーにリダイレクトし、ALB を経由せず NLB で TLS 終端していました。
しかし ALB 型のターゲットグループをそれぞれ 80 番ポート用と 443 番ポート用の 2 つ用意することで、NLB に TCP:80、TCP:443 いずれのアクセスに対しても ALB で TLS 終端できることがわかりました。
手順
CloudFormation で基本的なリソースを作成します。以下のテンプレートを使用します。
パラメータには、インスタンスログイン用の IP アドレスと、ALB に設定するSSL証明書の ARN を入力します。
以下のようにステータスが「CREATE_COMPLETE」になったら次に進みます。
NLB と同一の AZ でインスタンスを作成します。ここでは NLB の AZ は ap-northeast-3c
です。
インスタンス作成時、以下のようにサブネット(AZ が ap-northeast-3c
であることを確認)、セキュリティグループを選択します。
インスタンス作成後、Apache をインストールして起動します。
sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd
index.html ファイルを /var/www/html/index.html
として配置します。
<html>
<body>
<h1>web-server-1</h1>
<div id="datetime"></div>
</body>
<script>
const target = document.getElementById("datetime");
target.innerHTML = new Date();
</script>
</html>
ターゲットグループ 「nlb-alb-demo-tg」 にインスタンスを登録します。以下の「ターゲットの登録」をクリック後、作成したインスタンスを選択し、登録を行います。
NLB の DNS 名をコピーします。
ブラウザに貼り付けて確認します。
ログ確認
上記アクセス時のログの一部を抜き出しました。
1 行目のログは NLB の 80番ポートにアクセスを行い、443 番ポートにリダイレクトされていることがわかります。
2 行目のログは、NLB の 443 番にアクセスを行い、ALB の SSL 証明書が使用されていることがわかるので、ALB で TLS 終端していることがわかります。
"GET","http://nlb-alb-demo-nlb-372743b8131b44f6.elb.ap-northeast-3.amazonaws.com:80/", ...省略... ,"redirect","https://nlb-alb-demo-nlb-372743b8131b44f6.elb.ap-northeast-3.amazonaws.com:443/"
"GET","https://nlb-alb-demo-nlb-372743b8131b44f6.elb.ap-northeast-3.amazonaws.com:443/", ...省略..., "arn:aws:acm:ap-northeast-3:000000000000:certificate/f1d3ac26-51b3-4009-8e79-30066a6ebbb6"
その他メモ
テンプレート作成中に気になった部分をメモとして残しておきます。
# 以下は !Ref ALB で取得できるが、以下の書き方でも ARN を取得可能
LoadBalancerArn: !Sub arn:aws:elasticloadbalancing:${AWS::Region}:${AWS::AccountId}:loadbalancer/${ALB.LoadBalancerFullName}
参考資料