• システム開発に関わる内容をざっくりと書いていく

TerraFormざっくりパート別

Terraformを使ったインフラ構築の基本的なパートに分けて解説


1. Foundation(基礎部分)

Foundationは、インフラ全体の土台となる部分を指す。具体的には、クラウドプロバイダーのアカウント設定や認証情報の管理、リージョンの設定など、インフラストラクチャを構築する前の準備が含まれる。

  • プロバイダーの設定: 例えば、AWSを使用する場合、provider "aws" でリージョンや認証情報を設定する。
hcl
provider "aws" {
region = "us-west-2"
}

2. Network(ネットワーク)

ネットワーク構築は、インフラの中核部分であり、セキュリティや可用性に直結する重要な部分。Terraformを使って、以下のようなネットワークリソースを定義する。

  • VPC (Virtual Private Cloud)
    AWSで仮想ネットワークを作成する際に使用する。独自のネットワーク範囲(CIDRブロック)を指定して、リソースを隔離する。
  • サブネット (Subnet)
    VPC内に複数のサブネットを作成し、ネットワークを分割する。サブネットはCIDRブロックによって分けられ、特定のリージョンやアベイラビリティゾーンに配置できる。
  • インターネットゲートウェイ (Internet Gateway)
    インターネットとの接続を許可するためのゲートウェイ。
  • ルートテーブル (Route Table)
    ネットワーク内の通信ルールを定義。インターネットへのトラフィックやVPNなど、外部への接続を設定する。
  • ネットワーク ACL (Network ACL)
    VPC全体のサブネットに対して、出入りするトラフィックを制御するフィルタリングルールを設定する。
  • セキュリティグループ (Security Group)
    各インスタンスごとに適用されるファイアウォールルールを定義する。セキュリティグループは、入出力トラフィックを細かく制御できる。

Terraformでのネットワークリソース定義例

以下は、AWSで基本的なVPC、サブネット、インターネットゲートウェイ、ルートテーブルを定義する例。

hcl
# VPCを作成
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"

tags = {
Name = "example-vpc"
}
}

# サブネットを作成
resource "aws_subnet" "example" {
vpc_id = aws_vpc.example.id
cidr_block = "10.0.1.0/24"

tags = {
Name = "example-subnet"
}
}

# インターネットゲートウェイを作成
resource "aws_internet_gateway" "example" {
vpc_id = aws_vpc.example.id

tags = {
Name = "example-internet-gateway"
}
}

# ルートテーブルを作成し、インターネット経由のルートを追加
resource "aws_route_table" "example" {
vpc_id = aws_vpc.example.id

route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.example.id
}

tags = {
Name = "example-route-table"
}
}

# サブネットをルートテーブルに関連付ける
resource "aws_route_table_association" "example" {
subnet_id = aws_subnet.example.id
route_table_id = aws_route_table.example.id
}

この例では、VPC内にサブネットを作成し、インターネットゲートウェイを通して外部ネットワークへの接続を許可している。また、ルートテーブルを作成し、サブネットに関連付けている。


3. Runtime(実行部分)

Runtimeは、仮想マシンやコンテナ、サーバーレスなど、実際にアプリケーションが実行される環境を指す。このパートでは、Terraformを使ってEC2インスタンス、ECSクラスタ、Lambda関数などを構築し、実行環境を定義する。

  • EC2インスタンス: AWSの仮想マシン。インスタンスタイプやAMI、セキュリティグループを指定して作成する。
  • ECSクラスタ: コンテナを管理するためのクラスタ。ECSやFargateを使ってコンテナをデプロイできる。
  • Lambda関数: サーバーレスアーキテクチャを利用するための実行環境。

4. Service(プログラム配置部分)

Serviceは、実際にアプリケーションがデプロイされ、ユーザーに提供される部分を指す。Terraformでサービスを管理するには、以下のようなリソースを構築する。

  • Elastic Load Balancer (ELB)
    トラフィックを複数のインスタンスに分散させるためのロードバランサー。
  • Auto Scaling
    トラフィックの増減に応じてインスタンスの数を自動的にスケーリングする設定。
  • RDS (Relational Database Service)
    AWSのマネージドデータベースサービスを使って、データベースを構築する。
  • S3
    オブジェクトストレージ。ウェブサイトのホスティングやファイルの保存に利用される。

まとめ

Terraformを使ってインフラをコードとして管理する際、FoundationNetworkRuntimeServiceの各パートに分けて管理することで、効率的かつ柔軟にインフラの設定を行える。Terraformの強力な機能を活用して、インフラの自動化やスケーラビリティを高めることが可能。