どうも、ukimaruです。
前回の続きを書いていきます。
✅ ゴール
- セキュリティグループを設定してSSH(22番ポート)を許可
- キーペアを作成し、TerraformでEC2に設定
user_data
を使って、起動時にNginxを自動インストール- SSHでログインして、Nginxの起動確認
🔹 キーペアの作成(事前準備)
AWSのマネジメントコンソール or CLIでキーペア(pemファイル)を作成しておく。名前を terraform-key
と仮定します。
chmod 400 terraform-key.pem
🔹 セキュリティグループとEC2設定を更新
main.tf(更新後)
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_key_pair" "deployer" {
key_name = "terraform-key"
public_key = file("~/.ssh/terraform-key.pub") # 公開鍵のパス
}
resource "aws_security_group" "web_sg" {
name = "terraform-sg"
description = "Allow SSH and HTTP"
ingress {
description = "SSH"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # 自宅のIPだけにするのが推奨
}
ingress {
description = "HTTP"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "example" {
ami = "ami-0c3fd0f5d33134a76"
instance_type = "t2.micro"
key_name = aws_key_pair.deployer.key_name
vpc_security_group_ids = [aws_security_group.web_sg.id]
user_data = <<-EOF
#!/bin/bash
yum update -y
amazon-linux-extras install nginx1 -y
systemctl start nginx
systemctl enable nginx
EOF
tags = {
Name = "TerraformEC2"
}
}
🚀 デプロイ手順(再)
terraform plan
terraform apply
完了後、マネジメントコンソールで
- インスタンス起動済み
- パブリックIPが割り当てられていることを確認
🔐 SSH接続してみる
ssh -i terraform-key.pem ec2-user@<パブリックIP>
接続できたら、Nginxが入ってるか確認:
sudo systemctl status nginx
ブラウザで http://<パブリックIP>
を開いて、Nginxの初期画面が出れば成功!
💭 やってみた感想
Terraformでの構築に加えて、今回は初期設定(user_data)まで自動化できたので、一気に「IaCやってる感」が出てきました!
細かな確認事項とトライアンドエラー精神がないと立ち止まる瞬間はあると思います。ただ、ググり力があれば問題なく構築できる印象でした!
次はEIP(固定IP)や、ALB、Route53でドメイン連携まで進めてみたいなと思ってます。
📝 まとめ
- セキュリティグループとキーペアをTerraformで定義することで、SSH接続も自動化できる
user_data
を使えば、ミドルウェアの初期構築まで自動化できる- 少しずつTerraformファイルを育てていくことで、本番運用にも耐える構成を作れる
今回の検証と実装でインフラエンジニアにとっては強力なツールであることは間違い無いことを実感しました。なんといっても楽だし、コードでインフラの管理ができるのは素敵ですよね。
あくまで参考程度の記事で、実際に手を動かして挙動が異なるところもあるかと思いますが基礎なのでほぼほぼこの通り動くと思います。
今後も色々と試してシェアできればと思います!ありがとうございました!
exit 0
コメント