如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件
Posted
技术标签:
【中文标题】如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件【英文标题】:How can I pass aws ec2 private ips to template file Using terraform 【发布时间】: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 地址?
【参考方案1】:
在资源模块中,您可以添加private_ip
,如下所示
private_ip = "$lookup(var.private_ips,count.index)"
并将private_ip
值添加到变量文件
【讨论】:
以上是关于如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 代码创建 Ec2 实例,其中私钥将存储在 AWS 参数存储中(类型-安全字符串)
在另一个模块中为 EC2 添加指定子网 - AWS Terraform -
如何使用 Terraform 传递 AssumeRole 并将 SSM 文档与 EC2 关联
Terraform AWS:无法将先前创建的 root_block_device 与使用 aws_launch_configuration 启动的 AWS EC2 实例重用