📌
Terraformのec2のモジュールファイル
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