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管理者アカウントのパスワード確認
- EC2インスタンス一覧画面から作成したWordPressインスタンスを選択
- 以下の通りメニューをたどり、システムログを開く
- アクション->モニタリングとトラブルシューティング->システムログを取得
- システムログを「Setting Bitnami application password to」で検索し、WordPress管理者のパスワードを調べる
動作確認
- EC2インスタンス詳細画面を開き、「http://パブリック IPv4 アドレス/wp-admin」をブラウザのアドレスバーに入力する(httpsだとアクセスできないので注意)
- WordPressログイン画面が表示されるのでユーザ名は「user」、パスワードはシステムログで調べたパスワードを入力し、ログインできれば完了
あと片付け
以下のコマンドで作成したリソースを削除します。
terraform destroy
まとめ
EC2上にWordPressを構築する手段として、コピペでTerrafromで構築する方法を記載しました。
画面操作に慣れている方はとっつきづらいかもしれませんが、Terraformに慣れている方にとっては本記事に記載のTerraformでの構築の方が楽かもと思ってます!