Ошибка создания домена ElasticSearch: ValidationException: ошибка аутентификации - PullRequest
2 голосов
/ 08 января 2020

В последнее время я получаю эту ошибку при создании домена ES с помощью Terraform. Ничего не изменилось в том, как я определяю домен ES. Однако я начал использовать SSL (AWS ACM cert) на уровне ALB, но это не должно было повлиять на это. Любые идеи, на что он может жаловаться?

resource "aws_elasticsearch_domain" "es" {
  domain_name = "${var.es_domain}"
  elasticsearch_version = "6.3"

  cluster_config {
      instance_type = "r4.large.elasticsearch"
      instance_count = 2
      zone_awareness_enabled = true
  }

  vpc_options {
      subnet_ids = "${var.private_subnet_ids}"
      security_group_ids = [
          "${aws_security_group.es_sg.id}"
      ]
  }

  ebs_options {
      ebs_enabled = true
      volume_size = 10
  }

  access_policies = <<CONFIG
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": "es:*",
          "Principal": "*",
          "Effect": "Allow",
          "Resource": "arn:aws:es:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:domain/${var.es_domain}/*"
      }
  ]
}
  CONFIG

  snapshot_options {
      automated_snapshot_start_hour = 23
  }

  tags = {
      Domain = "${var.es_domain}"
  }

  depends_on = [
    "aws_iam_service_linked_role.es",
  ]
}

resource "aws_iam_service_linked_role" "es" {
  aws_service_name = "es.amazonaws.com"
}

РЕДАКТИРОВАТЬ: как ни странно, когда я удалил с помощью сертификата ACM и вернулся к использованию HTTP (порт 80) для моего прослушивателя ALB, домен ES был подготовлен ,

Не уверен, что с этим делать, но ясно, что сертификат ACM мешает созданию домена ES. Или я делаю что-то не так с созданием ACM. Вот как я это делаю и использую -

resource "aws_acm_certificate" "ssl_cert" {
  domain_name       = "api.xxxx.io"
  validation_method = "DNS"

  tags = {
    Environment = "development"
  }

  lifecycle {
    create_before_destroy = true
  }

}

resource "aws_alb_listener" "alb_listener" {
  load_balancer_arn = "${aws_alb.alb.id}"
  port              = "443" 
  protocol          = "HTTPS" 
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn = "${aws_acm_certificate.ssl_cert.arn}"

  default_action {
    target_group_arn = "${aws_alb_target_group.default.id}"
    type             = "forward"
  }
}

Сертификат проверен и выдан AWS довольно быстро, насколько я вижу в консоли. И, как видно, это не имеет ничего общего с доменом ES, скажем так.

1 Ответ

1 голос
/ 08 января 2020

Иногда случается, что когда он создает домен ES перед включением роли, связанной со службой, даже при использовании зависимости__.

, возможно, вы можете попробовать использовать средство подготовки local-exe c для ожидания.

resource "aws_iam_service_linked_role" "es" {
  aws_service_name = "es.amazonaws.com"
  provisioner "local-exec" {
    command = "sleep 10"
  }
}
...