首页 文章

如何使用Terraform在现有VPC中启动EC

提问于
浏览
2

我需要在现有的AWS VPC中使用Terraform创建几个新的EC2,RDS等 . 它们不是Terraform创建的现有子网,安全组,iam等 . 它是手动创建的 .

我听说正确的方法是使用terraform导入(这是正确的吗?) . 为了测试terraform导入的工作原理,我首先测试了如何导入现有的EC2而不是现有的VPC,因为我不想在现有的VPC中意外更改任何内容 .

在跑步之前

terraform import aws_instance.example i-XXXXXXXXXX

看起来我需要在ec2.tf文件中创建一个非常详细的EC2资源,例如:

resource "aws_instance" "example" {
  iam_instance_profile = XXXXXXXXXX
  instance_type = XXXXXXX
  ami = XXXXXXX
  tags {
    Name = XXXXX
    Department = XXXX
    ....
  }
}

如果我只是写:

resource "aws_instance" "example" {
}

它显示我错过了ami和实例类型,

如果我写:

resource "aws_instance" "example" {
  instance_type = XXXXXXX
  ami = XXXXXXX
}

然后运行“terraform apply”会将我现有EC2的标签更改为空,将iam配置文件更改为空 .

我还没有尝试过如何导入现有的vpc,子网,安全组 . 我担心如果我尝试,我必须提供现有的vpc,子网,安全组等的大量信息 . 我的系统很复杂 .

是否需要在我的terraform代码中指出这么多细节?是不是有办法,所以我只是简单地指出现有的东西的ID,如vpc的id,我的新东西将根据现有的id创建?某事 . 喜欢:

data "aws_subnet" "public" {
    id = XXXXXXX
}

resource "aws_instance" "example" {
  instance_type = "t2.micro"
  ami = "${var.master_ami}"
  ......
  subnet_id = "${aws_subnet.public.id}"
}

1 回答

  • 4

    您可以在导入期间将资源正文留空,但是一旦导入,您将需要返回并填写特定的详细信息 . 您可以使用terraform show命令查看导入的资源,并填写所有资源详细信息,因此当您尝试运行terraform计划时,它应显示不需要进行任何更改 .

    但是,要回答您的问题,是的,您可以使用现有资源而无需导入它们 . 只需创建一个变量文件,其中包含新资源所需的现有资源ID,然后您可以引用所需的资源ID .

    所以你可以有一个.vars文件,例如:

    variable "ami_id" {
      description = "AMI ID"
      default = "ami-xxxxxxxx"
    }
    
    variable "subnet_prv1" {
      description = "Private Subnet 1"
      default = "subnet-xxxxxx"
    }
    

    然后在你的main.tf中创建资源:

    resource "aws_instance" "example" {
       instance_type = "t2.micro"
       ami = "${var.ami_id}"
       ......
       subnet_id = "${var.subnet_prv1}"
    }
    

    只是一种方法去做 . 还有其他一些,你可以在the terraform docs for variables阅读

相关问题