Пользовательские данные не выполняются cloud-init

Я пытаюсь получить образ Ubuntu Cloud (в частности, ami-311a1a5b) в загрузчик Docker после запуска terraform. У меня есть следующая конфигурация для этого:

resource "aws_instance" "app" {
  count = 1
  ami = "${lookup(var.amis, var.region)}"
  instance_type = "t2.micro"
  subnet_id = "${aws_subnet.private.id}"
  vpc_security_group_ids = ["${aws_security_group.default.id}"]
  key_name = "${aws_key_pair.deployer.id}"
  source_dest_check = false
  # user_data = ${file("cloud-config/app.yml")}
  user_data = "${template_file.cloud_config.rendered}"


  depends_on = ["aws_instance.nat"]


  tags = {
    Name = "airpair-example-app-${count.index}"
  }


  root_block_device {
    volume_type = "standard"
    volume_size = 20
  }
}

После запуска экземпляра Docker не устанавливается, и кажется, что конфигурация облака не была применена. Конфигурация облака выглядит так:

# Cloud config for app servers
runcmd:
  # Install docker
  - curl -sSL https://get.docker.com | sudo sh
  # Run nginx
  - docker run -d -p 80:80 nginx

Если я запрашиваю пользовательские данные, кажется, что они там:

services/ubuntu@ip-10-128-1-213:~$ curl http://169.254.169.254/latest/user-data
# Cloud config for app servers
runcmd:
  # Install docker
  - curl -sSL https://get.docker.com | sudo sh
  # Run nginx
  - docker run -d -p 80:80 nginx

Я понимаю, что это должно быть выполнено, есть ли причина, по которой это не так?

1 ответ

Решение

Если у вас есть конфигурационный файл в облаке, это именно то, что вам нужно отредактировать в первой строке, чтобы прочитать

#cloud-config

В противном случае cloud-init не будет анализировать его как файл конфигурации облака. Похоже, что terraform правильно устанавливает пользовательские данные для вас. Остальные документы для cloud-init находятся по адресу https://cloudinit.readthedocs.io/en/latest/, просто имейте в виду, что версия вашего AMI может отличаться от документации, поэтому некоторые функции могут быть недоступны.

Другие вопросы по тегам