😄

[Terraform]: Terraformで学習用EC2環境を立ち上げるメモ

に公開

[Terraform]: Terraformで学習用EC2環境を立ち上げるメモ

Terraformでただの学習用のEC2環境を立ち上げるコードを書いたのでコードと気になったプロパティの意味を調べたメモ

コード

resource "aws_vpc" "vpc" {
  cidr_block = "10.0.0.0/16"

  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = {
    Name = "main"
  }
}

resource "aws_subnet" "subnet" {
  vpc_id                  = aws_vpc.vpc.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "ap-northeast-1a"

  # パブリックIPの自動割り当て
  map_public_ip_on_launch = true
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.vpc.id
}

resource "aws_route_table" "rtb" {
  vpc_id = aws_vpc.vpc.id
}

resource "aws_route" "route" {
  route_table_id = aws_route_table.rtb.id

  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.igw.id
}

resource "aws_route_table_association" "rtba" {
  subnet_id      = aws_subnet.subnet.id
  route_table_id = aws_route_table.rtb.id
}

resource "aws_security_group" "sg" {
  name   = "ec2-sg"
  vpc_id = aws_vpc.vpc.id

  # インバウントルール (SSH)
  ingress {
    # ポートの範囲を指定する
    # 同じ値であれば単一ポートのみ許可される
    # 範囲の開始ポート
    from_port   = 22
    
    # 範囲の終了ポート
    to_port     = 22
    protocol    = "tcp"

    # IPアドレスの範囲
    cidr_blocks = ["0.0.0.0/0"]
  }

  # インバウンドルール (HTTP)
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # アウトバンドルール (全許可)
  egress {
    from_port   = 0
    to_port     = 0

    # -1は全プロトコル
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

data "aws_ami" "amazon_linux" {
  # 最新のAMIを取得
  most_recent = true

  # AmazonのアカウントID
  owners      = ["137112412989"]

  # AMI名でフィルタリングする
  filter {
    name   = "name"
    values = ["al2023-ami-2023*-kernel-*-x86_64"]
  }

  # アーキテクチャで〃
  filter {
    name   = "architecture"
    values = ["x86_64"]
  }

  # 仮想化タイプで〃
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

resource "aws_instance" "main" {
  # 使用するAMI
  ami                    = data.aws_ami.amazon_linux.id

  # 使用するインスタンスタイプ
  # t2.microは無料枠
  instance_type          = "t2.micro"

  # 配置するサブネットのID
  subnet_id              = aws_subnet.subnet.id

  # 関連付けるセキュリティグループのID
  vpc_security_group_ids = [aws_security_group.sg.id]

  # SSHキーペア名
  key_name = "ec2-key"

  # 起動時に実行するスクリプト
  user_data = <<-EOF
    #!/bin/bash
    yum update -y
    EOF

  tags = {
    Name = "main-ec2-instance"
  }
}

もしこのコードを使われる方がいらっしゃる場合は以下の手順に従ってください。

  1. コードをコピーする
  2. main.tfにペーストする
  3. (optional)sed '/^\s*#/d' main.tfを実行してコメントアウトを削除する

最後に

間違っていることがあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion