Присоединение экземпляра EC2 к домену AD с помощью terraform - PullRequest
0 голосов
/ 30 января 2020

Я надеюсь, что вы можете помочь мне с моей проблемой. Я пытаюсь автоматически разрешить моему экземпляру ec2 присоединиться к рекламному домену с помощью моего скрипта terraform. Поскольку Terraform не поддерживает какую-либо опцию «Каталог присоединения к домену», я хотел попытаться создать документ SSM, чтобы Systems Manager сделал это для меня. На самом деле я получил следующий код:

resource "aws_directory_service_directory" "ad" {
  name     = "active-directory-service.com"
  password = "${var.ad-password}"
  edition  = "Standard"
  size     = "Small"
  type     = "MicrosoftAD"

  vpc_settings {
    vpc_id     = "${aws_vpc.vpc.id}"
    subnet_ids = ["${aws_subnet.ds-subnet.0.id}", 
                  "${aws_subnet.ds-subnet.1.id}"
                  ]
  }

}

resource "aws_vpc_dhcp_options" "vpc-dhcp-options" {
  domain_name          = "${var.dir_domain_name}"
  domain_name_servers  = aws_directory_service_directory.ad.dns_ip_addresses

}
resource "aws_vpc_dhcp_options_association" "dns_resolver" {
   vpc_id          =  aws_vpc.vpc.id
   dhcp_options_id = aws_vpc_dhcp_options.vpc-dhcp-options.id
}

resource "aws_ssm_document" "ad-server-domain-join-document" {
    name  = "myapp_dir_default_doc"
    document_type = "Command"

content = <<DOC
{
        "schemaVersion": "1.0",
        "description": "Join an instance to a domain",
        "runtimeConfig": {
           "aws:domainJoin": {
               "properties": {
                  "directoryId": "${aws_directory_service_directory.ad.id}",
                  "directoryName": "${var.dir_domain_name}",
                  "directoryOU": "${var.dir_computer_ou}",
                  "dnsIpAddresses": [
                     "${aws_directory_service_directory.ad.dns_ip_addresses[0]}",
                     "${aws_directory_service_directory.ad.dns_ip_addresses[1]}"
               }
           }
        }
}
DOC
}

resource "aws_ssm_association" "ad-server-association" {
    name = "dir_default_doc"
    instance_id = aws_instance.ec2-ad-instance.id
}

Я получаю следующее сообщение об ошибке:

Это значение не имеет индексов. Может кто-нибудь подскажите, пожалуйста, как исправить эту проблему?

1 Ответ

0 голосов
/ 07 февраля 2020

Как упомянуто в комментарии, воспроизводимые примеры ускорят способность любого помогать:)

Я предположил, что используется terraform 0.12.

aws_directory_service_directory.ad.dns_ip_addresses - это не список, это набор. Концептуально это означает, что он неупорядочен. В результате получите к нему доступ:

sort(aws_directory_service_directory.ad.dns_ip_addresses)[0]

Сортировка упорядочит ее и позволит вам получить к ней доступ с индексом. Следующая проблема объясняет это, хотя и в отношении попыток многословного использования element для доступа к https://github.com/hashicorp/terraform/issues/22392

Документация для этого ресурса называет его списком, который на практике кажется неправильным : https://www.terraform.io/docs/providers/aws/r/directory_service_directory.html

...