[英]Dinamically add resources in Terraform
我設置了一個 jenkins 管道,它啟動 terraform 以在我們的 VPC 中創建一個新的 EC2 實例,並在每次運行時將其注冊到我們在 R53(同時創建)上的私有托管區域。
我還設法將狀態保存到 S3 中,因此它不會因重新創建托管區域而失敗。
我遇到的主要問題是,每次運行 terraform 時,都會不斷用新實例替換前一個實例,而不是將其添加到實例池中。
如何避免這種情況?
這是我的代碼片段
terraform {
backend "s3" {
bucket = "<redacted>"
key = "<redacted>/terraform.tfstate"
region = "eu-west-1"
}
}
provider "aws" {
region = "${var.region}"
}
data "aws_ami" "image" {
# limit search criteria for performance
most_recent = "${var.ami_filter_most_recent}"
name_regex = "${var.ami_filter_name_regex}"
owners = ["${var.ami_filter_name_owners}"]
# filter on tag purpose
filter {
name = "tag:purpose"
values = ["${var.ami_filter_purpose}"]
}
# filter on tag os
filter {
name = "tag:os"
values = ["${var.ami_filter_os}"]
}
}
resource "aws_instance" "server" {
# use extracted ami from image data source
ami = data.aws_ami.image.id
availability_zone = data.aws_subnet.most_available.availability_zone
subnet_id = data.aws_subnet.most_available.id
instance_type = "${var.instance_type}"
vpc_security_group_ids = ["${var.security_group}"]
user_data = "${var.user_data}"
iam_instance_profile = "${var.iam_instance_profile}"
root_block_device {
volume_size = "${var.root_disk_size}"
}
ebs_block_device {
device_name = "${var.extra_disk_device_name}"
volume_size = "${var.extra_disk_size}"
}
tags = {
Name = "${local.available_name}"
}
}
resource "aws_route53_zone" "private" {
name = var.hosted_zone_name
vpc {
vpc_id = var.vpc_id
}
}
resource "aws_route53_record" "record" {
zone_id = aws_route53_zone.private.zone_id
name = "${local.available_name}.${var.hosted_zone_name}"
type = "A"
ttl = "300"
records = [aws_instance.server.private_ip]
depends_on = [
aws_route53_zone.private
]
}
結果是我之前創建的實例被銷毀並創建了一個新實例。 我想要的是繼續使用此代碼添加實例。 謝謝你
您的代碼僅創建一個實例aws_instance.server
,並且對其屬性的任何更改都只會在您的后端在 S3 中時修改該實例,因此它充當每個管道的全局狀態。 aws_route53_record.record
和腳本中的任何其他內容也是如此。
如果您希望不同的管道重用完全相同的腳本,您應該使用不同的工作空間,或者為每個管道創建不同的 TF 狀態。 另一種替代方法是重新定義您的 TF 腳本,以將實例映射作為輸入變量並使用for_each創建不同的實例。
如果這些實例應該相同,您應該使用aws_autoscaling_group和所需容量來管理它們的數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.