目的
EC2にNginxがインストールされた状態を作り出し、ブラウザからデフォルトページが確認できることをゴールとする。
インフラ構築はTerraformでコード化することで再現性、再利用性、速度などが手作業に比べると高い。
GitHubリンク
手順
- TerraformからAWSリソースを操作できるように設定する
- Terraformをインストールする
- TerraformでEC2サーバを立ち上げてみる
- ネットワークを整える(VPC, サブネット, ルーティングテーブル,インターネットゲートウェイ)
- セキュリティグループ(ファイアウォール)を設定する
- Webサーバ用EC2を立ち上げる
- Webサーバが立ち上がる際にWebサーバソフトをインストールするように設定する
今回の到達点
Webサーバ用EC2を立ち上げる
Webサーバを立てる準備
- ネットワークを構築する
- ネットワークに許可する通信を設定する
- EC2をプライベートネットワークに所属させて外部からアクセスできるようにする ←今回はここ!
- EC2にWebサーバソフト(今回はNginx)をインストールする
Step1. キーペアを作成する
SSHでWebサーバにアクセスする際に必要なキーペアを作成しておく。
このキーペアをEC2をTerraformから作成する際に設定しておくことで、適切なキーペアを持つユーザのみがアクセスできるようにする(コマンド実行するとパスフレーズを求められるが何もしないでEnterがオススメ)。
$ ssh-keygen -t rsa -b 2048 -f kekkepy-keypair
以下2ファイルが作成される。
- kekkepy-keypair(秘密鍵)
- kekkepy-keypair.pub(公開鍵)
秘密鍵のファイル名を「kekkepy-keypair.pem」に変更する。
※ファイル内に全角や日本語があるとエラーとなるので除去しておく。
Step2. webserver.tfを作成
EC2インスタンスを作成するための設定を行う。
C:\Users[ユーザ名]\Documents\MyProject\terraform\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"
}
}