Terraform で Kinesis Firehose のエラーを CloudWatch Logs に送る

2020年5月3日

概要

やりたいこと

前回、Terraform で AWS WAF のログを Kinesis Firehose で logging 設定を行った。

この Kinesis Firehose のエラーを検知するため、 CloudWatch Logs を利用する。

CloudWatch Logs

AWS リソースのログファイルの監視・保存・アクセスができるサービス。

今回はログストリームとロググループを作成することになる。

ログストリーム:ログストリームは、同じソースを共有するログイベントのシーケンスです。例えば、特定のホストのApacheのログに関連付けることができます。例えば、2ヶ月間のログストリームを保持しながら、今日のログストリームを作成するなどです。ログストリームに2ヶ月間なにも送信しなければ、そのログストリームは自動的に削除されます。

ロググループ:ロググループは、同一の保持、監視、アクセス制御設定を共有するログストリームのグループ定義です。各ログ·ストリームは、1ロググループに属している必要があります。 例)MyWebsite.com/Apache/access_log とか MyWebsite.com/Apache/error_log

実践

CloudWatch Resource

Terraform で利用する Resource はロググループとログストリームの2つ。

resource "aws_cloudwatch_log_group" "cloudwatch_log_group" {
  name = "aws-waf-logs-cloudwatch-log-group"
}

resource "aws_cloudwatch_log_stream" "cloudwatch_log_stream" {
  name           = "aws-waf-logs-cloudwatch-log-stream"
  log_group_name = "aws_cloudwatch_log_group.cloudwatch_log_group.name"
}

AWS コンソールより CloudWatch Logs にログストリームが作成されている。

Kinesis Resource s3_configuration オプション

Kinesis Resource に cloudwatch_logging_optionsがあるため、これを利用する。

resource "aws_kinesis_firehose_delivery_stream" "test_stream" {
  name        = "aws-waf-logs-terraform-kinesis-firehose-test-stream"
  destination = "s3"

  s3_configuration {
    role_arn   = aws_iam_role.firehose_role.arn
    bucket_arn = aws_s3_bucket.bucket.arn
    cloudwatch_logging_options {
      enabled         = true
      log_group_name  = aws_cloudwatch_log_group.cloudwatch_log_group.name
      log_stream_name = aws_cloudwatch_log_stream.cloudwatch_log_stream.name
    }
  }
}

terraform コマンドでドライラン後に実行。

terraform plan
terraform apply

CloudWatch コンソールより、ロググループとログストリームが作成されていること。

送り先が ElasticSearch, Redshift, Splunk の場合でもcloudwatch_logging_options が存在するため、同様に Kinesis Firehose 経由でログを送ることができる。

全体像は github にアップ。

参考

SESのトラッキングデータをKinesis経由でS3に保存するまでをTerraformで実施

Amazon CloudWatch Logsによるログの収集とフィルタとアラーム設定

AWS, Terraform

Posted by さいき