Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
terraform_module_ Beginner
Search
Yona
January 21, 2024
190k
11
Share
terraform_module_ Beginner
Yona
January 21, 2024
More Decks by Yona
See All by Yona
Kiroを使ってドキュメント管理を少し楽にしてみた
yonasou
0
110
Grafana_Claude_Code
yonasou
1
920
project_offline_communication
yonasou
0
23
Easy choice of IaC
yonasou
1
390
Illust_Terraform
yonasou
0
2.5k
re:growth 2024
yonasou
0
590
Using figma is a good thing
yonasou
1
820
IoT_Greengrass_Begginer
yonasou
0
360
Grafana_IoT_Data_DataLake
yonasou
0
1.1k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.8k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
330
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
HDC tutorial
michielstock
2
660
Prompt Engineering for Job Search
mfonobong
0
300
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
380
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Chasing Engaging Ingredients in Design
codingconduct
0
190
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を使えば、変数定義の間違いを教えてくれる