Terraformで立てたEC2にSSH接続&Nginxを自動インストールしてみた | Terraform入門【続き】

TF入門2 tech

どうも、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

コメント

タイトルとURLをコピーしました