私は、これらのモジュールが実際にあなた自身のリソースを使って提供していることをあまりにも確信していないと言って、実際にあなたにとって有用な決断をしていないので、それらをまったく使用しないでください。
しかし、それらを使用したいのに同じ「レベル」(つまり、terraform apply
が1つでVPCとインスタンスを作成する)を使用している場合は、単にモジュール出力を使用して渡すことができます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でプライベートサブネットIDのすべてのリストを返し、その後、最初のものを選択するelement
を使用してVPCモジュールからprivate_subnets
outputを使用しています。インスタンスモジュールがインスタンスを入れるためにサブネットIDのリストを取得した場合(それらすべてを介してすべてのAZにインスタンスを分散させる)、element
関数を削除できます。
異なるディレクトリにTerraformがある場合(つまり、VPCに1度適用し、別のディレクトリにEC2インスタンスを作成する場合)、remote_state
data sourceを使用してVPCの出力にアクセスする必要があります。
これらのモジュールを両方とも同じディレクトリに使用していますか? Terraformを一度に適用して両方を作成するか、Terraformを複数のディレクトリに適用していますか? – ydaetskcoR
は私main.tf –