Open5
terraformを用いてAPPサーバー(EC2)とDBサーバー(RDS)を起動する
ゴール
- 以下のサーバーをterraformを用いて用意する。
- APP(WEBも兼ねる)
- EC2
- DBサーバー
- RDS(MySQL)
- マルチAZは無しにする。(作成したprivateサブネットが一つなので。)
前提
以下の記事で作成したネットワークが存在するものとする。
参考にする記事
EC2サーバーの立ち上げ
EC2からRDSへの疎通確認
展望
- webサーバーも用意する
- ALBもしくは自前のnginx?
1. EC2サーバーを立ち上げる
事前にキーペアを作成しておく
$ ssh-keygen -N "" -f ec2_key
terraformのコード
resource "aws_key_pair" "app_server" {
key_name = "ec2_key"
public_key = file("~/Downloads/ec2_key.pub")
}
resource "aws_instance" "app_server" {
ami = "ami-0dfa284c9d7b2adad"
instance_type = "t2.micro"
subnet_id = aws_subnet.public_1a.id
key_name = aws_key_pair.app_server.key_name
# セキュリティグループを紐づける
vpc_security_group_ids = [aws_security_group.app_sg.id]
tags = {
Name = "app_server"
}
}
2. RDSを立ち上げる
概要
- サブネットをもう一つ作成する
- サブネットグループを作成するために必要なため。
- RDSの起動
- サブネットグループを作成する
- セキュリティグループはサブネット1aのものを使用する。
- MySQL8.0
- 無料枠のインスタンスタイプ
terraformのコード
サブネットの作成
private_1cでもNATゲートウェイ必要な場合、同じAZのパブリックサブネットが必要になってくるけど今回は省略した。
resource "aws_subnet" "private_1c" {
vpc_id = aws_vpc.main.id
availability_zone = "ap-northeast-1c"
cidr_block = "10.0.20.0/24"
tags = {
Name = "basic_network-private-1c"
}
}
RDS起動
resource "aws_db_subnet_group" "test_db" {
name = "test-db-subnet-group"
description = "For Test DB Subnet Group"
# 既存のprivateサブネットを指定する
subnet_ids = [aws_subnet.private_1a.id, aws_subnet.private_1c.id]
tags = {
Name = "TestDBSubnetGroup"
}
}
resource "aws_db_instance" "test_db" {
allocated_storage = 20 # 無料枠の制限内
storage_type = "gp2" # SSDにする
engine = "mysql"
engine_version = "8.0"
instance_class = "db.t3.micro" # 無料枠のインスタンスタイプ
db_name = "mydb"
username = "admin"
password = "password"
parameter_group_name = "default.mysql8.0"
db_subnet_group_name = aws_db_subnet_group.test_db.name
vpc_security_group_ids = [aws_security_group.db_sg.id]
backup_retention_period = 7
skip_final_snapshot = true
# シングルAZ配置を指定
multi_az = false
}
3. EC2からRDSにアクセスする
EC2上でmysqlクライアントのインストール
$ apt-get update && apt-get -y install mysql-client
EC2上からmysqlコマンドで接続する
# RDS_USER: RDSに設定したユーザー
# RDS_ENDPOINT: RDSのエンドポイント
$ mysql -u RDS_USER -p -h RDS_ENDPOINT
4. EC2へPORT80でhttp通信できるか疎通確認する
WEBサーバーとしての役割を持たせる
nginxをインストールする
$ sudo apt update && sudo apt install -y nginx
nginxを起動する
# 起動させる
$ sudo systemctl start nginx
# 疎通確認
$ sudo systemctl status nginx
nginxのインストールに関する参考文献
ブラウザから確認
http://[EC2サーバーのパブリックIPアドレス]/
でアクセスする