LoginSignup
1
1

More than 3 years have passed since last update.

【Terraform】【AWS】VPC/サブネットとEC2を同時にapplyする方法

Posted at

VPC/サブネットとEC2を同時にapplyする方法

こんにちは、Deliaです。
今回はTerraformで詰まった体験談です。
しらべてもサクッと解決できなかったので残します。。。

moduleは自分で作成したものを使用しています。

0.前提

$ t -v
Terraform v0.15.0
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v3.37.0

1.手順

1. サブネットを作成するモジュールにoutputを定義

受け取りたい値を「outoutブロック」で定義します。
ファイルは適宜分けても大丈夫です。
この例では「variableブロック」は分けています。
private_subnetsがユーザ定義ということに注意してください。

/module/VPC/main.tf
resource "aws_vpc" "main" {
    cidr_block       = var.main_vpc_cidr
    instance_tenancy = "default"
}
resource "aws_subnet" "private_subnets" {
    vpc_id     = aws_vpc.main.id
    cidr_block = var.private_subnets_cidr
}
# outputを定義するとモジュール呼び出し元で使える
output "subnets_id" { 
    value = "${aws_subnet.private_subnets.id}"
}

2. ルート側で使用する

アウトプットされた値を、さらにEC2作成用のモジュールに渡します。

/main.tf
module "VPC" {
  source                   = "./module/VPC"
  main_vpc_cidr            = var.main_vpc_cidr
  private_subnets_cidr     = var.private_subnets_cidr
}
# private_subnets内にEC2インスタンスを作成したい為、IDを渡す
module "EC2" {
  source     = "./module/EC2"
  subnet_ids = "${module.VPC.subnets_id}"    # ここ
}

3. モジュール側で使用する

受け取って使用する。

/module/EC2/main.tf
resource "aws_instance" "AppServer01" {
    ami           = data.aws_ami.amazon_linux_2.id
    instance_type = "t2.micro"
    subnet_id = var.subnet_ids    # ここ
    tags = { 
        Name = "AppServer01"
    }
}
/module/EC2/variables.tf
variable "subnet_ids" {
  # default = ""
}

以上でできました。

2.最後に

3時間ほど調べまくってもできなくて、「もう明日にしよう、でも最後にコードをみておこう」
とした際に、スペルミスに気づきました。
フロー自体は簡単だと思いますので、参考にしていただければ幸いです。

にしても、順番に書かなくてもよしなにやってくれるの助かりますね(笑)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1