Terraformからウェブアクセラレータを参照/一部の操作ができるように
Terraformのさくらのクラウドプロバイダー v1.18.1からウェブアクセラレータ向けのリソースが追加されました。
sakuracloud_webaccel
: サイト情報を参照するためのデータソースsakuracloud_webaccel_certificate
: サイトに登録する証明書リソース
sakuracloud_webaccel
データソース
サイト情報を参照するためのものです。
名前 or ドメインを指定して対象サイトの情報を参照できます。
以下のようなtfファイルで利用します。
data sakuracloud_webaccel "example" { domain = "www.example.com" # または # name = "example" }
以下のような情報が参照可能です。
$ terraform show data "sakuracloud_webaccel" "example" { cname_record_value = "xxxxxx.user.webaccel.jp." domain = "www.example.com" domain_type = "own_domain" has_certificate = true id = "xxx" name = "example" origin = "192.0.2.1" site_id = "xxx" status = "enabled" subdomain = "xxxxx.user.webaccel.jp" txt_record_value = "webaccel=xxxxx.user.webaccel.jp" }
利用例: サイト有効化に必要なDNSレコードの登録
ウェブアクセラレータでは独自ドメイン利用時にCNAMEまたはTXTレコードの設定が必要になります。
このデータソースはそのための値を持っており、以下のようにすることでレコードの登録が簡単に行えます。
data sakuracloud_webaccel "example" { domain = "www.example.com" } data sakuracloud_dns "zone" { name_selectors = ["example.com"] } # webaccelデータソースの値を参照してDNSレコード登録 resource "sakuracloud_dns_record" "webaccel" { dns_id = sakuracloud_dns.zone.id name = "www" type = "CNAME" value = data.sakuracloud_webaccel.example.cname_record_value }
証明書の登録/更新が行えるsakuracloud_webaccel_certificate
リソース
以下のようなコードで証明書の登録/更新が行えるようになりました。
data sakuracloud_webaccel "site" { name = "example" } resource sakuracloud_webaccel_certificate "example" { site_id = data.sakuracloud_webaccel.site.id certificate_chain = file("crt") private_key = file("key") }
応用例: TerraformのACMEプロバイダーと組み合わせる
ウェブアクセラレータに登録する証明書をTerraformのACMEプロバイダーを用いてLet's Encryptで取得してみます。
今回はDNSを用いて取得します。ACMEプロバイダーではDNSプロバイダーとしてさくらのクラウドDNSがサポートされていますのでこちらを利用します。
コードは以下のようになります。
data sakuracloud_webaccel "site" { name = "example" } resource sakuracloud_webaccel_certificate "foobar" { site_id = data.sakuracloud_webaccel.site.id certificate_chain = "${acme_certificate.cert.certificate_pem}${acme_certificate.cert.issuer_pem}" private_key = acme_certificate.cert.private_key_pem } provider "acme" { # レートリミットに注意 server_url = "https://acme-v02.api.letsencrypt.org/directory" } resource "tls_private_key" "private_key" { algorithm = "RSA" } resource "acme_registration" "reg" { account_key_pem = "${tls_private_key.private_key.private_key_pem}" email_address = "nobody@example.com" #自分のメールアドレスに置き換える } resource "acme_certificate" "cert" { account_key_pem = "${acme_registration.reg.account_key_pem}" common_name = "www.example.com" # 任意のドメインに変更 subject_alternative_names = ["www2.example.com"] # 任意のドメインに変更 dns_challenge { provider = "sakuracloud" config = { # APIキーを環境変数から指定する場合は以下2つの指定は不要 # SAKURACLOUD_ACCESS_TOKEN = "APIトークン" # SAKURACLOUD_ACCESS_TOKEN_SECRET = "APIシークレット" SAKURACLOUD_PROPAGATION_TIMEOUT = "300" } } }
あとは定期的にterraform apply
するようにすれば良いでしょう。
終わりに
ぜひご利用ください!