Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
terraform_module_ Beginner
Search
Yona
January 21, 2024
10
180k
terraform_module_ Beginner
Yona
January 21, 2024
Tweet
Share
More Decks by Yona
See All by Yona
Grafana_Claude_Code
yonasou
1
740
project_offline_communication
yonasou
0
13
Easy choice of IaC
yonasou
1
330
Illust_Terraform
yonasou
0
2.3k
re:growth 2024
yonasou
0
500
Using figma is a good thing
yonasou
1
700
IoT_Greengrass_Begginer
yonasou
0
310
Grafana_IoT_Data_DataLake
yonasou
0
970
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Bash Introduction
62gerente
615
210k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
We Have a Design System, Now What?
morganepeng
54
7.9k
Context Engineering - Making Every Token Count
addyosmani
9
510
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Designing for Performance
lara
610
69k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Transcript
やさしいTerraform Module入門
自己紹介 よな(与那嶺 創) @sooouuun 所属 クラスメソッド株式会社 ひとこと 初LTなので緊張してます!
01 02 03 04 初心者から見たTerraform Module アジェンダ Moduleってここが難しい Moduleを構成してみる Moduleを使わない構成
TerraformのModuleって便利そう よし、使ってみよう!! こんな経験ありませんか?
もう嫌だ、全部「main.tf」で書いちゃえ! main.tf variables.tf module
全体像が掴みづらい!
まずは簡単な構成から!
main.tfのみ root main.tf
root main.tf variables.tf variables.tf を追加
root main.tf variables.tf EC2 VPC IAM CIDRブロック AMI ID タグ名
etc... リソース定義 変数定義 分離
main.tfを分ける root network.tf ec2.tf variables.tf root main.tf variables.tf
root network.tf ec2.tf Public Subnet EC2を配置するPublic Subnetの情報が必要 EC2
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 リソース参照
ここからが本題
root main.tf variables.tf network module network.tf ec2 ... variables.tf outputs.tf
全体像
root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf 分けて考えよう
... moduleディレクトリ rootディレクトリ
root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf ...
moduleディレクトリ rootディレクトリ
root main.tf variables.tf 変数を定義 どのようなモジュールがあるのか モジュールで使う変数の受け渡し
root main.tf variables.tf network module network.tf ec2 variables.tf outputs.tf ...
moduleディレクトリ rootディレクトリ
network module network.tf ec2.tf ec2 variables.tf variables.tf outputs.tf outputs.tf EC2
VPC Internet Gateway Subnet
network module network.tf variables.tf outputs.tf VPC Internet Gateway Subnet CIDRブロック
AZ タグ VPCのid subnetのid
個人的にわかりにくいポイント
root main.tf variables.tf network module network.tf ec2 ... variables.tf outputs.tf
どこで変数定義すればいい? 何書けばいい? 出力した値はどうやって使う?
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
ÇÄ 変数受け取り 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 Ä 変数定義 Ä 変数代入
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 参照
main.tf variables.tf (module) variables.tf (root) network.tf まとめ
root network.tf ec2.tf ec2.tf リソース参照 リソース参照 network.tf network module ec2
階層が違うので参照できない 同じ階層なので参照できる
リソース参照 ただし、直接は参照できない... ec2.tf network.tf network module ec2 outputs.tf
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
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 アウトプット
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
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 参照
main.tf network.tf outputs.tf ec2.tf variables.tf まとめ
まとめ F まずは小さくやってみ( F 何回もやってみないと覚えられな2 F VSCodeを使えば、変数定義の間違いを教えてくれる