Terraform. Помечать экземпляры, созданные с помощью группы автоматического масштабирования

#amazon-web-services #ta&s #terraform #aws-auto-scalin&

#amazon-веб-службы #Теги #terraform #aws-автоматическое масштабирование

Вопрос:

Это то, что я пытаюсь сделать. У меня есть 2 группы автоматического масштабирования, созданные с помощью Terraform. Сначала запускаются 3 экземпляра EC2 в трех разных зонах доступности с общедоступными IP-адресами. Другая группа автоматического масштабирования запускает 3 экземпляра EC2 в трех разных зонах доступности с частными IP-адресами. Я пытаюсь настроить уникальный тег «Name» для каждого экземпляра. В Terraform я вижу, что ресурс автоматического масштабирования имеет блок тегов, но при apply один и тот же тег применяется ко всем 3 экземплярам. Кроме того, я попытался настроить свой код таким образом, чтобы одна группа автоматического масштабирования могла запускать все мои экземпляры (как общедоступные, так и частные), но у меня возникли проблемы с циклическим использованием выражения ‘for’ в моем операторе vpc_zone_identifier . Эта проблема вынуждает меня создать вторую группу автоматического масштабирования для частных экземпляров. Были бы полезны любые советы по объединению этих групп автоматического масштабирования и пометке каждого экземпляра уникальным тегом.

 resource "aws_autoscalin&_&roup" "public" {
  name                 = "${var.main_as}-Public"
  launch_confi&uration = aws_launch_confi&uration.main.id
  vpc_zone_identifier = [
    for subnet in aws_subnet.public : subnet.id
  ]
  min_size = 3
  max_size = 3
}

resource "aws_autoscalin&_&roup" "private" {
  name                 = "${var.main_as}-Private"
  launch_confi&uration = aws_launch_confi&uration.main.id
  vpc_zone_identifier = [
    for subnet in aws_subnet.private : subnet.id
  ]
  min_size = 3
  max_size = 3
}
  

Ответ №1:

При использовании группы автоматического масштабирования вам не следует пытаться генерировать уникальные имена для всех экземпляров, фактически это приводит к методологии «домашние животные против крупного рогатого скота«. Благодаря присвоению имен ресурсам они становятся ценными и могут привести к созданию проектов, в которых у вас будет единственная точка отказа.

На практике это может быть сложно для определенных областей (таких как базы данных), но вы должны попытаться сделать свою архитектуру неизменяемой, особенно в группе автоматического масштабирования, в которой экземпляры могут быть заменены (даже если у вас минимальный и максимальный размер одинаков, любые сбои базового хоста приведут к запуску нового экземпляра для замены).

Благодаря неизменяемости вашей инфраструктуры ваша архитектура будет более устойчивой к неизвестным событиям и обеспечит применение лучших практик при сборке серверов.

Если вам нужен идентификатор для экземпляра, вместо использования тега я бы рекомендовал использовать идентификатор экземпляра, поскольку он всегда будет уникальным для ваших хостов.

В противном случае, если вы хотите по-прежнему использовать группу автоматического масштабирования с уникальными тегами имен для узлов, вам нужно будет создать событие для него во время запуска узла. Затем для этого потребуется запустить лямбда-выражение, которое программно обновит экземпляр EC2 и присвоит ему уникальное имя.

Комментарии:

1. Спасибо. Имеет смысл.

2. Без проблем, рад, что смог помочь 🙂