🚢
ACMで発行済みの証明書をTerraformで管理(import)する
はじめに
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