AWSの無料枠で出来る範囲のチュートリアルを ChatGPT に示して頂いたので、試してみた経過を簡単にまとめてみました。
AWS等の実際の画面や操作はどんな感じか知りたい方を読者対象としているつもりです。
著者はAWS クラウドプラクティショナー、ソリューションアーキテクト アソシエイト という資格を取得済みで「AWSってなんぞや?」という概要を知識としてある程度理解しているが、実際にAWSの画面を触ったことが無いという状態でAWSのチュートリアルをこなしていくという状況です。
今回の内容としては、外部ドメイン × AWS HTTPS化 を目標にしたいと思います。
全体像(今回やること)
お名前.com(ドメイン管理)
↓(NS設定)
Route53(DNS管理)
↓
ALB(HTTPS)
↓
EC2(nginx)
⚠️ 前提(必須)
HTTPSには👇が必要です
ドメイン(example.com)
なぜ?
ACMはIPアドレスに証明書を発行できない
🎯 構成要素
追加するもの👇
・ACM証明書
・HTTPSリスナー(443)
・HTTP→HTTPSリダイレクト
前回(AWS 無料チュートリアルその8)のmain.tfに以下のコードを追記します。
############################################
# ACM証明書
############################################
resource "aws_acm_certificate" "cert" {
domain_name = "あなたのドメイン名"
validation_method = "DNS"
lifecycle {
create_before_destroy = true
}
}
############################################
# DNS検証(Route53)
############################################
resource "aws_route53_record" "cert_validation" {
for_each = {
for dvo in aws_acm_certificate.cert.domain_validation_options :
dvo.domain_name => dvo
}
zone_id = "あなたのZONE_ID"
name = each.value.resource_record_name
type = each.value.resource_record_type
records = [each.value.resource_record_value]
ttl = 60
}
############################################
# 証明書の検証完了
############################################
resource "aws_acm_certificate_validation" "cert_validation" {
certificate_arn = aws_acm_certificate.cert.arn
validation_record_fqdns = [
for record in aws_route53_record.cert_validation : record.fqdn
]
}
############################################
# HTTPSリスナー(443)
############################################
resource "aws_lb_listener" "https" {
load_balancer_arn = aws_lb.alb.arn
port = 443
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016-08"
certificate_arn = aws_acm_certificate.cert.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.tg.arn
}
depends_on = [aws_acm_certificate_validation.cert_validation]
}
############################################
# HTTP → HTTPSリダイレクト
############################################
resource "aws_lb_listener" "http_redirect" {
load_balancer_arn = aws_lb.alb.arn
port = 80
protocol = "HTTP"
default_action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
}
############################################
# Route53(ALBに向ける)
############################################
resource "aws_route53_record" "alb_record" {
zone_id = "あなたのZONE_ID"
name = "あなたのドメイン名"
type = "A"
alias {
name = aws_lb.alb.dns_name
zone_id = aws_lb.alb.zone_id
evaluate_target_health = true
}
}
⚠️ 重要ポイント
ドメインは「お名前.com」
DNSは「Route53」に移管する
🧩 手順① Route53でホストゾーン作成
AWSコンソール → Route53 → 「ホストゾーン作成」
入力
ドメイン名:net-4.net (私の場合)
タイプ:パブリックホストゾーン
作成後に出る以下のものを控えておく
ns-123.awsdns-xx.com
ns-456.awsdns-xx.net
ns-789.awsdns-xx.org
ns-000.awsdns-xx.co.uk
🧩 手順② お名前.comでネームサーバ変更
お名前.com側
👉 ネームサーバ設定変更
設定内容
Route53で出たNSを4つそのまま貼る
👉 これで
DNS管理がRoute53に移る
⏳ 注意
反映に数分〜数時間かかる
🧩 手順③ ACM証明書
Terraform
resource "aws_acm_certificate" "cert" {
domain_name = "あなたが取得したドメイン名"
validation_method = "DNS"
}
実行
terraform apply
👉 すると👇
DNS検証用レコードが出る
🧩 手順④ DNS検証レコード追加
resource "aws_route53_record" "cert_validation" {
for_each = {
for dvo in aws_acm_certificate.cert.domain_validation_options :
dvo.domain_name => dvo
}
zone_id = "Route53のHostedZoneIDを入力"
name = each.value.resource_record_name
type = each.value.resource_record_type
records = [each.value.resource_record_value]
ttl = 60
}
👉 これで
自動で検証完了
🧩 手順⑤ ALBにHTTPS追加
resource "aws_lb_listener" "https" {
load_balancer_arn = aws_lb.alb.arn
port = 443
protocol = "HTTPS"
certificate_arn = aws_acm_certificate.cert.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.tg.arn
}
}
🧩 手順⑥ ドメイン → ALB紐付け
resource "aws_route53_record" "alb_record" {
zone_id = "Route53のHostedZoneID"
name = "net-4.net"
type = "A"
alias {
name = aws_lb.alb.dns_name
zone_id = aws_lb.alb.zone_id
evaluate_target_health = true
}
}
🔥 よくあるハマりポイント
❌ HTTPSできない
👉 原因
NS設定ミス
ACM未検証
❌ 反映されない
👉 原因
DNS伝播待ち
❌ ALB DNSは見れるのにドメインNG
👉 原因
Route53レコード未設定
💡 確認方法
nslookup 取得したドメイン名
👉 ALBのDNSが出ればOK
ハマりポイント
Hosted Zone が一つではない
やるべきこと
3つのHosted Zone全部確認
👉 Route53 → ホストゾーン一覧
それぞれ開いて確認
NSレコードの値
正解のゾーンを特定
あなたのnslookup
ns-123.awsdns-xx.com
ns-456.awsdns-xx.net
ns-789.awsdns-xx.org
ns-000.awsdns-xx.co.uk
👉 この4つと完全一致するゾーンが「本物」
🎯 次にやること
✅ そのゾーンの中を見る
❗ チェックポイント
Aレコード → 何を指してる?
パターン①(正しい)
ALBのDNS
パターン②(原因)
13.158.xxx とかのIP
→ これなら確定で原因
🔧 解決方法
方法①(おすすめ)
👉 正しいゾーンにAレコードを作る
方法②(シンプル)
👉 他の2つのゾーン削除
💡 一番ラクな方法
正しいNSのゾーン以外、全部削除
🚨 注意
削除する前に👇
NSが一致してるゾーンだけ残す
ハマりポイントその2
$ curl -I http://secure-alb-1783625199.ap-northeast-1.elb.amazonaws.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 134 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Date: Fri, 10 Apr 2026 04:26:09 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
Location: https://secure-alb-1783625199.ap-northeast-1.elb.amazonaws.com:443/
🎯 推論
ALBは正常(HTTP→HTTPSリダイレクトもOK)
しかし HTTPS(443) が外部から到達できていない
🔍 curlコマンドの意味
HTTP/1.1 301 Moved Permanently
Location: https://secure-alb-xxx:443/
👉 これは
HTTP(80) → HTTPS(443)へリダイレクト成功
👉 つまり
ALBは生きている
リスナーも動いている
❗ なのにタイムアウトする理由
👉 リダイレクト先👇
https://net-4.net(443番ポート)
👉 ここが
外からアクセスできない
🧨 可能性の高い原因
ALBのセキュリティグループで 443 が開いていない
🔧 Terraform修正例
もしalb_sgがこうなら👇
resource "aws_security_group" "alb_sg" {
ingress {
from_port = 80
to_port = 80
👉 これ追加👇(以前のコードに追記しました)
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
🎯 成功するとこうなる
nslookup あなたのドメイン名
👇
secure-alb-xxxx.elb.amazonaws.com
🎉 その後
https://あなたのドメイン名
👉 🔒 nginx表示





