Когда дело доходит до интеграции с существующими объектами, вам сначала нужно выбрать один из двух вариантов: вы можете либо импортировать эти объекты в Terraform и использовать Terraform для управления ими в будущем, либо вы можете оставить их под управлением любой существующей системы и использоватьих в Terraform по ссылке.
Если вы хотите использовать Terraform для управления этими существующими объектами, вы должны сначала написать конфигурацию для объекта, как если бы Terraform собирался создать его сам:
resource "aws_vpc" "example" {
# fill in here all the same settings that the existing object already has
cidr_block = "10.0.0.0/16"
}
# Can then use that vpc's id in other resources using:
# aws_vpc.example.id
Но вместо немедленного запуска terraform apply
вы можете сначала запустить terraform import
, чтобы указать Terraform связать этот блок ресурсов с существующим VPC, используя его идентификатор, назначенный AWS:
terraform import aws_vpc.example vpc-abcd1234
Если вы затем запустите terraform plan
, вы увидите, что никаких изменений не требуется, поскольку Terraform обнаружил, что конфигурация соответствует существующему объекту.Если Terraform действительно предлагает некоторые изменения, вы можете либо принять их, запустив terraform apply
, либо продолжить обновлять конфигурацию, пока она не будет соответствовать существующему объекту.
После того, как вы это сделаете, Terraform выполнитСчитайте себя владельцем VPC и, таким образом, планируете обновить его или уничтожить при последующих запусках, если конфигурация предполагает, что он должен это сделать.Если какая-либо другая система ранее управляла этим VPC, важно прекратить это, иначе эта другая система может конфликтовать с Terraform.
Если вы предпочитаете сохранить то, что управляет существующая системаVPC, вы также можете использовать функцию Источники данных , чтобы найти существующий VPC, не назначая его Terraform.
В этом случае вы можете использовать aws_vpc
источник данных , который может искать VPC по различным атрибутам.Обычный выбор - искать VPC по его тегам, предполагая, что ваша среда имеет предсказуемую схему тегирования, которая позволяет вам описать один VPC, который вы ищете:
data "aws_vpc" "example" {
tags = {
Name = "example-VPC-name"
}
}
# Can then use that vpc's id in other resources using:
# data.aws_vpc.example.id
В некоторых случаях пользователи вводят дополнительныеперенаправление для поиска VPC каким-либо иным способом, кроме непосредственного обращения к API-интерфейсам AWS VPC.Это более сложная конфигурация, и параметры здесь довольно широки, но, например, если вы используете хранилище параметров SSM, вы можете поместить VPC в параметр хранилища параметров и извлечь его, используя источник данных aws_ssm_parameter
.
Если существующей системой, управляющей VPC, является CloudFormation, вы также можете использовать aws_cloudformation_export
или aws_cloudformation_stack
для получения информации из API CloudFormation.