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の設定〜設定を行うためのレコードの登録まで一括して行えるのは非常に楽だと思います。
ぜひご活用ください。
以上です。