Amazon EC2 Auto Scaling Group (ASG) と Application Load Balancer (ALB) を組み合わせて使用する場合、以下の手順で設定を行います。
-
Application Load Balancer (ALB) の作成:
- AWS Management Console にログインし、EC2 ダッシュボードから「Load Balancers」を選択。
- 「Create Load Balancer」をクリックし、Application Load Balancer を選択。
- 必要な情報を入力して ALB を作成。
-
Target Group の作成:
- ALB 作成時に、Target Group を作成するか、後から手動で作成することができます。
- Target Group では、ALB がトラフィックを転送する EC2 インスタンスを指定します。
-
Auto Scaling Group (ASG) の作成:
- EC2 ダッシュボードから「Auto Scaling Groups」を選択して「Create Auto Scaling group」をクリック。
- Launch Configuration または Launch Template を選択または作成。
- ASG の詳細を設定。ここで、先ほど作成した Target Group を指定します。
-
ASG に ALB の Target Group を関連付ける:
- ASG の作成または編集時に、[Advanced settings] セクションで、先ほど作成した Target Group を選択。
-
ALB のリスナールールの設定:
- 必 要に応じて、ALB のリスナールールを設定して、特定の URL パスやホストヘッダーに基づいてトラフィックを異なる Target Group にルーティングします。
-
ヘルスチェックの設定:
- ALB と ASG のヘルスチェックを適切に設定することで、正常でないインスタンスを自動的に取り除くことができます。
-
セキュリティグループの設定:
- ALB と EC2 インスタンスの両方に対して適切なセキュリティグループを設定します。
-
DNS と ALB の関連付け:
- 必要に応じて、ドメイン名を ALB の DNS 名にマッピングします。
以上で、ALB は受信したトラフィックを ASG 内のインスタンスに均等に分散して転送できるようになります。ASG は、インスタンスのヘルスチェックに基づいて、新しいインスタンスの起動や不健康なインスタンスの終了を自動的に行います。
Terraformで実装
1. ALB の作成
今回は、内部向けのApplication Load Balancer (ALB) をTerraformで作成するための基本的なコードを以下に示します。
provider "aws" {
region = "us-west-2" # 例としてus-west-2リージョンを使用しています。適切なリージョンに変更してください。
}
resource "aws_security_group" "alb_sg" {
name = "alb-sg"
description = "Security group for the internal ALB"
# 以下はHTTPアクセスを許可する例です。必要に応じて変更してください。
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["10.0.0.0/16"] # VPCのCIDR範囲を指定してください。
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_lb" "internal_alb" {
name = "my-internal-alb"
internal = true
load_balancer_type = "application"
security_groups = [aws_security_group.alb_sg.id]
enable_deletion_protection = false
enable_cross_zone_load_balancing = true
subnets = [
# ここに使用するサブネットのIDをリストとして指定してください。
# "subnet-0123456789abcdef0",
# "subnet-0123456789abcdef1",
# ...
]
tags = {
Name = "my-internal-alb"
}
}
resource "aws_lb_listener" "front_end" {
load_balancer_arn = aws_lb.internal_alb.arn
port = "80"
protocol = "HTTP"
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "Hello, World"
status_code = "200"
}
}
}
上記のコードは、内部向けのALBを作成するための基本的なTerraformコードです。必要に応じて、セキュリティグループの設定やサブネットのID、リスナーの設定などを変更してください。
2. Target Group の作成
ALBのTarget GroupをTerraformで作成する方法を以下に示します。
provider "aws" {
region = "us-west-2" # 例としてus-west-2リージョンを使用しています。適切なリージョンに変更してください。
}
resource "aws_lb_target_group" "alb_target_group" {
name = "my-alb-target-group"
port = 80
protocol = "HTTP"
vpc_id = "vpc-0123456789abcdef0" # 適切なVPCのIDに変更してください。
health_check {
enabled = true
interval = 30
path = "/"
port = "traffic-port"
timeout = 5
healthy_threshold = 3
unhealthy_threshold = 3
protocol = "HTTP"
matcher = "200-399"
}
tags = {
Name = "my-alb-target-group"
}
}
上記のコードは、ALBのTarget Groupを作成するための基本的なTerraformコードです。必要に応じて、ヘルスチェックの設定やVPCのIDなどを変更してください。
このTarget Groupを使用して、EC2インスタンスや他のリソースを登録することで、ALBがトラフィックを転送する先として機能します。
3. ASG の作成
Auto Scaling Group (ASG) をTerraformで作成する方法を以下に示します。
まず、Launch Configurationを作成し、その後でAuto Scaling Groupを作成します。以下はその基本的なTerraformコードです。
provider "aws" {
region = "us-west-2" # 例としてus-west-2リージョンを使用しています。適切なリージョンに変更してください。
}
resource "aws_launch_configuration" "asg_config" {
name_prefix = "my-asg-config-"
image_id = "ami-0123456789abcdef0" # 適切なAMI IDに変更してください。
instance_type = "t2.micro"
security_groups = ["sg-0123456789abcdef0"] # 適切なセキュリティグループIDに変更してください。
# 必要に応じて他の設定を追加してください。
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "asg" {
name = "my-asg"
launch_configuration = aws_launch_configuration.asg_config.name
min_size = 1
max_size = 3
desired_capacity = 2
vpc_zone_identifier = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"] # 適切なサブネットIDに変更してください。
target_group_arns = ["arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/abcdef0123456"] # 先ほど作成したTarget GroupのARNに変更してください。
tags = {
Name = "my-asg"
}
}
上記のコードは、Launch ConfigurationとAuto Scaling Groupを作成するための基本的なTerraformコードです。必要に応じて、AMI ID、セキュリティグループID、サブネットID、Target GroupのARNなどを変更してください。
4. ALB と ASG の関連付け
4番の「ASG に ALB の Target Group を関連付ける」に関して、3番の手順で提供したTerraformコード内で既に実施しています。具体的には、aws_autoscaling_group
リソースの中で target_group_arns
属性を使用して、ASGにTarget Groupを関連付けています。
以下はその部分を再掲します:
resource "aws_autoscaling_group" "asg" {
...
target_group_arns = ["arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/abcdef0123456"] # 先ほど作成したTarget GroupのARNに変更してください。
...
}
この target_group_arns
属性により、ASGのインスタンスが起動または終了する際に、ALBのTarget Groupに自動的に登録または登録解除されます。