ちょっと話題の記事

「Terraform入門 on AWS」という動画を投稿しました #devio2020

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ 後藤です。

2020年6月16日(火)より、弊社主催のオンラインイベントDEVELOPERS.IO 2020 CONNECTが開催されております。約100セッション、様々な内容をお届けしますので是非ご視聴頂けますと幸いです。

本記事では私のビデオセッション「Terrafom入門 on AWS」をご紹介します。

セッション動画

セッション内容

本セッション動画では、Terraformをこれから使い始める人に向けた入門向けな内容でお話させて頂いてます。 簡単なAWS環境を構築していく中でTerraformを使うならこうしよう!こうやって使うと良い!等のTipsを紹介しています。

セッションの大まかな流れ

本セッションはTerraformの紹介から、以下フロー図のようなTerraformの導入からAWS環境構築、削除までの一連の流れに則り、実演を含めお話しています。

セッションで使用したコード

セッションで実際に使用しているコードになります。※開発環境用

動画内でも一部は紹介しておりますが、全てではないため、セッションの内容を実際に試したい方等は、こちらのコードを参照ください。

ec2.tf

resource "aws_instance" "ec2" {
  ami           = "ami-0a1c2ec61571737db"
  instance_type = "t3.micro"
  subnet_id     = aws_subnet.public_a.id
  root_block_device {
    volume_type = "gp2"
    volume_size = "30"
  }
  key_name = var.key_pair
  tags = {
    Name = "${var.env}-${var.project}-ec2"
  }
}
output "ec2_public_ip" {
  value = aws_instance.ec2.public_ip
}

vpc.tf

resource "aws_vpc" "vpc" {
  cidr_block           = var.vpc_cidr[var.env]
  enable_dns_hostnames = true

  tags = {
    Name = "${var.env}-${var.project}-vpc"
  }
}

resource "aws_subnet" "public_a" {
  vpc_id                  = aws_vpc.vpc.id
  cidr_block              = var.subnet_cidr["${var.env}_public_a"]
  availability_zone       = var.az["az_a"]
  map_public_ip_on_launch = true

  tags = {
    Name = "${var.env}-${var.project}-public-a-subnet"
  }
}

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

  tags = {
    Name = "${var.env}-${var.project}-igw"
  }
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.vpc.id

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

  tags = {
    Name = "${var.env}-${var.project}-public-rtb"
  }
}

resource "aws_route_table_association" "public_a" {
  subnet_id      = aws_subnet.public_a.id
  route_table_id = aws_route_table.public.id
}

terraform.tf

terraform {
  backend "s3" {
    bucket = "【バケット名】"
    key    = "dev/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

variables.tf

variable "project" {
  type    = string
  default = "connect"
}

variable "env" {
  type    = string
  default = "dev"
}

variable "vpc_cidr" {
  type = map(string)

  default = {
    prd = "10.1.0.0/16"
    dev = "10.2.0.0/16"
  }
}

variable "subnet_cidr" {
  type = map(string)

  default = {
    prd_public_a = "10.1.1.0/24"
    dev_public_a = "10.2.1.0/24"
  }
}

variable "key_pair" {
  type = string

  default = "aws-ssh-key"
}

variable "az" {
  type = map(string)

  default = {
    az_a = "ap-northeast-1a"
    az_c = "ap-northeast-1c"
    az_d = "ap-northeast-1d"
  }
}

まとめ

TerraformやCloudFormation等は最初難しく感じてしまい、IaCを諦めてしまう方が多いと思ってます。そんな方に少しでも良いのでTerraformの魅力や、簡単に始められると言うことが伝われば何よりです。