amazon-web-services - 如何通过 ASG 使用 Terraform 获取 EC2 实例的私有 IP
问题描述
我尝试使用以下代码从 ASG 获取 ip,它是使用 Terraform 创建的?这是一个好习惯还是坏习惯?但我得到了正确的输出,正如我所料。
data "aws_instances" "test" {
instance_tags {
Environment = "${var.environment}",
instance = "${var.db_instance_name}"
}
instance_state_names = ["running"]
depends_on = ["aws_sqs_queue.ansible", "aws_autoscaling_group.sample"]
}
输出.tf
output "privateips" {
value = "${data.aws_instances.test.private_ips}"
}
解决方案
在创建 ASG 时,在末尾添加一个本地配置程序,以执行使用 cli 与 AWS 交互的本地脚本,以便您可以查询 ASG IP:
resource "aws_autoscaling_group" "artifactory" {
name_prefix = "${var.env}-Application-ASG-"
vpc_zone_identifier = ["${var.app_subnets}"]
max_size = "${var.asg_max}"
min_size = "${var.asg_min}"
desired_capacity = "${var.asg_desired}"
force_delete = true
launch_configuration = "${aws_launch_configuration.application.name}"
target_group_arns = ["${aws_alb_target_group.application.arn}"]
provisioner "local-exec" {
command = "./getips.sh"
}
}
脚本:
ips=""
ids=""
while [ "$ids" = "" ]; do
ids=$(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names $ASG --region $REGION --query AutoScalingGroups[].Instances[].InstanceId --output text)
sleep 1
done
for ID in $ids;
do
IP=$(aws ec2 describe-instances --instance-ids $ID --region $REGION --query Reservations[].Instances[].PrivateIpAddress --output text)
ips="$ips,$IP"
done
推荐阅读
- python - 如何在语音情感特征中应用 lstm
- javascript - 在函数中多次调用时,钩子如何工作?
- css - “angular-flex-layout”没有为移动屏幕上的“mat-form-fields”添加边距
- hybris - 如何在 local.properties 中指定相对路径?
- kotlin-coroutines - 如何使用协程改造/替换回调实现
- elasticsearch - Elasticsearch 分页不起作用(至少不是以自然理解的方式)
- git - 无法在我的 ubuntu 机器上安装 linuxbrew
- c# - 找不到方法:'System.Web.Http.Filters.HttpActionExecutedContext.get_Request()'
- php - 将一个表中的列连接到另一个表中的另一列 CodeIgniter
- sql - Postgresql 顺序扫描在 5 亿行上性能下降