Terrraformを使ってAWSにWEBサーバ(nginx)を作成するための方法を解説していきます。
AMIの取得
- touch ami.tfして以下の内容を入力
data "aws_ami" "al2023" {
most_recent = true # 複数ある場合は最新のAMIを使用
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
キーペアの作成
- ssh-keygen -t rsa -b 2048
- chmod 600 ~/.ssh/id_rsa
公開鍵の読み込みとEC2キーペアヘの登録
- touch keypair.tfして以下の内容を入力し、terraform initを実行
※ terraform initはtemplate_fileを利用するために必要
# 公開鍵ファイルをterraformで読み込み可能な状態にする
data "template_file" "ssh_key" {
template = file("~/.ssh/id_rsa.pub")
}
resource "aws_key_pair" "auth" {
key_name = "terraform_test"
public_key = data.template_file.ssh_key.rendered
}
nginxをインストール・起動するためのシェルを用意
- touch web.sh.tplして以下の内容を入力
#!/bin/bash
yum install -y nginx
systemctl enable nginx
systemctl start nginx
EC2インスタンスの作成
- touch ec2.tfして以下の内容を入力
# 用意したシェルをterraformで読み込み可能な状態にする
data "template_file" "web_shell" {
template = file("${path.module}/web.sh.tpl")
}
resource "aws_instance" "web" {
ami = data.aws_ami.al2023.id
instance_type = "t2.micro"
key_name = aws_key_pair.auth.id
iam_instance_profile = aws_iam_instance_profile.ec2_profile.name
subnet_id = aws_subnet.public_a.id
vpc_security_group_ids = [aws_security_group.pub_a.id]
root_block_device {
volume_type = "gp2"
volume_size = 30
delete_on_termination = true # インスタンス削除時にボリュームも削除
}
tags = {
Name = "web-instance"
}
user_data = base64encode(data.template_file.web_shell.rendered)
}
ブラウザでhttp://xxx.xxx.xxx.xxxにアクセスしてnginxが正常に起動していることを確認する。
※ xxx.xxx.xxx.xxxはEC2インスタンスのグローバルIP(マネジメントコンソールで確認可能)
Terraformの実行
terraform applyで実行する。
次回はTerraformを使ってAPサーバ(RDSに接続するためのサーバ)を作成する方法を解説していきます。