Когда дело доходит до интеграции с существующими объектами, вам сначала нужно выбрать между двумя вариантами: вы можете либо импортировать эти объекты в 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
< / a> или aws_cloudformation_stack
, чтобы получить информацию из CloudFormation. API.
person
Martin Atkins
schedule
04.06.2019