🐙
TerraformのSGのモジュールファイル
SGのモジュールファイル
sg.tfファイル
# AWS セキュリティグループリソースの定義
resource "aws_security_group" "this" {
name = var.name # セキュリティグループの名前
description = var.description # セキュリティグループの説明
vpc_id = var.vpc_id # 関連付けるVPCのID
# インバウンドルールの定義
# dynamicブロックを使用して、複数のインバウンドルールを動的に生成
dynamic "ingress" {
for_each = var.ingress_rules # 入力されたインバウンドルールのリストを反復処理
content {
from_port = ingress.value["from_port"] # 開始ポート番号
to_port = ingress.value["to_port"] # 終了ポート番号
protocol = ingress.value["protocol"] # プロトコル (TCP/UDP/ICMP)
cidr_blocks = ingress.value["cidr_blocks"] # 許可するIP範囲
}
}
# アウトバウンドルールの定義
# dynamicブロックを使用して、複数のアウトバウンドルールを動的に生成
dynamic "egress" {
for_each = var.egress_rules # 入力されたアウトバウンドルールのリストを反復処理
content {
from_port = egress.value["from_port"] # 開始ポート番号
to_port = egress.value["to_port"] # 終了ポート番号
protocol = egress.value["protocol"] # プロトコル (TCP/UDP/ICMP)
cidr_blocks = egress.value["cidr_blocks"] # 許可するIP範囲
}
}
}
variables.tfファイル
# セキュリティグループの名前に関する変数
variable "name" {
description = "セキュリティグループの名前"
type = string # 変数の型(文字列)
}
# セキュリティグループの説明に関する変数
variable "description" {
description = "セキュリティグループの説明"
type = string # 変数の型(文字列)
default = "No description" # デフォルト値
}
# VPC IDに関する変数
variable "vpc_id" {
description = "セキュリティグループを作成するVPCのID"
type = string # 変数の型(文字列)
}
# インバウンドルールに関する変数
variable "ingress_rules" {
description = "セキュリティグループのインバウンドルール"
type = list(object({ # 変数の型(オブジェクトのリスト)
from_port = number
to_port = number
protocol = string
cidr_blocks = list(string)
}))
default = [] # デフォルト値(空のリスト)
}
# アウトバウンドルールに関する変数
variable "egress_rules" {
description = "セキュリティグループのアウトバウンドルール"
type = list(object({ # 変数の型(オブジェクトのリスト)
from_port = number
to_port = number
protocol = string
cidr_blocks = list(string)
}))
default = [] # デフォルト値(空のリスト)
}
variable "tags" {
description = "A mapping of tags to assign to the resource" // 変数の説明:この変数はAWSリソースに割り当てるタグのマッピングです。
type = map(string) // 変数の型:文字列のキーと値を持つマップ型です。
default = {} // デフォルト値:何も指定されていない場合、この変数は空のマップとして初期化されます。
}
output.tfファイル
# 出力(output)ブロックでセキュリティグループのIDを出力する設定を行います。
output "security_group_id" {
# aws_security_group.this.id は、"this" と名付けられた aws_security_group リソースのIDを取得します。
value = aws_security_group.this.id
}
output "sg_id" {
description = "セキュリティグループID"
value = aws_security_group.this.id
}
providers.tfファイル
# 必要なプロバイダとそのバージョンを定義
terraform {
required_providers {
aws = {
source = "hashicorp/aws" // AWSプロバイダのソース
version = "~> 5.0" // バージョン指定
}
}
}
# AWSプロバイダの設定
provider aws {
region = "ap-northeast-1" // AWSリージョン(東京リージョン)
}
README.mdファイル
sg.tfファイル
項目 | 説明 |
---|---|
resource "aws_security_group" |
AWSのセキュリティグループを定義するTerraformリソースです。 |
name |
セキュリティグループの名前を指定します。variables.tf で定義されています。 |
description |
セキュリティグループの説明を指定します。variables.tf で定義されています。 |
vpc_id |
セキュリティグループを関連付けるVPCのIDを指定します。variables.tf で定義されています。 |
dynamic "ingress" |
dynamic ブロックを使用して、複数のインバウンドルールを動的に生成します。 |
dynamic "egress" |
dynamic ブロックを使用して、複数のアウトバウンドルールを動的に生成します。 |
variables.tfファイル
項目 | 説明 |
---|---|
variable "name" |
セキュリティグループの名前を指定します。 |
variable "description" |
セキュリティグループの説明を指定します。デフォルト値は"No description"です。 |
variable "vpc_id" |
セキュリティグループを作成するVPCのIDを指定します。 |
variable "ingress_rules" |
インバウンドルールを定義する変数です。リスト形式で複数のルールを指定できます。 |
variable "egress_rules" |
アウトバウンドルールを定義する変数です。リスト形式で複数のルールを指定できます。 |
variable "tags" |
AWSリソースに割り当てるタグのマッピングを指定します。デフォルトは空のマップです。 |
output.tfファイル
項目 | 説明 |
---|---|
output "security_group_id" |
作成されたセキュリティグループのIDを出力します。このIDは他のTerraformコードやモジュールで使用できます。 |
output "sg_id" |
同上。ただし、説明が日本語で追加されています。 |
Discussion