Как получить частный ip экземпляров EC2 с помощью Terraform - PullRequest
0 голосов
/ 25 января 2019

Я пробовал следующий код для получения IP-адресов от ASG, который был создан с помощью 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"]
}

output.tf

output "privateips" {
  value = "${data.aws_instances.test.private_ips}"
}

1 Ответ

0 голосов
/ 25 января 2019

При создании ASG добавьте локального провайдера в конце для выполнения локального сценария, который взаимодействует с AWS с помощью cli, чтобы можно было запрашивать IP-адреса ASG:

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"
  }
}

script:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...