概要
やりたいこと
前回、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 にアップ。
コメント