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
Grafana_Claude_Code
yonasou
1
860
project_offline_communication
yonasou
0
17
Easy choice of IaC
yonasou
1
370
Illust_Terraform
yonasou
0
2.4k
re:growth 2024
yonasou
0
550
Using figma is a good thing
yonasou
1
790
IoT_Greengrass_Begginer
yonasou
0
340
Grafana_IoT_Data_DataLake
yonasou
0
1.1k
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
The Curious Case for Waylosing
cassininazir
0
280
The Language of Interfaces
destraynor
162
26k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
190
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
220
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
230
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
470
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
The Spectacular Lies of Maps
axbom
PRO
1
660
Building a Scalable Design System with Sketch
lauravandoore
463
34k
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を使えば、変数定義の間違いを教えてくれる