使用 Terraform 重复创建基础结构



我正在探索将 Terraform 作为管理可重用的 AWS EC2 实例组的工具。我对基础设施工具不是很熟悉,并寻求有关在此用例中做什么的建议。

  1. 我想重复创建多个 EC2 实例 - 比如说我第一次调用terraform apply我的基础设施需要 3 个实例。一段时间后,我想创建 100 个实例 - 也许不会破坏我之前创建的 3 个实例。如何在 Terraform 中执行此操作?我甚至应该这样做吗? 如果我不应该使用 Terraform 重复配置,那么可以做到这一点的好工具是什么?

  2. 有哪些工具允许在创建的 Terraform 基础架构上远程执行 bash 或 Python 脚本?我知道 Terraform 有remote-exec但我需要在这些实例上运行的命令需要很长时间才能运行(3-5 小时(,我宁愿没有处于它们仍在初始化的状态的资源,因为我无法监控它们。

带有预装软件的自定义 AMI 将帮助您缩短启动时间。Hashicorp 打包机 https://www.packer.io/intro/是创建 AMI 的好工具。

  1. 使用地形创建一个 ec2 实例。
  2. 用户数据脚本或运行远程可执行文件以运行安装所需软件包/软件的脚本。
  3. 从上述 ec2 实例创建 AMI。
  4. 根据需要启动任意数量的 ec2 实例,以使用新创建的 AMI 进行。

By Ansible 还提供了非常好的功能来管理基础设施即代码。

这是地形的用例,如果你能通过地形来做到这一点,那就太好了。

您可以按照以下代码进行操作,您可以使用这些代码根据需要启动任意数量的实例,您必须在更改计数值后再次应用。 它不会影响任何当前正在运行的实例,并且与您的值相匹配。

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

对于可重复性,您可以使用地形模块。例如:如果您想将代码用于多个基础设施,例如开发、暂存、生产。对于模块,您不必一次又一次地编写相同的代码来启动 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

相关内容

  • 没有找到相关文章

最新更新