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
5
79k
terraform_module_ Beginner
Yona
January 21, 2024
Tweet
Share
More Decks by Yona
See All by Yona
re:growth 2024
yonasou
0
200
Using figma is a good thing
yonasou
1
410
IoT_Greengrass_Begginer
yonasou
0
190
Grafana_IoT_Data_DataLake
yonasou
0
560
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1030
460k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Typedesign – Prime Four
hannesfritz
40
2.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Large-scale JavaScript Application Architecture
addyosmani
510
110k
How STYLIGHT went responsive
nonsquared
96
5.3k
Adopting Sorbet at Scale
ufuk
74
9.2k
A Tale of Four Properties
chriscoyier
157
23k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
240
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
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を使えば、変数定義の間違いを教えてくれる