こんにちは。よっしーです(^^)
今日は、Terrafromを利用したECS環境の構築におけるELBについてご紹介します。
前提
構築するECS環境は下記のサイトをベースにしています。
また、この記事は下記の記事の続きとなっています。
背景
この記事では、ECS環境におけるELBの構築についてご紹介しています。
構築イメージ図
この記事で構築しようとしているECSの構成図は下記のとおりです。
ファイル作成
ECS環境の構築で作成するファイルは下記のとおりです。
21_learn_terraform-aws-ecs
├── main.tf
├── output.tf
├── variables.tf
├── ecs
│ ├── ecs.tf
│ ├── output.tf
│ └── variables.tf
├── iam
│ ├── iam.tf
│ ├── output.tf
│ └── variables.tf
├── lb
│ ├── lb.tf
│ ├── output.tf
│ └── variables.tf
├── sg
│ ├── output.tf
│ ├── sg.tf
│ └── variables.tf
└── vpc
├── output.tf
├── variables.tf
└── vpc.tf
今回は、下記のファイル内容をご紹介します。
- lb/lb.tf
- lb/output.tf
- lb/variables.tf
lb/lb.tf
下記の内容で新規作成します。
resource "aws_lb" "learn_lb" {
name = var.tag_name
internal = false
load_balancer_type = "application"
security_groups = ["${var.sg_id}"]
subnets = ["${var.public_a_id}", "${var.public_c_id}"]
}
resource "aws_lb_listener" "learn_lb_listener" {
load_balancer_arn = aws_lb.learn_lb.arn
port = "80"
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.learn_lb_target_group.arn
}
}
resource "aws_lb_target_group" "learn_lb_target_group" {
name = var.tag_name
port = 80
protocol = "HTTP"
vpc_id = "${var.vpc_id}"
target_type = "ip"
}
lb/output.tf
下記の内容で新規作成します。
output "lb_target_group_arn" {
value = "${aws_lb_target_group.learn_lb_target_group.arn}"
}
output "lb_dns_name" {
value = "${aws_lb.learn_lb.dns_name}"
}
lb/variables.tf
下記の内容で新規作成します。
variable "region" {}
variable "az_a" {}
variable "az_c" {}
variable "name_prefix" {}
variable "tag_name" {}
variable "tag_group" {}
variable "vpc_id" {}
variable "public_a_id" {}
variable "public_c_id" {}
variable "sg_id" {}
解説
lb/lb.tf
このコードは、Terraformを使用してAmazon Web Services (AWS) 上にロードバランサー(Load Balancer)とそれに関連するリソースをデプロイするためのものです。ロードバランサーは、インバウンドトラフィックを複数のターゲットに分散させることで、アプリケーションの可用性とパフォーマンスを向上させる役割を果たします。
以下は、コード内の各リソースの解説です。
aws_lb
リソース(learn_lb): このリソースは、アプリケーションロードバランサーを定義しています。ロードバランサーは、var.tag_name
で指定された名前を持ち、外部向けに公開されるものであることを示すためinternal
パラメータはfalse
に設定されています。load_balancer_type
は “application” と指定されており、アプリケーションロードバランサーを作成することを示しています。security_groups
はセキュリティグループのIDを指定し、subnets
はロードバランサーが配置されるサブネットを指定しています。aws_lb_listener
リソース(learn_lb_listener): このリソースは、ロードバランサーのリスナー(ポートの待ち受け)を定義しています。80ポートでHTTPプロトコルを待ち受ける設定となっています。default_action
内で、受信したトラフィックを指定されたターゲットグループにフォワードするアクションが定義されています。aws_lb_target_group
リソース(learn_lb_target_group): このリソースは、ターゲットグループを定義しています。ターゲットグループは、ロードバランサーが転送するターゲット(通常はEC2インスタンス)をグループ化するために使用されます。name
はターゲットグループの名前、port
はターゲットが受け入れるポート、protocol
はターゲットが使用するプロトコル、vpc_id
は関連付けるVPCのID、target_type
はターゲットのタイプを指定しています。
このコードによって、アプリケーションロードバランサーが作成され、80ポートのHTTPトラフィックを受信し、ターゲットグループに転送する設定が行われます。ただし、このコードはTerraformの一部であり、他のリソースや変数と連携して動作するため、完全なコンテキストを持って実行する必要があります。
lb/output.tf
このコードは、Terraformの output
ブロックを使用して、AWSのロードバランサーに関する情報を出力するためのものです。output
ブロックを使用すると、Terraformの適用後に生成されるリソースの情報を表示できます。以下にコード内の各 output
ブロックの説明を行います。
lb_target_group_arn
: このoutput
ブロックは、ターゲットグループのARN(Amazon Resource Name)を出力するために使用されています。ターゲットグループのARNは、他のリソースやスクリプトなどで参照される際に使用される識別子です。lb_dns_name
: このoutput
ブロックは、ロードバランサーのDNS名を出力するために使用されています。ロードバランサーのDNS名は、クライアントがアクセスするために使用するURLの一部です。
これによって、Terraformの適用後にコマンドライン上で terraform apply
を実行すると、ロードバランサーのターゲットグループのARNとDNS名が表示されます。これらの情報は、デプロイしたリソースにアクセスするために他のシステムやスクリプトなどで使用できます。
lb/variables.tf
提供されたコードは変数(Variables)の宣言を行っており、Terraformコード内で利用される値を格納するためのものです。変数は、コードの柔軟性と再利用性を高めるために使用されます。以下が変数の説明です。
region
: AWSのリージョンを指定するための変数です。例えば、”us-west-1″や”eu-central-1″などが入ることが想定されます。az_a
およびaz_c
: Availability Zone(AZ)を指定するための変数です。AWSのリージョン内でリソースを配置する際、AZは冗長性や可用性を考慮して選択されます。これらの変数には、AZの識別子(例: “us-west-1a”、”eu-central-1c”)が入ることが想定されます。name_prefix
: リソースに付けるプレフィックス(接頭辞)を指定する変数です。例えば、”prod-” や “dev-” などが入ることが想定されます。tag_name
およびtag_group
: リソースに付けるタグの値を指定するための変数です。AWSリソースにはタグを付けて、リソースの識別や管理を容易にすることができます。これらの変数には、適切なタグの値が入ることが想定されます。vpc_id
: Virtual Private Cloud(VPC)のIDを指定するための変数です。VPCはAWS内でプライベートなネットワーク環境を提供するもので、この変数には対象のVPCのIDが入ることが想定されます。public_a_id
およびpublic_c_id
: パブリックサブネットのIDを指定するための変数です。これらは、AWSのVPC内のパブリックなサブネットのIDを表します。sg_id
: セキュリティグループのIDを指定するための変数です。セキュリティグループは、AWS内でのネットワーク通信を制御する上で非常に重要な役割を果たすため、適切なセキュリティ設定が行われることが必要です。
これらの変数は、Terraformコード内で ${var.変数名}
の形式で参照され、変数に設定された値が使用されます。実行時には、変数の値を指定することで特定の環境に合わせたコンフィグレーションを行うことができます。
おわりに
今日は、Terrafromを利用したECR環境の構築するために必要なファイルの一部をご紹介しました。残りのファイルも明日以降、ご紹介していきます。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント