Terraform - вывод идентификаторов экземпляра ec2 для вызова скрипта оболочки - PullRequest
0 голосов
/ 13 декабря 2018

Я использую 'terraform apply' в сценарии оболочки для создания нескольких экземпляров EC2.Мне нужно вывести список сгенерированных IP-адресов в переменную сценария и использовать этот список в другом подпрограмме.Я определил выходные переменные для ips в файле конфигурации terraform - ' instance_ips '

output "instance_ips" {
 value = [
  "${aws_instance.gocd_master.private_ip}",
  "${aws_instance.gocd_agent.*.private_ip}"
 ]
}

Однако команда применения terraform применяет вывод всего вывода поколения EC2, кроме выходных переменных.

terraform init \
  -backend-config="region=$AWS_DEFAULT_REGION" \
  -backend-config="bucket=$TERRAFORM_STATE_BUCKET_NAME" \
  -backend-config="role_arn=$PROVISIONING_ROLE" \
  -reconfigure \
  "$TERRAFORM_DIR"

OUTPUT = $( terraform apply <input variables e.g - 
                  var="aws_region=$AWS_DEFAULT_REGION">
                 -auto-approve \
                 -input=false \
                 "$TERRAFORM_DIR"
               )

terraform output instance_ips

Таким образом, содержимое переменной сценария 'OUTPUT' равно

Terraform command: apply Initialising the backend...  Successfully 
configured the backend "s3"! Terraform will automatically use this 
backend unless the backend configuration changes. Initialising provider 
plugins... Terraform has been successfully initialised!
.
.
.
aws_route53_record.gocd_agent_dns_entry[2]: Creation complete after 52s 
(ID:<zone ............................) 
aws_route53_record.gocd_master_dns_entry: Creation complete after 52s 
(ID:<zone ............................)  
aws_route53_record.gocd_agent_dns_entry[1]: Creation complete after 53s 
(ID:<zone ............................)   
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.  Outputs: 
instance_ips = [ 10.39.209.155, 10.39.208.44, 10.39.208.251, 
10.39.209.227 ]

вместо просто ips EC2.

Запускает 'terraform output instance_ips' выдает 'Требуется инициализация' Ошибка, которую я понимаю, означает, что требуется 'terraform init'.

Есть ли способ подавить генерацию ec2 и просто напечатать выходные переменные.если нет, то как получить IP-адреса с помощью команды terraform output без необходимости инициализации terraform?

1 Ответ

0 голосов
/ 13 декабря 2018

Если я правильно понял контекст, вы на самом деле можете создать файл в этом каталоге, и этот файл может быть использован вашим скриптом суб-оболочки.Вы можете сделать это, используя null_resource ИЛИ "local_file".

Вот как мы можем использовать его в модульной структуре -

Используя null_resource -

resource "null_resource" "instance_ips" {
  triggers {
       ip_file = "${sha1(file("${path.module}/instance_ips.txt"))}"
      }
  provisioner "local-exec" {
    command = "echo ${module.ec2.instance_ips} >> instance_ips.txt"
  }
}

Использование local_file -

resource "local_file" "instance_ips" {
    content     = "${module.ec2.instance_ips}"
    filename = "${path.module}/instance_ips.txt"
}
...