Slide 26
Slide 26 text
ちょっとだけデモ
26
- よくあるWEB3層アーキテクチャのTerraform構成を読み込み、
コストを試算してもらいます
- コピー⽤
- 「Desktop/main.tfで定義されたリソースを
AWS Pricing MCP Serverで利⽤費計算して」
# --- Web層 (ALB & オートスケーリング) ---
resource "aws_lb" "web_alb" {
name = "${local.project_name}-web-alb", internal = false, load_balancer_type = "application"
security_groups = [aws_security_group.web_sg.id], subnets = local.public_subnet_ids
tags = {Name = "${local.project_name}-web-alb"}
}
resource "aws_lb_target_group" "web_tg" {
name = "${local.project_name}-web-tg", port = 80, protocol = "HTTP", vpc_id = local.vpc_id
}
resource "aws_lb_listener" "web_http" {
load_balancer_arn = aws_lb.web_alb.arn, port = 80, protocol = "HTTP"
default_action {type = "forward", target_group_arn = aws_lb_target_group.web_tg.arn}
}
resource "aws_launch_template" "web_lt" {
name_prefix = "${local.project_name}-web-", image_id = local.ami_id
instance_type = "m5.large", key_name = local.key_name
vpc_security_group_ids = [aws_security_group.web_sg.id]
}
resource "aws_autoscaling_group" "web_asg" {
name = "${local.project_name}-web-asg", vpc_zone_identifier = local.public_subnet_ids
desired_capacity = 2, max_size = 4, min_size = 2
target_group_arns = [aws_lb_target_group.web_tg.arn]
launch_template {id = aws_launch_template.web_lt.id, version = "$$Latest"}
}
# --- App層 (オートスケーリング) ---
resource "aws_launch_template" "app_lt" {
name_prefix = "${local.project_name}-app-", image_id = local.ami_id
instance_type = "c5.xlarge", key_name = local.key_name
vpc_security_group_ids = [aws_security_group.app_sg.id]
}
resource "aws_autoscaling_group" "app_asg" {
name = "${local.project_name}-app-asg", vpc_zone_identifier = local.private_app_subnet_ids
desired_capacity = 2, max_size = 4, min_size = 2
launch_template {id = aws_launch_template.app_lt.id, version = "$$Latest"}
}
# --- DB層 (RDS) ---
resource "aws_db_subnet_group" "main" {
name = "${local.project_name}-db-subnet-group", subnet_ids = local.private_db_subnet_ids
}
resource "aws_db_instance" "main" {
allocated_storage = 100, storage_type = "gp3", engine = "mysql", engine_version = "8.0"
instance_class = "db.r5.large", identifier = "${local.project_name}-db-instance"
username = local.db_username, password = local.db_password
db_subnet_group_name = aws_db_subnet_group.main.name
multi_az = true, skip_final_snapshot = true, publicly_accessible = false
vpc_security_group_ids = [aws_security_group.db_sg.id]
tags = {Name = "${local.project_name}-db-instance"}
}