はじめに
Terraform初学者です。
『実践Terraform』という書籍で勉強しています。
書籍のコードをそのまま記述するとエラーとなってしまう箇所があったため、備忘録としてまとめます。
この記事におけるバージョンは次のとおりです。
- Terraform: 1.9.5
- terraform-provider-aws: 5.65.0
問題
第8章 ロードバランサーとDNS
のサンプルコードが対象です。
HTTPSリスナーを定義する箇所で次のコードが定義されていました。
resource "aws_lb_listener" "https" {
load_balancer_arn = aws_lb.example.arn
port = "443"
protocol = "HTTPS"
certificate_arn = aws_acm_certificate.example.arn
ssl_policy = "ELBSecurityPolicy-2016-08"
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "これは『HTTPS』です"
status_code = "200"
}
}
}
書籍のとおりにコードを書き、第8章が終わったタイミングでterraform apply
を実行すると次のエラーが出ました(一部の情報は差し替えています)
│ Error: creating ELBv2 Listener (arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/example/[load-balancer-id]): operation error Elastic Load Balancing v2: CreateListener, https response error StatusCode: 400, RequestID: [request-id], api error UnsupportedCertificate: The certificate 'arn:aws:acm:ap-northeast-1:123456789012:certificate/[example-certificate-id]' must have a fully-qualified domain name, a supported signature, and a supported key size.
│
│ with aws_lb_listener.https,
│ on lb.tf line 66, in resource "aws_lb_listener" "https":
│ 66: resource "aws_lb_listener" "https" {
│
中身を見るかぎり、HTTPSリスナーの作成時に指定された証明書に問題があるようです。
しかし書籍の中では、証明書の検証を行うaws_acm_certificate_validation
も定義しているため、なぜこのエラーが発生するのかわかりませんでした。
原因
結論として、次のようにHTTPSリスナーの定義へdepends_on
を記載することで解決しました。
resource "aws_lb_listener" "https" {
load_balancer_arn = aws_lb.example.arn
port = "443"
protocol = "HTTPS"
certificate_arn = aws_acm_certificate.example.arn
ssl_policy = "ELBSecurityPolicy-2016-08"
# この1行を追加
depends_on = [aws_acm_certificate_validation.example]
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "これは『HTTPS』です"
status_code = "200"
}
}
}
元々の書き方だとaws_acm_certificate_validation
の作成完了前、つまり検証が完了する前の証明書がALBに紐づけられてしまうため、エラーが発生していました。
depends_on
を記述することで「aws_acm_certificate_validation
の作成が完了してからHTTPSリスナーを作成する必要がある」という依存関係を明示することができます。
おわりに
『実践Terraform』はとてもわかりやすいため、初学者にもおすすめです。
ただし出版が2019年なので現在とは異なる点もあります。
今後もそういった箇所が見つかったら、公式ドキュメントと書籍を行ったり来たりしつつ、さらにTerraformの理解を深めていきたいと思います。
また、この記事に誤りがありましたらコメントにて教えていただけますと幸いです。
参考資料