🚢

ACMで発行済みの証明書をTerraformで管理(import)する

2021/01/15に公開

はじめに

Terraformを使ってAWSの環境構築をしていたところ、SSL/TLS証明書に関してはTerraform以外の手段で別途ACM(AWS Certificate Manager)で発行済みのものを利用する必要が生じました。

このACMで発行済みの証明書も、今後はTerraformの管理下に置くことにしました。

環境

  • Terraform 0.14.3

ACMのtfファイルを作成する

まず、証明書を管理するためのtfファイルを作成します。

なお、今回はモジュール化しています。

main.tf
module "acm_web" {
  source         = "../modules/acm"
  domain_name    = "web.example.com"
}
modules/acm/acm_certificate.tf
resource "aws_acm_certificate" "this" {
  domain_name       = var.domain_name
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }
}
modules/acm/variables.tf
variable "domain_name" {
  type = string
}

証明書をTerraformの管理下に置く

terraform import terraform管理上のリソース名 AWS上の証明書を特定する情報(ARN)を実行することで、証明書をTerraformの管理下に置きます。

terraform import module.acm_web.aws_acm_certificate.this arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxx...

以下の表示が出れば成功です。

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

Terraform管理下に置かれた証明書の情報を見る

これはterraform importしたものに限った話ではありませんが、terraform state showコマンドで、Terraform管理下に置かれているリソースの情報を見ることができます。

このコマンドで、先ほどTerraform管理下に置いた証明書の情報を確認してみます。

terraform state show module.acm_web.aws_acm_certificate.this
resource "aws_acm_certificate" "this" {
    arn                       = "arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxx..."
    domain_name               = "web.example.com"
    domain_validation_options = [
        {
            domain_name           = "web.example.com"
            resource_record_name  = "_xxx...web.example.com."
            resource_record_type  = "CNAME"
            resource_record_value = "_xxx....xxxxxxxxxx.acm-validations.aws."
        },
    ]
    id                        = "arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxx..."
    status                    = "ISSUED"
    subject_alternative_names = []
    tags                      = {}
    validation_emails         = []
    validation_method         = "DNS"

    options {
        certificate_transparency_logging_preference = "ENABLED"
    }
}

上記の通り、Terraform管理下に置かれていることを確認できました。

参考

Discussion