【发布时间】:2018-12-14 11:55:01
【问题描述】:
我在 shell 脚本中使用 'terraform apply' 来创建多个 EC2 实例。我需要将生成的 IP 列表输出到脚本变量并在另一个子脚本中使用该列表。我在 terraform 配置文件中为 ips 定义了输出变量 - 'instance_ips'
output "instance_ips" {
value = [
"${aws_instance.gocd_master.private_ip}",
"${aws_instance.gocd_agent.*.private_ip}"
]
}
但是,terraform apply 命令正在打印除输出变量之外的整个 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 ]
而不仅仅是 EC2 ips。
触发 'terraform output instance_ips' 会引发 'Initialisation Required' 错误,我理解这意味着需要 'terraform init'。
有什么方法可以抑制 ec2 生成并仅打印输出变量。如果没有,如何使用“terraform output”命令检索 IP,而无需执行 terraform init?
【问题讨论】:
-
您是否在运行 terraform 应用时从目录运行 terraform 输出。它不应该再次重新初始化。通常,在运行 apply 之前运行 terraform init。
-
'terraform init' 、 'terraform apply' 和 'terraform output' 都在同一个 shell 脚本中按顺序运行
-
您提到您在脚本中使用
terraform output,但您的脚本仅显示您捕获terraform apply的输出。你能分享完整的东西吗?terraform output是您想要捕获 Terraformoutput而不是运行terraform apply的标准输出。 -
我已经包含了脚本部分,其中依次调用 terraform init、apply 和 output 命令
标签: amazon-web-services unix amazon-ec2 terraform