Как использовать ресурсы Terraform уже в AWS (созданные вручную)? - PullRequest
2 голосов
/ 28 мая 2019

Есть ли способ использовать ресурсы моей terraform, которые уже существуют в моей учетной записи AWS, которые были созданы вручную?Я не хочу их менять, и, честно говоря, я не хочу их трогать.Мне просто нужны некоторые из этих ресурсов для среды, которую я создаю.Например, vpc и IAM.

Я немного прочитал об импорте, но не уверен, что это ответ?

1 Ответ

2 голосов
/ 28 мая 2019

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

Первый - источники данных , которые позволяют вам искать существующие ресурсы и передаватьинформация о них на другие ресурсы.Документация aws_ami источника предоставляет этот полезный пример:

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloWorld"
  }
}

Это позволяет Terraform идти и извлекать существующий AMI, который соответствует критериям, указанным в источнике данных, выбирает наиболеенедавний AMI, а затем передает идентификатор AMI ресурсу aws_instance, чтобы он был построен из этого AMI.

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

data "aws_subnet_ids" "private" {
  vpc_id = "${var.vpc_id}"

  tags = {
    Tier = "Private"
  }
}

resource "aws_instance" "app" {
  count         = "3"
  ami           = "${var.ami}"
  instance_type = "t2.micro"
  subnet_id     = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}

Второй способ использования существующих ресурсов - импорт их в состояние .Это позволяет Terraform начать управление существующими ресурсами, как если бы Terraform изначально их создал.Таким образом, любые изменения, внесенные в конфигурацию Terraform, будут применены к существующему ресурсу при следующем запуске terraform apply.Это также означает, что если вы запустили terraform destroy, ресурс будет удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...