Terraform for さくらのクラウド v1.13.0リリース
本日リリースのTerraformさくらのクラウド向けプロバイダー v1.13.0にてエンハンスドロードバランサ関連の機能拡充が行われました。
- 100/500CPSプランのサポート
- HTTPSへのリダイレクト機能
- HTTP/2のサポート
- Let's Encrypt設定
Release v1.13.0 · sacloud/terraform-provider-sakuracloud · GitHub
新プラン/HTTPSへのリダイレクト/HTTP2のサポート
これらについては以下のようなtfファイルで利用可能となっています。
resource "sakuracloud_proxylb" "foobar" { name = "terraform-test-proxylb-acme" # 100CPSプランを利用 plan = 100 vip_failover = true health_check { protocol = "http" delay_loop = 10 host_header = "usacloud.jp" path = "/" } bind_ports { proxy_mode = "http" port = 80 # HTTPSへのリダイレクトを有効化 redirect_to_https = true } bind_ports { proxy_mode = "https" port = 443 # HTTP/2サポートの有効化 support_https = true } servers { ipaddress = "${sakuracloud_server.server01.ipaddress}" port = 80 } }
Let's Encryptの利用
Let's Encryptを利用するには新設されたリソースsakuracloud_proxylb_acme
を利用する必要があります。
# エンハンスドロードバランサでのLet's Encrypt設定 resource sakuracloud_proxylb_acme "foobar" { proxylb_id = sakuracloud_proxylb.foobar.id accept_tos = true # 規約への同意 common_name = "www.example.com" update_delay_sec = 120 }
注意点としてはさくらのクラウドのマニュアルに記載の条件を満たす必要があるという点があります。
2番目の条件である、DNSレコードの設定を含めたtfファイルの例は以下の通りです。
# エンハンスドロードバランサの定義 resource "sakuracloud_proxylb" "foobar" { name = "terraform-test-proxylb-acme" plan = 100 vip_failover = true health_check { protocol = "http" delay_loop = 10 path = "/" } # Let's Encryptを利用するにはhttp/https両方のbind_portsが必要 bind_ports { proxy_mode = "http" port = 80 redirect_to_https = true } bind_ports { proxy_mode = "https" port = 443 support_https = true } servers { ipaddress = "${sakuracloud_server.server01.ipaddress}" port = 80 } } # エンハンスドロードバランサでのLet's Encrypt設定 resource sakuracloud_proxylb_acme "foobar" { proxylb_id = sakuracloud_proxylb.foobar.id accept_tos = true # 規約への同意 common_name = "www.example.com" update_delay_sec = 120 } resource sakuracloud_server "server01" { name = "terraform-test-server01" graceful_shutdown_timeout = 10 } # エンハンスドロードバランサのVIP/FQDNを解決するためのDNSレコード設定 data sakuracloud_dns "zone" { name_selectors = ["example.com"] } resource "sakuracloud_dns_record" "record" { dns_id = data.sakuracloud_dns.zone.id name = "www" type = "CNAME" value = "${sakuracloud_proxylb.foobar.fqdn}." ttl = 10 }
この例ではエンハンスドロードバランサのFQDNを証明書発行対象のFQDNのCNAMEとして登録しています。
注意点として、DNSレコード登録直後は証明書発行対象のFQDNが解決できない場合があります。
このためにsakuracloud_proxylb_acme
にはupdate_delay_sec
という項目を設けています。
これはリソース作成時に指定秒数待つための項目です。手元の環境では120秒くらいに設定すると上手くいっていました。
終わりに
TerraformからLet's Encryptの設定〜設定を行うためのレコードの登録まで一括して行えるのは非常に楽だと思います。
ぜひご活用ください。
以上です。