📌

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

2023/10/29に公開

ec2のモジュールファイル

ec2.tfファイル
# ALB用のターゲットグループを作成
resource "aws_alb_target_group" "example" {
  name     = "example-targetgroup"  # ターゲットグループ名
  port     = 80  # ポート番号
  protocol = "HTTP"  # プロトコル
  vpc_id   = var.vpc_id  # VPC ID
}

# Auto Scaling Group (ASG) の設定
resource "aws_autoscaling_group" "user_server_asg" {
  name                 = "sample-dev-users-asg"  # ASG名
  launch_template {
    id      = aws_launch_template.user_server_lt.id  # ローンチテンプレートID
    version = "$Latest"  # ローンチテンプレートのバージョン
  }
  vpc_zone_identifier  = var.protected_subnet_ids  # サブネットID
  desired_capacity     = 2  # 望ましいインスタンス数
  min_size             = 2  # 最小インスタンス数
  max_size             = 4  # 最大インスタンス数
  target_group_arns    = [aws_alb_target_group.example.arn]  # ターゲットグループ
  protect_from_scale_in = true  # スケールイン保護を有効にする

  # タグ設定
  tag {
    key                 = "Name"
    value               = "sample-dev-users-asg"
    propagate_at_launch = true
  }
}

# ターゲットトラッキングスケーリングポリシー
resource "aws_autoscaling_policy" "example" {
  name                   = "example-policy"  # ポリシー名
  autoscaling_group_name = aws_autoscaling_group.user_server_asg.name  # ASG名
  policy_type            = "TargetTrackingScaling"  # ポリシーのタイプ

  target_tracking_configuration {
    predefined_metric_specification {
      predefined_metric_type = "ASGAverageCPUUtilization"  # CPU使用率をトラッキング
    }

    target_value = 50.0  # 目標値
  }
}

# ターゲットグループとASGを関連付ける
resource "aws_autoscaling_attachment" "asg_attachment" {
  autoscaling_group_name = aws_autoscaling_group.user_server_asg.name  # ASG名
  lb_target_group_arn    = aws_alb_target_group.example.arn  # ターゲットグループARN
}

# ローンチテンプレートの定義
resource "aws_launch_template" "user_server_lt" {
  name          = "sample-dev-users-template"  # テンプレート名
  instance_type = var.instance_type  # インスタンスタイプ
  image_id      = var.ami_id  # AMI ID
  key_name      = ""  # キーペアなし

  # タグ設定
  tags = {
    "Name" = "sample-dev-users-template"
    "Environment" = "Dev"
  }
}


variables.tfファイル
# 各種変数の定義

# VPC ID
variable "vpc_id" {
  description = "VPCのID"
  type        = string
}

# サブネットID
variable "subnets" {
  description = "サブネットのIDのリスト"
  type        = list(string)
}

# 可用性ゾーン
variable "availability_zones" {
  type = list(string)
}

# AMI ID
variable "ami_id" {
  type        = string
  description = "AMI ID for instances"
}

# SSHキー名
variable "key_name" {
  type        = string
  description = "SSH key name for instances"
}

# ASG名
variable "asg_name" {
  type = string
}

# 最小サイズ
variable "min_size" {
  type = number
}

# 最大サイズ
variable "max_size" {
  type = number
}

# プライベートサブネットID
variable "protected_subnet_ids" {
  description = "List of IDs of private subnets"
  type        = list(string)
  default     = []
}

# インスタンスタイプ
variable "instance_type" {
  description = "EC2 instance type"
  type        = string
  default     = "t2.micro"  // デフォルト値
}


output.tfファイル
# 出力定義
# 出力変数の定義

# ASG IDを出力
output "autoscaling_group_id" {
  value       = aws_autoscaling_group.user_server_asg.id  # ASG ID
  description = "Auto Scaling GroupのID"  # 説明
}


providers.tfファイル
 # 必要なプロバイダとそのバージョンを定義
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"  // AWSプロバイダのソース
      version = "~> 5.0"          // バージョン指定
    }
  }
}

# AWSプロバイダの設定
provider aws {
  region = "ap-northeast-1"  // AWSリージョン(東京リージョン)
}


README.mdファイル

ec2.tfファイル

リソースタイプ リソース名 説明
aws_alb_target_group example ALB(Application Load Balancer)のターゲットグループを作成します。
aws_autoscaling_group user_server_asg ユーザ用サーバのAuto Scaling Groupを作成し、スケーリングとターゲットグループの関連付けを行います。
aws_autoscaling_policy example スケーリングポリシーを設定し、CPU利用率をトラッキングするターゲットトラッキングスケーリングを使用します。
aws_autoscaling_attachment asg_attachment Auto Scaling GroupとALBターゲットグループの関連付けを行います。
aws_launch_template user_server_lt EC2インスタンスの起動テンプレートを作成し、インスタンスの設定を指定します。

variables.tfファイル

変数名 説明
vpc_id VPCのID
subnets サブネットのIDのリスト
availability_zones 使用可能なゾーンのリスト
ami_id インスタンス用のAMI(Amazon Machine Image)のID
key_name インスタンスに関連付けるSSHキーの名前
asg_name Auto Scaling Groupの名前
min_size Auto Scaling Groupの最小サイズ
max_size Auto Scaling Groupの最大サイズ
protected_subnet_ids プライベートサブネットのIDのリスト

output.tfファイル

出力名 説明
autoscaling_group_id Auto Scaling GroupのID

Discussion