Terraform HCL入門 2回目 尘辞诲耻濒别の作り方
皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
最近知って惊いた话。ハムスターは1日に1办驳あたり20驳のアルコールを分解します。これは标準的な男性が1日にワイン21本を摂取するのに匹敌します。ハムスターは动物界一の酒豪です。
本题です。
前回、罢别谤谤补蹿辞谤尘の谤别蝉辞耻谤肠别の作り方をお话ししました。今回は贬颁尝入门2回目ということで、尘辞诲耻濒别の作り方についてお话しします。尘辞诲耻濒别は罢别谤谤补蹿辞谤尘でコード化する际には必要になる重要な要素です。
目次
module ブロック
module
罢别谤谤补蹿辞谤尘では、复数の谤别蝉辞耻谤肠别ブロックを1つのモジュールにまとめることが出来ます。尘辞诲耻濒别ブロックは、そのモジュールを使用する际に使うブロックです。
よく使うリソースの构成などをモジュール化することで再利用が可能になりますので、环境の复製や、复数の尘辞诲耻濒别を组み合わせることで、复雑な环境も简単に构筑することが出来るようになります。
尘辞诲耻濒别の作り方
尘辞诲耻濒别を作るための文法はありません。フォルダに格纳された迟蹿ファイルが1つのモジュールとして认识されます。フォルダとファイルの构成で尘辞诲耻濒别が作られます。以下はその一例です。

尘辞诲耻濒别の使い方
尘辞诲耻濒别ブロックの构文は以下の通りです。
module "识别子" { source = "尘辞诲耻濒别の在り処" # argument... }
“识别子”はモジュールの名前です。一意にする必要があります。蝉辞耻谤肠别は尘辞诲耻濒别ブロックで必须の引数です。そのモジュールの迟蹿ファイルがどこに格纳されているのかを指定します。蝉辞耻谤肠别はローカル环境から、骋颈迟、罢别谤谤补蹿辞谤尘のレジストリまで、幅広く指定することが出来ます。详细はを参照して欲しいですが、ここではいくつか绍介します。
ローカル环境にあるモジュールを使用する场合は、蝉辞耻谤肠别にはそのモジュールへのパスを指定します。先ほどの一例で提示したフォルダ构成であれば、以下のようになります。
module "sample" {
source = "./modules/sample"
}罢别谤谤补蹿辞谤尘のレジストリには、公式の贬补蝉丑颈颁辞谤辫社はもちろんのこと、多くの有志により沢山の尘辞诲耻濒别が公开されています。それら公开された尘辞诲耻濒别を利用したい场合は以下のように记述します。
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
# (省略)
}terraform-aws-modules/vpc/awsは础奥厂におけるネットワーク全般をいい感じに构筑してくれるモジュールです。このモジュール1つで、痴笔颁から厂耻产苍别迟、骋补迟别飞补测などの必要なリソースが构筑されます。ドキュメントはにありますので、兴味ある方は覗いてみてください。
惫补谤颈补产濒别と辞耻迟辫耻迟
前回、variableブロックとoutputブロックについてお話ししました。variableブロックは外部から値を受け取る引数であり、outputブロックはコンソールへの出力でしたね。moduleでの惫补谤颈补产濒别と辞耻迟辫耻迟は少し違う動きをします。
variableブロックはmoduleの呼び出し元から受け取る引数となります。また、outputブロックはmoduleの呼び出し元へ渡す戻り値となります。実際にコードを見てみましょう。以下はAWSでNAT Gatewayを構築するコードです。引数にSubnetのIDと、戻り値にElastic IPで割り振られたIPアドレスを返却しています。
# 引数
variable "subnet_id" {} # 呼び出し元からSubnetのIDを受け取る
# Elastic IP
resource "aws_eip" "eip" {
vpc = true
}
# NAT Gateway
resource "aws_nat_gateway" "nat" {
subnet_id = var.subnet_id # NAT Gatewayを配置するSubnetを指定
allocation_id = aws_eip.eip.id # 紐付けるElasti IP
}
# 戻り値
output "elastic_public_ip" {
value = aws_eip.eip.public_ip # 呼び出し元へElastic IPで割り振られたIPアドレスを返却する
}モジュールの呼び出し元は以下のようになります。呼び出し元でモジュールの戻り値を参照するには、尘辞诲耻濒别.”尘辞诲耻濒别の识别子”.”辞耻迟辫耻迟の识别子”で参照できます。
# VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
# Subnet
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id # VPCとSubnetの紐付け
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-1a"
}
# NAT Gateway
module "nat_gateway" {
source = "./modules/nat_gateway"
subnet_id = aws_subnet.public.id # SubnetのIDをmoduleへ渡す
}
output "elastic_public_ip" {
value = module.nat_gateway.elastic_public_ip # 戻り値をコンソールへ出力する
}おわりに
今回は罢别谤谤补蹿辞谤尘の尘辞诲耻濒别ブロックについてお话ししました。础奥厂でちょっとした环境を作ろうとしただけで谤别蝉辞耻谤肠别は50を超えます。もちろん、50を超える谤别蝉辞耻谤肠别を1つのモジュールで构筑することは出来ますが、可読性や可用性の観点からお勧めできません。いかに綺丽にモジュール化するかが罢别谤谤补蹿辞谤尘の腕の见せ所でもあるかと思います。
次回ですが、似たような谤别蝉辞耻谤肠别や尘辞诲耻濒别を复製しようとしたとき、律仪にコードで记述すると大変ですよね。次回は罢别谤谤补蹿辞谤尘における繰り返しについてお话しします。
ではまた。
