Terrraformを使ってAWSにAPサーバ(RDSに接続するためのサーバ)を作成する方法を解説していきます。
キーペアの作成
- ssh-keygen -t rsa -b 2048
Webサーバとは違う名前で作成(ここでは~/.ssh/id_rsa_terraform_apとする) - chmod 600 ~/.ssh/id_rsa_terraform_ap
WEBサーバにAPサーバの秘密鍵をアップ
- cd ~/.ssh
- sftp -i id_rsa ec2-user@WEBサーバのグローバルIP
- sftp > put id_rsa_terraform_ap
- sftp > rename id_rsa .ssh/id_rsa
- sftp > quit
keypair.tfに追記(APサーバの公開鍵をEC2キーペアに登録)
data "template_file" "ssh_key_ap_pub" {
template = file("~/.ssh/id_rsa_terraform_ap.pub")
}
resource "aws_key_pair" "auth_ap" {
key_name = "terraform_test_ap"
public_key = data.template_file.ssh_key_ap_pub.rendered
}
EC2インスタンスの作成
mysqlクライアントをインストールするためのシェルを用意
yum installでMySQLのリポジトリを追加する。
(昔は.repoファイルにリポジトリを追加していたが、今はリポジトリ自体もyumでインストールできる)
※リポジトリのURLはhttps://dev.mysql.com/downloads/repo/yum/で調べる。(AL2023はRHEL9ベース)
- touch ap.sh.tplして以下を入力
#!/bin/bash
yum install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
yum install -y mysql-community-client
ec2.tfに追記(APサーバを追加)
data "template_file" "ap_shell" {
template = file("${path.module}/ap.sh.tpl")
}
resource "aws_instance" "ap" {
ami = data.aws_ami.al2023.id
instance_type = "t2.micro"
key_name = aws_key_pair.auth_ap.id
iam_instance_profile = aws_iam_instance_profile.ec2_profile.name
subnet_id = aws_subnet.private_a.id
vpc_security_group_ids = [aws_security_group.priv_a.id]
root_block_device {
volume_type = "gp2"
volume_size = 30
delete_on_termination = true
}
tags = {
Name = "ap-instance"
}
user_data = base64encode(data.template_file.ap_shell.rendered)
}
SSH接続テスト
- ssh -i ~/.ssh/id_rsa ec2-user@WEBサーバのグローバルIP
- ssh -i ~/.ssh/id_rsa_terraform_ap ec2-user@APサーバのプライベートIP
Terraformの実行
terraform applyで実行する。
次回はTerraformを使ってRDSを作成する方法を解説していきます。