2017-04-24 6 views
2

私はtf_aws_vpctf_aws_ec2 Terraformコミュニティモジュールを使用していますが、AWS VPC内でEC2インスタンスを作成するために使用する必要があるsubnet_idを取得するのは難しいです。VPC Terraformコミュニティモジュールからsubnet_idを取得

tf_aws_ec2モジュールでは、変数に変数を定義すると言っていますが、サブネットを作成するまでIDが分からないため変数から取得できません。

私はTerraformモジュールを使用しようとしています。私はTerraformモジュールを使用していないときにそれを行う方法を知っています。

VPCでEC2インスタンスを作成する方法を教えてください。

+0

これらのモジュールを両方とも同じディレクトリに使用していますか? Terraformを一度に適用して両方を作成するか、Terraformを複数のディレクトリに適用していますか? – ydaetskcoR

+0

は私main.tf –

答えて

1

私は、これらのモジュールが実際にあなた自身のリソースを使って提供していることをあまりにも確信していないと言って、実際にあなたにとって有用な決断をしていないので、それらをまったく使用しないでください。

しかし、それらを使用したいのに同じ「レベル」(つまり、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の出力にアクセスする必要があります。

+0

で自分のモジュールを使用してgithubのから... を、それをダウンロードしていただく場合には、私が使用したとして、まだしようと誰かがそれを動作させるOにベロ例としてsubnet_id: 'subnet_id =「$ {要素(モジュール.vpc.private_subnets、0)} "" ご協力いただきありがとうございます。 それは私を助けました。 EC2インスタンスのように毎回VPCを作成する必要がなくなれば、私はあなたが提案しているように使用しようとします。 私は新しく、私はドキュメントを読んでいて、ベストプラクティスを使用していると言っていました。 あなたはそれに多大な貢献をしました。ありがとうございました。 –

関連する問題