0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2 + Apacheをコンソールで構築するときに守るべき依存関係の順序

0
Posted at

背景

EC2上にApacheを構築するハンズオンをコンソールで実施しました。キーペア・IAMロール・セキュリティグループ・EC2インスタンスという4リソースには依存関係があり、順番を間違えると詰まります。

1. 依存関係の順序

① キーペア作成(EC2起動時に指定するため先に必要)
② IAMロール作成(EC2起動時にインスタンスプロファイルとして指定)
③ EC2起動(②までのリソースを組み合わせて起動)

EC2インスタンスの起動画面で、キーペアとIAMロールを選択する項目があるため、この2つは先に作成しておく必要があります。逆に言えば、この順序さえ守れば残りはEC2起動画面内でセキュリティグループ・UserDataも含めて一括設定できます。

2. UserDataは初回起動時のみ実行されるシェルスクリプト

#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello from Amazon Linux 2023!</h1>" > /var/www/html/index.html
echo "<p>Instance ID: $(ec2-metadata --instance-id | cut -d ' ' -f 2)</p>" >> /var/www/html/index.html

「高度な詳細」の一番下にあるUserData欄にこのスクリプトを貼り付けるだけで、EC2起動と同時にApacheのインストール・起動・自動起動設定までが自動化されます。ec2-metadataコマンドでインスタンスIDやAZを取得し、動的にHTMLへ埋め込んでいる点もポイントです。

3. セキュリティグループは/32で自分のIPだけに絞る

ソース: 203.0.113.1/32

/32は「このIPアドレス1つだけ」を意味するCIDR表記です。0.0.0.0/0(全世界に開放)はハンズオンであっても避け、SSH・HTTPともに自分のIPだけに制限するのが基本です。

4. 接続元IPが一致しない場合は$SSH_CLIENTで真のIPを確認する

# 一時的にSSHを0.0.0.0/0に開放してから接続し
echo $SSH_CLIENT
# 出力例: 203.0.113.1 17508 22 → 先頭の値が真の接続元IP

curl https://checkip.amazonaws.comで確認したIPと実際の接続元IPが、ISPやプロキシの経路によって一致しないケースがあります。この場合、一時的にSGを全開放してSSH接続し、EC2内から$SSH_CLIENT環境変数を見ることで「本当に接続してきているIP」を特定できます。確認後は必ずSGを/32に戻します。

5. 削除順序も依存関係の逆順

① EC2インスタンスを終了 → ② セキュリティグループ削除 → ③ IAMロール削除

セキュリティグループはEC2が使用中の間は削除できないため、必ずインスタンスの「終了済み」状態を待ってから削除する必要があります。

まとめ

キーペア→IAMロール→EC2起動という作成順序と、UserDataによる初期化自動化、この2点がEC2ハンズオンの基本パターンでした。CloudFormation版との作業時間比較(15-20分 vs 5分)は元記事にまとめています。

→ AWSコンソールでEC2 + Apacheウェブサーバーを構築する手順(ブログ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?