🐙

TerraformのSGのモジュールファイル

2023/10/28に公開

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