Почему terraform aws код не отображается? - PullRequest
0 голосов
/ 13 февраля 2020

Версия Terraform = 0,12

resource "aws_instance" "bespin-ec2-web" {
  ami = "ami-0bea7fd38fabe821a"
  instance_type = "t2.micro"
  vpc_security_group_ids = [aws_security_group.bespin-sg.id]
  subnet_id = aws_subnet.bespin-subnet-public-a.id
  associate_public_ip_address = true
  tags = {
    Name = "bespin-ec2-web-a"
  }
  user_data = data.template_file.user_data.rendered
}

data "template_file" "user_data" {
template = file("${path.module}/userdata.sh")
}

userdata. sh файл

 #!/bin/bash
   USERS="bespin"
   GROUP="bespin"
   for i in $USERS; do
   /usr/sbin/adduser ${i};
   /bin/echo ${i}:${i}1! | chpasswd;
   done

   cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config_old
   sed -i 's/PasswordAuthentication no/#PasswordAuthentication no/' /etc/ssh/sshd_config
   sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
   systemctl restart sshd

результат плана Terraform

Error: failed to render : <template_file>:5,24-25: Unknown variable; There is no variable named "i"., and 2 other di
agnostic(s)

  on instance.tf line 13, in data "template_file" "user_data":
  13: data "template_file" "user_data" {

Почему я получаю ошибку?

1 Ответ

1 голос
/ 13 февраля 2020

Аргумент template в источнике данных template_file обрабатывается как синтаксис шаблона Terraform.

В этом синтаксисе использование ${...} имеет особое значение, что часть ... будет внедрена с помощью некоторого var, который передается в шаблон.

Bash также позволяет использовать этот синтаксис для получения значений переменных в качестве намерения использовать его.

Чтобы согласовать это, вы необходимо экранировать символ $, чтобы компилятор шаблона terraform оставил его, что можно сделать, удвоив символ: $${i} во всех случаях.

https://www.terraform.io/docs/configuration/expressions.html#string -templates

...