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
10
190k
terraform_module_ Beginner
Yona
January 21, 2024
Tweet
Share
More Decks by Yona
See All by Yona
IoT-Greengrass-SubDeploy.pdf
yonasou
0
89
Grafana_Claude_Code
yonasou
1
800
project_offline_communication
yonasou
0
14
Easy choice of IaC
yonasou
1
350
Illust_Terraform
yonasou
0
2.4k
re:growth 2024
yonasou
0
530
Using figma is a good thing
yonasou
1
740
IoT_Greengrass_Begginer
yonasou
0
330
Grafana_IoT_Data_DataLake
yonasou
0
1k
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
YesSQL, Process and Tooling at Scale
rocio
174
15k
The SEO Collaboration Effect
kristinabergwall1
0
350
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
The Curious Case for Waylosing
cassininazir
0
230
Agile that works and the tools we love
rasmusluckow
331
21k
A Tale of Four Properties
chriscoyier
162
24k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
430
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
270
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を使えば、変数定義の間違いを教えてくれる