Terraform을 통해 Amazon Elasticsearch Service의 search slog를 효율적으로 사용

Terraform이 Amazon Elasticsearch Service(앞으로 Amazon ES)의 영역을 관리하고 있기 때문에, search slow와 index slog가 Cloudwatch에 보내는 것도 Terraform을 유효화할 때 좋은 샘플 코드를 찾지 못해 코드를 남기고 싶었습니다.
Terraform의 awselasticsearch_domain 자원 문서에서지금까지 참고 코드였습니다. 모든 클라우드워치 로그의 그룹을 기록할 수 있기 때문에 아래와 같습니다.
elasticseach.tf
resource "aws_elasticsearch_domain" "example" {
  # .. other configuration ...

  log_publishing_options {
    cloudwatch_log_group_arn = aws_cloudwatch_log_group.example_search_slow_log.arn
    log_type                 = "SEARCH_SLOW_LOGS"
  }
  
  log_publishing_options {
    cloudwatch_log_group_arn = aws_cloudwatch_log_group.example_index_slow_log.arn
    log_type                 = "INDEX_SLOW_LOGS"
  }
}
cloudwatch_log_group.tf
resource "aws_cloudwatch_log_group" "example_search_slow_log" {
  name = "/aws/es/example_search_slow_log"
}

resource "aws_cloudwatch_log_group" "example_index_slow_log" {
  name = "/aws/es/example_index_slow_log"
}

resource "aws_cloudwatch_log_resource_policy" "example_es_cloudwatch_log_group_policy" {
  policy_name = "example-es-cloudwatch-log-group-policy"
  policy_document = data.aws_iam_policy_document.example_es_log_publishing_policy.json
}

data "aws_iam_policy_document" "example_es_log_publishing_policy" {
  statement {
    actions = [
      "logs:CreateLogStream",
      "logs:PutLogEvents",
      "logs:PutLogEventsBatch",
    ]

    resources = [
      "${aws_cloudwatch_log_group.example_search_slow_log.arn}:*",
      "${aws_cloudwatch_log_group.example_index_slow_log.arn}:*",
    ]

    principals {
      identifiers = ["es.amazonaws.com"]
      type        = "Service"
    }
  }
}

좋은 웹페이지 즐겨찾기