我正在使用tf_aws_vpc和tf_aws_ec2 Terraform社區模塊,但我正在努力獲取應該用於在AWS VPC中創建EC2實例的subnet_id。從VPC Terraform社區模塊獲取subnet_id
在tf_aws_ec2模塊文檔中,他們說要在一個變量中定義它,但我無法從變量中獲取它,因爲直到我創建子網時才知道它的ID。
我正在嘗試使用Terraform模塊。我知道如何在不使用Terraform模塊時做到這一點。
我該如何在VPC中創建一個EC2實例?
我正在使用tf_aws_vpc和tf_aws_ec2 Terraform社區模塊,但我正在努力獲取應該用於在AWS VPC中創建EC2實例的subnet_id。從VPC Terraform社區模塊獲取subnet_id
在tf_aws_ec2模塊文檔中,他們說要在一個變量中定義它,但我無法從變量中獲取它,因爲直到我創建子網時才知道它的ID。
我正在嘗試使用Terraform模塊。我知道如何在不使用Terraform模塊時做到這一點。
我該如何在VPC中創建一個EC2實例?
我要說的是,我不太相信這些模塊真正提供的只是簡單地使用資源,因爲它們並沒有爲你做出任何有用的決定,所以我建議根本不使用它們。但是,如果您確實想要使用它們並且在相同的「級別」(即單個創建VPC和實例的單個terraform apply
)上使用它們,那麼您可以簡單地使用模塊輸出並將它們傳遞給它們到EC2實例。
像這樣的東西應該工作:
module "vpc" {
source = "github.com/terraform-community-modules/tf_aws_vpc"
name = "my-vpc"
cidr = "10.0.0.0/16"
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = "true"
azs = ["us-west-2a", "us-west-2b", "us-west-2c"]
tags {
"Terraform" = "true"
"Environment" = "${var.environment}"
}
}
module "ec2_instance" {
source = "github.com/terraform-community-modules/tf_aws_ec2_instance"
instance_type = "${var.instance_type}"
instance_name = "${var.instance_name}"
ami_id = "${var.ami_id}"
aws_access_key = "${var.aws_access_key}"
aws_secret_key = "${var.aws_secret_key}"
aws_region = "${var.aws_region}"
subnet_id = "${element(module.vpc.private_subnets, 0)}"
number_of_instances = "${var.number_of_instances}"
user_data = "${var.user_data}"
}
這使用從VPC模塊返回所有在VPC私人子網ID的列表中private_subnets
output,然後使用element
選擇第一個。如果實例模塊獲取了一個子網ID列表來放置實例(通過全局遍歷來遍歷AZ遍歷實例),那麼您可以刪除element
函數。
如果您的Terraform在不同的目錄中(因此您只需申請一次VPC,再次申請另一個目錄以創建EC2實例),則需要使用remote_state
data source訪問VPC的輸出。
萬一有人還在嘗試,因爲我是用subnet_id爲例貝羅鄰使其工作: 'subnet_id =「$ {元素(模塊.vpc.private_subnets,0)}「' 非常感謝你的幫助。 它確實幫了我。 我會嘗試按照您的建議使用,因爲我不需要像EC2實例那樣每次創建VPC。 正如我所說我是新手,我正在閱讀文檔並希望使用最佳實踐。 你幫了很多忙。再次感謝你。 –
您是否在同一目錄中使用了這兩個模塊?那麼你一次只應用Terraform來創建兩者還是你將Terraform應用到多個目錄? – ydaetskcoR
我從github上下載它.. 使用他們的模塊我main.tf –