TerraformでEC2上にWordPressを簡単に構築するーコピペでTerraformでWordPress構築

TerrafromでEC2上にWordPressを構築していきます!

コピペでEC2上にTerrafromでWordPressを構築できるように記載しています。

EC2のAMIでは「WordPress Certified by Bitnami and Automattic」を指定してWordPressを構築します。

Terraformとは?という方は以下の記事をご参照ください。

Terraformとはーインフラストラクチャを安全に管理できるTerraformの使い方について理解する
「Terraformとは?」「Terraformを触ったみたい」というような方向けの記事です。「Terraformとは?について」「Terraformのインストール」「AWSのリソースをTerraformで管理してみる」の構成でTerraformについて記載していきます。

AWSマネージメントコンソール画面から構築したい場合は以下の記事をご参照ください。

AWSのEC2に簡単にWordPressをインストールする方法(AMIでWordPressを使用)
簡単にAWSのEC2にWordPressをインストールする方法です。5分で動作確認までできます。 ハマるポイントとしては、WordPressログイン時のパスワードの確認くらいです。 AMIはWordPress Certified by Bitnami and Automatticを使用します

それではWordPressを構築するTerraformのソースコードを書いていきます。

スポンサーリンク

Terraformのソースコード

3つのファイルを使用します。

  • provider.tf
    • 以下のような情報を記載します。
      • terraformバージョン
      • AWSプロバイダーの定義
      • tfstateファイルを管理する場所の定義
  • variables.tf
    • ローカル変数の管理
  • aws_ec2.tf
    • EC2/セキュリティグループ/VPCを管理

ファイル名:provider.tf


# terraformバージョンを固定
terraform {
  required_version = "1.3.9"
}

# AWSプロバイダーの定義
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}


#tfstateファイルを管理するS3バケットを定義
terraform {
  backend "s3" {
    bucket = "{tfstateファイルを管理するS3バケット名}"                #バケット名
    key    = "terraform-test/terraform.tfstate" #tfstateファイルごとに異なる任意の値
    region = "ap-northeast-1"
  }
}

ファイル名:variables.tf


locals {
  ec2 = {
    instance_type = "t3.micro",
    ami           = "ami-0cf92f9f22d78344c"
  }
}

AMIは「WordPress Certified by Bitnami and Automattic」を指定してます。

ファイル名:aws_ec2.tf


# EC2インスタンス作成
resource "aws_instance" "wordpress" {
  ami                         = local.ec2.ami
  instance_type               = local.ec2.instance_type
  subnet_id                   = aws_subnet.public_1a.id
  vpc_security_group_ids      = [aws_security_group.wordpress.id]
  associate_public_ip_address = "true"
}
# VPC作成
resource "aws_vpc" "wordpress" {
  cidr_block = "10.0.0.0/16"
}
# サブネット作成
resource "aws_subnet" "public_1a" {
  vpc_id = aws_vpc.wordpress.id

  # Subnetを作成するAZ
  availability_zone = "ap-northeast-1a"

  cidr_block = "10.0.1.0/24"

}
# ルートテーブル作成
resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.wordpress.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }
}
# インターネットゲートウェイ作成
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.wordpress.id
}
# ルーティングテーブル作成
resource "aws_route_table_association" "public_rt_associate" {
  subnet_id      = aws_subnet.public_1a.id
  route_table_id = aws_route_table.public_rt.id
}

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

  ingress {
    description = "allow http"
    from_port   = "80"
    to_port     = "80"
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    description = "allow ssh"
    from_port   = "22"
    to_port     = "22"
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = "0"
    to_port     = "0"
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

次に、Terraformを実行して、WordPressを構築していきます。

Terraformの実行

以下のコマンドを実行していきます。

// tfstateファイルを管理するS3バケット作成
aws s3 mb s3://{tfstateファイルを管理するS3バケット}

//ワークスペースを初期化する
terraform init

// コードフォーマット
terraform fmt

// バリデーション
terraform validate

// 不正なコードを検出
tflint

// 実行計画を確認
terraform plan

// リソース作成
terraform apply

WordPress管理者アカウントのパスワード確認

  1. EC2インスタンス一覧画面から作成したWordPressインスタンスを選択
  2. 以下の通りメニューをたどり、システムログを開く
    • アクション->モニタリングとトラブルシューティング->システムログを取得
  3. システムログを「Setting Bitnami application password to」で検索し、WordPress管理者のパスワードを調べる

WordPress EC2システムログ

動作確認

  1. EC2インスタンス詳細画面を開き、「http://パブリック IPv4 アドレス/wp-admin」をブラウザのアドレスバーに入力する(httpsだとアクセスできないので注意)
  2. WordPressログイン画面が表示されるのでユーザ名は「user」、パスワードはシステムログで調べたパスワードを入力し、ログインできれば完了

あと片付け

以下のコマンドで作成したリソースを削除します。

terraform destroy

まとめ

EC2上にWordPressを構築する手段として、コピペでTerrafromで構築する方法を記載しました。

画面操作に慣れている方はとっつきづらいかもしれませんが、Terraformに慣れている方にとっては本記事に記載のTerraformでの構築の方が楽かもと思ってます!