😎

【AWS初心者】SSHはもう古い?AIとペアプロして「鍵穴のない」Webサーバーを爆速構築した話

に公開

はじめに

AWS学習中のエンジニアです。
これまではマネジメントコンソールでポチポチと設定していましたが、「実務ではIaC (Infrastructure as Code) が当たり前」と知り、OpenTofu (Terraform) での構築に挑戦しました。

最初はAIにコードを書いてもらい、「とりあえず動いた!」で終わっていたのですが、改めて生成されたコード(main.tf)を読み解いてみると、初心者がやりがちな「とりあえずフル開放」とは違う、モダンでセキュアな工夫が詰まっていました。

今回は、AIとのペアプログラミングを通じて学んだ**「3つの脱・初心者ポイント」**を共有します。

今回作ったもの

コードから学んだ「モダンな設計」3選

生成された main.tf を読み解くと、以下の工夫がなされていました。

1. 「鍵穴」を作らないセキュリティ (SSM接続)

通常、EC2を立てるときは「SSHキーペア」を作成し、セキュリティグループでポート22(SSH)を開放するイメージがありました。
しかし、今回のコードではSSHキーの設定がありません

代わりに登場したのが aws_iam_role です。
これはサーバーに「従業員証(IAMロール)」を持たせるような仕組みです。

  • Before: 物理的な鍵(SSHキー)を作って、鍵穴(ポート22)を開ける。→ 鍵を無くすと終わり。
  • After: サーバーに権限(SSM Core)を与えて、AWSの管理画面から安全に接続する。

「鍵管理」というリスクを最初から排除する、セキュアな設計だと学びました。

2. 開店準備の自動化 (User Data)

「サーバーが立ったら、ログインしてコマンドを打ってNginxを入れて...」と思っていましたが、その必要はありませんでした。
user_data という部分に「起動時のマニュアル」を書いておくことで、セットアップが自動完了していました。

  # 実際のコードの一部
  user_data = <<-EOT
      dnf -y install nginx
      systemctl start nginx
      echo "OK: portfolio web server" > /usr/share/nginx/html/index.html
  EOT

これにより、「起動した瞬間にはもうWebサイトが見られる」状態になります。手作業のミスを防ぐための重要な機能だと感じました。

3. OSバージョンの「決め打ち」を避ける

コード内で data "aws_ami" という記述がありました。
これは「Amazon Linux 2023の最新版を探して!」という命令です。

具体的なID(ami-xxxx)を直書きしてしまうと、時間が経つと古くなってしまいます。こう書くことで、常に最新のセキュリティパッチが当たったOSを使えるようになっています。

実際に動かしてみた

構築は以下のコマンドのみです。

tofu init
tofu apply

実行後、出力されたIPアドレスにアクセスすると、無事にWebサイトが表示されました。

[ここに「Welcome to nginx」などが表示されているブラウザのスクショ、またはターミナルのスクショを貼る]

わずか数分で構築が完了しました。
最後に tofu destroy で一括削除できるため、学習用の「消し忘れ課金」のリスクも低減できます。

おわりに

最初は「動けばいい」と思っていましたが、コード化することで「なぜSSHポートを開けないのか?」「どうやって自動化するのか?」といった設計の意図が見えてきました。

今後も「AIにコードを書いてもらう→その意味を徹底的に聞く→記事にする」というサイクルで、理解を深めていきたいと思います。

Discussion