Повторите создание инфраструктуры с Terraform - PullRequest
0 голосов
/ 23 октября 2018

Я изучаю Terraform как инструмент для управления повторно используемыми группами экземпляров AWS EC2.Я не очень знаком с инструментами инфраструктуры и ищу советы о том, что делать в этом сценарии использования.

  1. Я хочу многократно создавать несколько экземпляров EC2 - скажем, при первом вызове terraform apply моей инфраструктуре требуется 3 экземпляра.Через некоторое время я хочу создать 100 экземпляров - возможно, не уничтожая 3 экземпляра, которые я создал ранее.Как мне сделать это в Terraform?Должен ли я даже делать это?Если мне не следует использовать Terraform для повторного предоставления ресурсов, какой хороший инструмент может это сделать?

  2. Какие инструменты позволяют удаленно выполнять сценарии bash или Python в созданной Terraform?инфраструктуры?Я знаю, что у Terraform есть remote-exec, но команды, которые мне нужно запускать в этих экземплярах, занимают много времени (3-5 часов), и я бы предпочел не иметь ресурсов в этом состоянии, где они все еще инициализируются, потому что я могу 'не следить за ними.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Это очень хороший вариант использования terraform, и было бы хорошо, если бы вы сделали это через terraform.

Вы можете следовать приведенному ниже коду, который вы можете использовать для ускорения запуска экземпляра столько раз, сколько вам нужно, вы должны подать заявку снова после изменения значения count .это не повлияет на запущенные экземпляры и не будет соответствовать вашему значению.

resource "aws_instance" "web" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
  count = 3
  availability_zone = "${element(var.az, count.index)}"

  tags {
    Name = "${count.index}"
  }
}

Также, если вы хотите выполнить какую-либо команду во время загрузки экземпляра.Для этого вы можете использовать скрипт пользовательских данных.

resource "aws_instance" "..." {
  user_data = "${file("../../tmp/aws/userdata.sh")}"
  ...
}

Для повторяемости вы можете использовать модуль terraform.Например: если вы хотите использовать код для нескольких инфраструктур, например, dev, staging, production.В случае модулей вам не нужно снова и снова писать один и тот же код, чтобы ускорить работу экземпляра ec2.Вы можете передать разные переменные для другой инфраструктуры.

Пример:

module "dev" {
  source = "./modules/dev"
  count  = 2
  region = "us-east-1"
}

module "production" {
  source = "./modules/production"
  count  = 5
  region = "us-east-1"
}

Ссылка: https://www.terraform.io/docs/modules/usage.html

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

Ниже перечислены многие политики завершения.

Amazon EC2 Auto Scaling поддерживает следующие настраиваемые политики завершения:

OldestInstance. Terminate the oldest instance in the group. This option is useful when you're upgrading the instances in the Auto Scaling group to a new EC2 instance type. You can gradually replace instances of the old type with instances of the new type.

NewestInstance. Terminate the newest instance in the group. This policy is useful when you're testing a new launch configuration but don't want to keep it in production.

OldestLaunchConfiguration. Terminate instances that have the oldest launch configuration. This policy is useful when you're updating a group and phasing out the instances from a previous configuration.

ClosestToNextInstanceHour. Terminate instances that are closest to the next billing hour. This policy helps you maximize the use of your instances and manage your Amazon EC2 usage costs.

Default. Terminate instances according to the default termination policy. This policy is useful when you have more than one scaling policy for the group.

Для получения дополнительной информации см. Ссылку ниже.

Ссылка: https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html

0 голосов
/ 23 октября 2018

Пользовательский AMI с предустановленным программным обеспечением поможет вам сократить время загрузки.Hashicorp packer https://www.packer.io/intro/ - хороший инструмент для создания AMI.

  1. Создайте один экземпляр ec2 с помощью terraform.
  2. Либо скрипт пользовательских данных, либо запустите remote-exec для запускаскрипт, который устанавливает необходимые пакеты / программное обеспечение.
  3. Создайте AMI из приведенного выше экземпляра ec2.
  4. Запустите столько ec2-экземпляров, сколько вам нужно, используя только что созданный AMI.

By Ansible также предлагает очень хорошие возможности для управления инфраструктурой в виде кода.

...