Terraform個人メモ：今後のカジュアルな検証目的のために、Windowsサーバー構築までの手順をコード化してみた

## はじめに
まず、大前提として、ここから先は現在キャッチアップしているTerraformを使いながら、さまざまなコードを自分用に書いていきます。

:::note alert
**※補足事項**
***そのため、内容は完全に自分向けとなっています。***
:::

また、このブログ投稿サイトのプラットフォームについても、自分自身の備忘録としてメモを残す場として活用していきたいと考えています。***このプラットフォーム上に記録を積み重ねていく予定です。***

あらかじめ、その点をご理解いただければ幸いです。

## 実際にコードで行っていること

このTerraformコードは、AWS上でWindowsサーバー環境を構築するための設定を記述しています。以下は、その構成要素と設定内容の説明です。

1. **AWSプロバイダーの設定**
   - **リージョン**: `ap-northeast-1`（東京リージョン）を指定しています。
   - この設定により、リソースは東京リージョンに作成されます。

2. **VPCの作成**
   - **CIDRブロック**: `10.0.0.0/16` を設定し、大規模なプライベートネットワークを構築。
   - **DNSサポート**: DNSサポートとDNSホスト名を有効化しています。

3. **サブネットの作成**
   - **パブリックサブネット**: `10.0.1.0/24` のCIDRブロックを使用し、インスタンスがパブリックIPアドレスを取得できるように設定。

4. **インターネットゲートウェイの作成**
   - **役割**: VPCをインターネットに接続するためのゲートウェイを作成。

5. **ルートテーブルの設定**
   - **デフォルトルート**: `0.0.0.0/0`（すべてのトラフィック）をインターネットゲートウェイにルーティング。

6. **サブネットとルートテーブルの関連付け**
   - パブリックサブネットに、上記で作成したルートテーブルを関連付け。

7. **セキュリティグループ（SG）の設定**
   - **RDPアクセスの許可**:
     - **ポート番号**: `3389`（RDP用）。
     - **送信元**: `0.0.0.0/0`（全IPアドレスを許可）。
   - **ICMP（Ping）の許可**:
     - **プロトコル**: `icmp`。
     - **ポート範囲**: `-1`（ICMP全体）。
     - **送信元**: `0.0.0.0/0`（全IPアドレスを許可）。
   - **アウトバウンドトラフィック**:
     - 全てのトラフィックを許可。

8. **EC2インスタンス（Windows Server）の作成**
   - **AMI ID**: `ami-01d033a4281b702a8`（指定されたWindows Server AMI）。
   - **インスタンスタイプ**: `t2.micro`（低コストでの実行）。
   - **ネットワーク設定**:
     - パブリックサブネットに配置。
     - セキュリティグループを適用。
     - パブリックIPアドレスを有効化。
   - **キーペア**: `"honhon"` を指定してSSH/RDPでの接続を可能にする。


:::note info
**このコードは、AWS上でパブリックサブネットに配置されたWindows Serverインスタンスを、RDPおよびPingでアクセス可能な状態で構築するために必要なリソースを作成します。**
:::

## 作ったコードについて

```main.tf
# AWSプロバイダーの設定
provider "aws" {
  region = "ap-northeast-1" # Tokyo region
}

# VPC作成
resource "aws_vpc" "main_vpc" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true  # DNSサポートを有効化
  enable_dns_hostnames = true  # DNSホスト名を有効化

  tags = {
    Name = "terraform-main-vpc"
  }
}

# サブネット作成 (パブリックサブネット)
resource "aws_subnet" "public_subnet" {
  vpc_id                  = aws_vpc.main_vpc.id
  cidr_block              = "10.0.1.0/24"
  map_public_ip_on_launch = true

  tags = {
    Name = "terraform-public-subnet"
  }
}

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

  tags = {
    Name = "terraform-main-igw"
  }
}

# ルートテーブル作成
resource "aws_route_table" "public_route_table" {
  vpc_id = aws_vpc.main_vpc.id

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

  tags = {
    Name = "terraform-public-route-table"
  }
}

# サブネットとルートテーブルの関連付け
resource "aws_route_table_association" "public_association" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_route_table.id
}

# セキュリティグループ作成
resource "aws_security_group" "public_sg" {
  vpc_id = aws_vpc.main_vpc.id

  # RDPアクセスを許可
  ingress {
    from_port   = 3389
    to_port     = 3389
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # ICMP (Ping) を許可
  ingress {
    from_port   = -1
    to_port     = -1
    protocol    = "icmp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # すべてのアウトバウンドを許可
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "terraform-public-sg"
  }
}

# EC2インスタンス作成 (Windows Server)
resource "aws_instance" "windows_ec2" {
  ami                         = "ami-01d033a4281b702a8" # 指定されたWindows ServerのAMI ID
  instance_type               = "t2.micro"
  subnet_id                   = aws_subnet.public_subnet.id
  security_groups             = [aws_security_group.public_sg.id]
  associate_public_ip_address = true # パブリックIPv4アドレスを有効化
  key_name                    = "honhon" # 修正: キーペアを指定

  depends_on = [aws_security_group.public_sg]

  tags = {
    Name = "terraform-windows-ec2"
  }
}
```


## まとめ
この記事は、自分用の備忘録としてまとめたものです。その点をご理解いただけると幸いです。

:::note info
***もし、この記事の内容が少しでも参考になれば嬉しく思います。***
:::

今後も同様の内容を継続して投稿していきますので、温かく見守っていただけるとありがたいです。