目的
EC2にNginxがインストールされた状態を作り出し、ブラウザからデフォルトページが確認できることをゴールとする。
インフラ構築はTerraformでコード化することで再現性、再利用性、速度などが手作業に比べると高い。
GitHubリンク
手順
- TerraformからAWSリソースを操作できるように設定する
- Terraformをインストールする
- TerraformでEC2サーバを立ち上げてみる
- ネットワークを整える(VPC, サブネット, ルーティングテーブル,インターネットゲートウェイ)
- セキュリティグループ(ファイアウォール)を設定する
- Webサーバ用EC2を立ち上げる
- Webサーバが立ち上がる際にWebサーバソフトをインストールするように設定する
今回の到達点
Webサーバが立ち上がる際にWebサーバソフトをインストールするように設定する
Webサーバを立てる準備
- ネットワークを構築する
- ネットワークに許可する通信を設定する
- EC2をプライベートネットワークに所属させて外部からアクセスできるようにする
- EC2にWebサーバソフト(今回はNginx)をインストールする ←今回はここ!
Step1. webserver.tfにインスタンスユーザデータを設定する
EC2インスタンスが初回起動時にroot権限で実行するスクリプト。
今回はシェルスクリプト形式で記述するが、他の形式もあるらしい。
webserver.tfを以下のように変更(末尾にユーザデータを追加)。
webserver.tf
# Key pair
resource "aws_key_pair" "keypair" {
key_name = "${var.project}-${var.environment}-keypair"
public_key = file("./kekkepy-keypair.pub")
tags = {
Name = "${var.project}-${var.environment}-web-sg"
Project = "${var.project}"
Env = "${var.environment}"
}
}
#Web server
resource "aws_instance" "web_server" {
ami = "ami-0cfc97bf81f2eadc4"
instance_type = "t2.micro"
subnet_id = aws_subnet.public-subnet.id
associate_public_ip_address = true
vpc_security_group_ids = [aws_security_group.web_sg.id]
key_name = aws_key_pair.keypair.key_name
tags = {
Name = "${var.project}-${var.environment}-webserver"
Project = "${var.project}"
Env = "${var.environment}"
Type = "app"
}
user_data = <<EOF
#!/bin/bash
sudo dnf update -y
sudo dnf install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
EOF
}
Step2. 一度環境を破壊する
初回起動時のみ実行されるので、一度EC2インスタンスを含めた今回の環境を破壊しておく。
$ terraform destroy -auto-approve
Step3. 環境を再度構築
$ terraform apply -auto-approve
Step4. Nginxが無事にインストールされているか確認
マネジメントコンソールからEC2インスタンスのパブリックIPアドレスを確認する
パブリックIPアドレスをアドレスバーに入力して接続すると、無事Nginxの「正しくインストールできています」のページが表示される。
これにて「Tarraformを使ってAWSにWebサーバを構築」完了!