Slide 1

Slide 1 text

やさしいTerraform Module入門

Slide 2

Slide 2 text

自己紹介 よな(与那嶺 創) @sooouuun 所属 クラスメソッド株式会社 ひとこと 初LTなので緊張してます!

Slide 3

Slide 3 text

01 02 03 04 初心者から見たTerraform Module アジェンダ Moduleってここが難しい Moduleを構成してみる Moduleを使わない構成

Slide 4

Slide 4 text

TerraformのModuleって便利そう よし、使ってみよう!! こんな経験ありませんか?

Slide 5

Slide 5 text

もう嫌だ、全部「main.tf」で書いちゃえ! main.tf variables.tf module

Slide 6

Slide 6 text

全体像が掴みづらい!

Slide 7

Slide 7 text

まずは簡単な構成から!

Slide 8

Slide 8 text

main.tfのみ root main.tf

Slide 9

Slide 9 text

root main.tf variables.tf variables.tf を追加

Slide 10

Slide 10 text

root main.tf variables.tf EC2 VPC IAM CIDRブロック AMI ID タグ名 etc... リソース定義 変数定義 分離

Slide 11

Slide 11 text

main.tfを分ける root network.tf ec2.tf variables.tf root main.tf variables.tf

Slide 12

Slide 12 text

root network.tf ec2.tf Public Subnet EC2を配置するPublic Subnetの情報が必要 EC2

Slide 13

Slide 13 text

network.tf ec2.tf resource "aws_instance" "ec2" { subnet_id = } aws_subnet.public_subnet.id resource "aws_vpc" "vpc" { cidr_block = var.vpc_cidr } resource " " " " { ... } aws_subnet public_subnet 参照 root network.tf ec2.tf リソース参照

Slide 14

Slide 14 text

ここからが本題

Slide 15

Slide 15 text

root main.tf variables.tf network module network.tf ec2 ... variables.tf outputs.tf 全体像

Slide 16

Slide 16 text

root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf 分けて考えよう ... moduleディレクトリ rootディレクトリ

Slide 17

Slide 17 text

root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf ... moduleディレクトリ rootディレクトリ

Slide 18

Slide 18 text

root main.tf variables.tf 変数を定義 どのようなモジュールがあるのか モジュールで使う変数の受け渡し

Slide 19

Slide 19 text

root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf ... moduleディレクトリ rootディレクトリ

Slide 20

Slide 20 text

network module network.tf ec2.tf ec2 variables.tf variables.tf outputs.tf outputs.tf EC2 VPC Internet Gateway Subnet

Slide 21

Slide 21 text

network module network.tf variables.tf outputs.tf VPC Internet Gateway Subnet CIDRブロック AZ タグ VPCのid subnetのid

Slide 22

Slide 22 text

個人的にわかりにくいポイント

Slide 23

Slide 23 text

root main.tf variables.tf network module network.tf ec2 ... variables.tf outputs.tf どこで変数定義すればいい? 何書けばいい? 出力した値はどうやって使う?

Slide 24

Slide 24 text

main.tf module "network" { az = var.az vpc_cidr = var.vpc_cidr public_cidr = var.public_cidr } module "ec2" { public_id = module.network.public_id az = var.az } source = "./module/network" source = "./module/ec2" network module network.tf ec2.tf ec2 variables.tf variables.tf outputs.tf outputs.tf

Slide 25

Slide 25 text

ÇÄ 変数受け取り root main.tf variables.tf network module network.tf variables.tf module "network" { source = "./module/network” = } vpc_cidr var.vpc_cidr main.tf variables.tf variable " " { description = "The CIDR block for the VPC" type = string default = "10.0.0.0/16" } vpc_cidr variables.tf variable " " {} vpc_cidr ƒÄ 変数定義 ŒÄ 変数代入

Slide 26

Slide 26 text

root main.tf variables.tf network module network.tf variables.tf resource "aws_vpc" "vpc" { cidr_block = } var.vpc_cidr network.tf variables.tf variable " " {} vpc_cidr 参照

Slide 27

Slide 27 text

main.tf variables.tf (module) variables.tf (root) network.tf ⁨ ⁩ まとめ

Slide 28

Slide 28 text

root network.tf ec2.tf ec2.tf リソース参照 リソース参照 network.tf network module ec2 階層が違うので参照できない 同じ階層なので参照できる

Slide 29

Slide 29 text

リソース参照 ただし、直接は参照できない... ec2.tf network.tf network module ec2 outputs.tf

Slide 30

Slide 30 text

main.tf module "network" { source = "./module/network" az = var.az vpc_cidr = var.vpc_cidr public_cidr = var.public_cidr } module "ec2" { source = "./module/ec2" public_id = az = var.az } module.network.public_id network module network.tf ec2.tf ec2 variables.tf variables.tf outputs.tf outputs.tf

Slide 31

Slide 31 text

outputs.tf output "public_id" { value = } aws_subnet.public.id resource "aws_subnet" " " { ... } public ec2.tf network.tf network.tf network module ec2 outputs.tf アウトプット

Slide 32

Slide 32 text

outputs.tf output "public_id" { value = } aws_subnet.public.id module "ec2" { source = "./module/ec2" = } public_id module.network.public_id main.tf ec2.tf network module ec2 outputs.tf main.tf variables.tf variable " " {} public_id variables.tf

Slide 33

Slide 33 text

variable " " {} public_id resource "aws_instance" "ec2" { subnet_id = } var.public_id ec2.tf ec2.tf network module ec2 outputs.tf main.tf variables.tf variables.tf 参照

Slide 34

Slide 34 text

main.tf network.tf outputs.tf ec2.tf variables.tf ⁨ ⁩ まとめ

Slide 35

Slide 35 text

⁨⁩まとめ F まずは小さくやってみ( F 何回もやってみないと覚えられな2 F VSCodeを使えば、変数定義の間違いを教えてくれる