Closed10
TerraformでWordpressをデプロイする(ECS/Fargate)
どこまでやるかは考え中
dockerhubに記載のdocker-compose.yamlを参考にローカルで動作確認
docker-compose.yaml
version: '3.9'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
tfファイル準備中...
以下メモ
default_tag
全リソースに共通のタグをつける
provider "aws" {
default_tags {
tags = {
Environment = "Test"
Owner = "TFProviders"
Project = "Test"
}
}
}
変数をnameタグに埋め込む
環境とかプロジェクト名をつけるとわかりやすい
variable "system_name" {
default="test-system"
}
resource "aws_vpc" "vpc" {
tags = {
Name = "${var.system_name}_vpc"
}
}
手動で試す
RDS
サブネットグループ作成
RDS作成時に指定するため
データベース作成
- DBエンジンタイプはmysql
- バージョンは
8.0.32
- 無料枠
- masterのユーザーネーム、パスワードを設定
- インスタンスサイズは
db.t3.micro
- ストレージサイズのオートスケールが出来るんですね
- パブリックアクセスはなし
- 事前に作成したサブネットグループ、セキュリティグループを割り当てる
- パスワード認証を有効化
- データベース名は「wordpress」、パラメータグループはデフォルトの「default.mysql8.0」
タスク定義
wordpressイメージ、環境変数を間違えなければOK
- イメージ
- ECRに格納したイメージを指定
- 環境変数
- WORDPRESS_DB_HOST:RDSエンドポイント
- WORDPRESS_DB_NAME:データベース名(
wordpress
) - WORDPRESS_DB_PASSWORD:設定したパスワード
- WORDPRESS_DB_USER:設定した管理者
でけた
OK。
適当に記事を作って、mysqlクライアントで見てみましょう
テスト用ページ
wordpressコンテナにECS EXECして確認することにします。
既存のタスクでECS EXECを有効化する方法
設定
aws ecs update-service \
--cluster <cluster> \
--task-definition <task definition> \
--enable-execute-command \
--service <service> \
--desired-count 1
ECSEXEC用IAMロールはタスク定義で設定済みのものとします。
接続
# タスクIDを確認
$ aws ecs list-tasks --cluster <cluster>
# ECS EXECする
```bash
aws ecs execute-command --cluster <cluster> \
--task <task arn> \
--container <container name> \
--interactive \
--command "/bin/bash"
mysqlクライアントで確認
ECSEXECしたwordpressコンテナでmysqlクライアントをインストール、記事の確認をします
# クライアントインストール
apt update
apt install -y default-mysql-client
# 接続
mysql -h <エンドポイント> -u <管理者ユーザ> -p
# 記事確認
use wordpress;
MySQL [wordpress]> select ID,post_title from wp_posts;
+----+--------------------------------+
| ID | post_title |
+----+--------------------------------+
| 1 | Hello world! |
| 2 | サンプルページ |
| 3 | プライバシーポリシー |
| 4 | 自動下書き |
| 5 | 自動下書き |
| 6 | 自動下書き |
| 7 | テスト用ページです |
| 8 | Custom Styles |
| 9 | テスト用ページです |
+----+--------------------------------+
9 rows in set (0.000 sec)
問題なさげ
Terraform化
DBパスワードはパラメータストアで管理するようにします
DB周り
resource "aws_security_group" "rds_sg" {
name = "rds_sg"
description = "Allow inbound traffic for RDS DB instance"
vpc_id = var.vpcid
ingress {
from_port = 3306
to_port = 3306
protocol = "tcp"
cidr_blocks = ["10.10.0.0/16"]
}
}
resource "aws_ssm_parameter" "db_username" {
name = "/db/username"
type = "String"
value = var.db_username
}
resource "aws_ssm_parameter" "db_password" {
name = "/db/password"
type = "SecureString"
value = var.db_password
}
resource "aws_ssm_parameter" "db_dbname" {
name = "/db/dbname"
type = "String"
value = var.db_dbname
}
resource "aws_db_subnet_group" "main" {
name = "main"
subnet_ids = [var.public1, var.public2]
tags = {
Name = "My DB subnet group"
}
}
resource "aws_db_instance" "wordpress" {
allocated_storage = 20
engine = "mysql"
engine_version = "8.0.32"
instance_class = "db.t3.micro"
db_name = aws_ssm_parameter.db_dbname.value
username = aws_ssm_parameter.db_username.value
password = aws_ssm_parameter.db_password.value
parameter_group_name = "default.mysql8.0"
publicly_accessible = false
skip_final_snapshot = true
vpc_security_group_ids = [aws_security_group.rds_sg.id]
db_subnet_group_name = aws_db_subnet_group.main.name
}
このスクラップは5ヶ月前にクローズされました