【AWS初心者】SSHはもう古い?AIとペアプロして「鍵穴のない」Webサーバーを爆速構築した話
はじめに
AWS学習中のエンジニアです。
これまではマネジメントコンソールでポチポチと設定していましたが、「実務ではIaC (Infrastructure as Code) が当たり前」と知り、OpenTofu (Terraform) での構築に挑戦しました。
最初はAIにコードを書いてもらい、「とりあえず動いた!」で終わっていたのですが、改めて生成されたコード(main.tf)を読み解いてみると、初心者がやりがちな「とりあえずフル開放」とは違う、モダンでセキュアな工夫が詰まっていました。
今回は、AIとのペアプログラミングを通じて学んだ**「3つの脱・初心者ポイント」**を共有します。
今回作ったもの
- 成果物: コマンド一発で立ち上がるNginx(Webサーバー)
- リポジトリ: [https://github.com/Sushisverige/aws-ops-runbook-portfolio]
- 使用ツール: OpenTofu (Terraform), AWS
コードから学んだ「モダンな設計」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