初心者のためのTerraformの使い方: WEBサーバ作成編

スポンサーリンク

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に接続するためのサーバ)を作成する方法を解説していきます。

コメント