【问题标题】:How can I pass aws ec2 private ips to template file Using terraform如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件
【发布时间】:2020-08-27 01:29:13
【问题描述】:

我对 terraform 还很陌生。我正在尝试创建多个 ec2 实例并希望在实例准备好后运行引导脚本,并且在引导脚本中我需要传递创建的实例的私有 ips(terraform 脚本的一部分)。 经过这么多的谷歌搜索后,我开始知道我必须使用 terraform_file 但无法正确使用它。 地形版本:0.11.13

/* 实例的安全组 */ 资源“aws_security_group”“测试报告-sg” { name = "${var.environment}-test-reporting-sg" vpc_id = "${var.vpc_id}" } 数据“模板文件”“初始化” { 计数 = "${var.instance_count}" 模板 = "${file("${path.module}/wrapperscript.sh")}" 变量 = { ip_addresses=“${aws_instance.dev-testreporting.*.private_ip}” } } 资源“aws_instance”“开发测试报告” { 计数 = "${var.instance_count}" ami="${var.ami_id}" instance_type ="${var.instance_type}" key_name ="${var.key_name}" security_groups = [“${aws_security_group.test-reporting-sg.id}”] subnet_id = "${var.subnet_ids}" user_data = "${data.template_file.init.*.rendered.[count.index]}" }

谢谢

【问题讨论】:

  • 您可以使用http://169.254.169.254/latest/dynamic/instance-identity/document 在运行时通过shell 脚本获取每个实例的私有IP?
  • 你是否试图让一个 Consul 集群加入到自身中,以便多个 Consul 实例站起来并自己创建一个集群?如果是这样,您应该查看自动加入 hashicorp.com/blog/consul-auto-join-with-cloud-metadata 而不是尝试将 IP 地址传递给静态配置。
  • @error404 我正在编写一个 wrapperscript.sh,我将在其中传递所有 IP,我的最终目标是安装 vertica 集群(为此,我需要参与集群的所有实例的 IP)。
  • @ydaetskcoR 不确定领事。以前没用过。但另一部分是需要创建 vertica 集群,我之前是手动完成这项工作的,我启动实例并将它们的 ips 传递给 wrapperscript.sh,实习生调用另一个脚本,我在其中编写了所有逻辑设置集群。但是现在我想在启动实例后立即传递 ec2 实例的 IP。
  • 那么您的用户数据模板中的consul_address 是什么?您也可以发布模板脚本吗?或者请在其中创建一个minimal reproducible example?我假设您要创建 n 个实例,并让这些实例上的用户数据具有所有 n 个实例的 IP 地址,而不仅仅是它们自己的 IP 地址?

标签: amazon-ec2 terraform terraform-template-file


【解决方案1】:

在资源模块中,您可以添加private_ip,如下所示

private_ip = "${lookup(var.private_ips,count.index)}"

并将private_ip 值添加到变量文件

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2023-03-31
    • 2022-01-20
    • 2021-02-18
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多