CloudWatchでACMな証明書の期限をチェックするのを terraform で書いてみる
AWS Certificate Manager が Amazon CloudWatch を介した証明書の有効期限の監視の提供を開始
というわけで、さっそく?試してみることに。
そういえば、過去にCloudFront用にACM使って証明書作ったのがあったからそれを使うか…
あれー、ないなー、なんでだー
と思ったら、us-east-1 にありました。
なんでだとーと思って色々見てたら
CloudFrontで指定するACMは us-east-1 にないとだめなのですねぇ…
そりゃ東京にはないわ
CloudFrontの設定画面のとこにちゃんと書いてありました。
作った時に脳死でやってしまったようだ。ちゃんと説明は読もう…。
というわけで、ACMが us-east-1 にあるので、CloudWatch の方も us-east-1 で設定する必要が。
東京でもメトリクスは表示できるけど、アラームが作成できないですね。。。
まぁ細かいとこは後でやるとして、どんな感じか見ておこう。
なるほどなるほど。
ぽちぽちやってってもいいんですが、せっかくなので terraform cloud でやってみることにします。AWSなterraformはあまり書いたことがないので練習も兼ねて。
SNS topic はWebコンソールで us-east-1 に作ったのでそれを、ACMのarnは引っ張ってくることにしました。
SNS topic -> chatbot で slack 投稿にしてるので、topic 作るあたりは terraform ではうまく出来ないかも?
see also https://github.com/hashicorp/terraform-provider-aws/issues/12304
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
data "aws_sns_topic" "acm-useast1" {
name = "cloudwatch-useast1"
}
data "aws_acm_certificate" "example-jp" {
domain = "example.jp"
}
resource "aws_cloudwatch_metric_alarm" "example-certificate-check" {
alarm_name = "certificate_days_to_expiry"
threshold = "30"
comparison_operator = "LessThanThreshold"
evaluation_periods = "1"
datapoints_to_alarm = "1"
alarm_description = "This metric monitors example.jp DaysToExpiry"
alarm_actions = [data.aws_sns_topic.acm-useast1.arn]
ok_actions = [data.aws_sns_topic.acm-useast1.arn]
metric_name = "DaysToExpiry"
namespace = "AWS/CertificateManager"
period = "86400"
statistic = "Average"
unit = "Count"
dimensions = {
CertificateArn = data.aws_acm_certificate.example-jp.arn
}
}
コンソールの画像では「以下」になってるけど、terraform側は「より低い」です。特に理由はないです。後で違うことに気付きました。
途中なかなかうまくいかなくて、よーく見たらtypoでした。これのせいで1時間は損した!!
パラメータ系はコピペ大事ですね…orz
Terraform will perform the following actions:
# aws_cloudwatch_metric_alarm.example-certificate-check will be updated in-place
~ resource "aws_cloudwatch_metric_alarm" "example-certificate-check" {
~ dimensions = {
+ "CertificateArn" = "arn:aws:acm:us-east-1:XXXXXXXXX:certificate/13ffbdc7-7592-4c81-baaf-XXXXXXXXX"
- "CretificateArn" = "arn:aws:acm:us-east-1:XXXXXXXXX:certificate/13ffbdc7-7592-4c81-baaf-XXXXXXXXX" -> null
}
id = "certificate_days_to_expiry"
tags = {}
# (17 unchanged attributes hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
commitのコメント適当すぎなので次からは気を付ける…かもしれない
ちょっと閾値変更したりしてテストして、slack に通知されることを確認。
とりあえず今回は完了と…。
Discussion
記事のタグについて、
terraform
と修正していただけるでしょうか。ご検討よろしくお願いいたします。typoしてましたね!ご指摘ありがとうございます。修正しましたー
ありがとうございます 🙇