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?

【Terraform】ALB+EC2で作る最小Web構成(確認編)

Posted at

はじめに

本記事では、【Terraform】ALB+EC2構築後のリソースをスクリプトで確認(構築編)の続きになります。
Terraformで作った ALB+EC2 の構成を手動でAWSコンソールを開かずに確認するため確認作業をスクリプト化しています。

構成図

スクリーンショット 2025-12-27 18.06.00.png

フォルダ構成

terraform-alb-ec2-2az/
├── alb.tf
├── ec2.tf
├── outputs.tf
├── provider.tf
├── scripts/
│   └── check_infra.sh
├── security_group.tf
├── terraform.tfvars
├── variables.tf
└── vpc.tf

Terraform outputの確認

terraform applyを実行し、正しくリソース作成が行われると以下の出力が得られる。
出力例:

Apply complete! Resources: 19 added, 0 changed, 0 destroyed.

Outputs:

alb_dns_name = "sample-alb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com"
vpc_id = "vpc-xxxxxxxxxxxxxxx"
web_a_instance_id = "i-08xxxxxxxxxxxxxxx"
web_c_instance_id = "i-0axxxxxxxxxxxxxxx"

check_infra.shの説明

スクリプト全体

#!/bin/bash
set -e

・・・
  • #!/bin/bash : bashで実行する宣言
  • set -e : どこかでエラーが発生したらスクリプトを停止

Terraform Outputs の確認

echo "===== Terraform Outputs ====="
ALB_DNS=$(terraform output -raw alb_dns_name)
echo "ALB DNS: $ALB_DNS"
echo
  • Terraformで定義した outputs.tf の値を取得
  • ALBのDNS名を変数に入れて、後続のアクセス確認で利用

EC2の状態確認

echo "===== EC2 Status ====="
aws ec2 describe-instances \
  --query "Reservations[].Instances[].{ID:InstanceId,State:State.Name,AZ:Placement.AvailabilityZone}" \
  --output table
echo
  • EC2の ID・ステータス・配置AZ を確認
  • --output table で見やすく表示

ALBの状態確認

echo "===== ALB Status ====="
aws elbv2 describe-load-balancers \
  --query "LoadBalancers[].{Name:LoadBalancerName,State:State.Code,DNS:DNSName}" \
  --output table
echo
  • ALBの 名前・状態・DNS名 を確認

Target Groupのヘルスチェック

echo "===== Target Group Health ====="
TG_ARN=$(aws elbv2 describe-target-groups \
  --query "TargetGroups[0].TargetGroupArn" \
  --output text)

aws elbv2 describe-target-health \
  --target-group-arn "$TG_ARN" \
  --query "TargetHealthDescriptions[].{Instance:Target.Id,Health:TargetHealth.State}" \
  --output table
echo
  • ALBが接続するEC2の状態を確認
  • 正常なら healthy と表示される

SSMで管理されているインスタンス確認

echo "===== SSM Managed Instances ====="
aws ssm describe-instance-information \
  --query "InstanceInformationList[].{InstanceId:InstanceId,Status:PingStatus}" \
  --output table
echo
  • SSM Session Manager で接続可能なインスタンスを確認
  • PingStatus が Online なら接続可能

ALBへのアクセス確認

echo "===== ALB Access Test ====="
curl -s http://$ALB_DNS
echo
echo "==============================="
  • ブラウザを開かずに ALB経由でEC2が応答するかを確認
  • 出力に EC2のindex.htmlの内容(例: Hello from AZ-a)が表示されれば成功

作成後の確認(CLI 一括)

以下コマンドを実行する。

chmod +x scripts/check_infra.sh
./scripts/check_infra.sh

出力結果:

===== Terraform Outputs =====

ALB DNS: sample-alb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com

===== EC2 Status =====

- ------------------------------------------------------

|                  DescribeInstances                  |

+------------------+-----------------------+----------+

|        AZ        |          ID           |  State   |

+------------------+-----------------------+----------+

|  **ap-northeast-1c** |  **i-0axxxxxxxxxxxxxxx**  |  **running** |

|  **ap-northeast-1a** |  **i-08xxxxxxxxxxxxxxx**  |  **running** |

+------------------+-----------------------+----------+

===== ALB Status =====

- ----------------------------------------------------------------------------------

|                              DescribeLoadBalancers                              |

+--------------------------------------------------------+-------------+----------+

|                           DNS                          |    Name     |  State   |

+--------------------------------------------------------+-------------+----------+

|  **sample-alb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com** |  **sample-alb** |  **active**  |

+--------------------------------------------------------+-------------+----------+

===== Target Group Health =====

- -----------------------------------

|       DescribeTargetHealth       |

+----------+-----------------------+

|  Health  |       Instance        |

+----------+-----------------------+

|  **healthy** |  **i-08xxxxxxxxxxxxxxx**  |

|  **healthy** |  **i-0axxxxxxxxxxxxxxx**  |

+----------+-----------------------+

===== SSM Managed Instances =====

- ----------------------------------

|   DescribeInstanceInformation   |

+----------------------+----------+

|      InstanceId      | Status   |

+----------------------+----------+

|  **i-08xxxxxxxxxxxxxxx** |  **Online**  |

|  **i-0axxxxxxxxxxxxxxx** |  **Online**  |

+----------------------+----------+

===== ALB Access Test =====

Hello from AZ-c

===============================

各値の確認

1. Terraform Outputs

ALB DNS: sample-alb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
  • Terraformで定義した ALB の DNS 名が取得できている

✅ 問題なし

2. EC2 Status

|        AZ        |          ID           |  State   |
| ap-northeast-1c | i-0axxxxxxxxxxxxxxx  | running |
| ap-northeast-1a | i-08xxxxxxxxxxxxxxx  | running |
  • EC2 が2台作成され、それぞれの AZ と ID が表示されている
  • 状態が running になっている → 正常に起動

✅ 問題なし

ALB Status

| DNS                          | Name       | State   |
| sample-alb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com | sample-alb | active |
  • ALB が作成され、状態が active → 利用可能
  • DNS も outputs と一致

✅ 問題なし

4. Target Group Health

| Health   | Instance                   |
| healthy  | i-08xxxxxxxxxxxxxxx        |
| healthy  | i-0axxxxxxxxxxxxxxx        |
  • ALB 配下のターゲット EC2 が両方とも healthy
  • ALB が EC2 に正しくルーティングしている

✅ 問題なし

5. SSM Managed Instances

| InstanceId                | Status   |
| i-08xxxxxxxxxxxxxxx       | Online   |
| i-0axxxxxxxxxxxxxxx       | Online   |
  • SSM Session Manager で接続可能なインスタンスとして認識されている
  • PingStatus が Online → 接続可能

✅ 問題なし

6. ALB Access Test

Hello from AZ-c
  • ALB 経由で EC2 にアクセスできている
  • index.html の内容が返ってきている → HTTP応答正常

✅ 問題なし

確認結果

  • EC2 が2台作成され、各AZに配置されている
  • ALB が正常に作成され、ターゲットEC2へのルーティングもOK
  • SSM での管理も可能
  • ALB 経由で実際に HTTP 応答も確認

個人的失敗・注意点

今回作成したcheck_infra.shを実行する際に、ミスとしてカレントディレクトリを間違えるという点があります。
今回私もディレクトリを間違えてしまいました。

間違った実行例

cd scripts
chmod +x check_infra.sh
./check_infra.sh

出力結果:

===== Terraform Outputs =====

ALB DNS: 

│ **Warning: No outputs found**
│
│ The state file either has no outputs defined, or all the defined outputs are empty. Please define an output in your configuration
│ with the `output` keyword and run `terraform refresh` for it to become available. If you are using interpolation, please verify
│ the interpolated value is not empty. You can use the `terraform console` command to assist.
╵

この場合、スクリプト実行時のカレントディレクトリがscripts/ になってしまうため、terraform output が Terraform構成ファイル(.tf)があるディレクトリを見つけられずエラーになります。

正しい実行例

chmod +x scripts/check_infra.sh
./scripts/check_infra.sh
  • カレントディレクトリを Terraform構成ファイルのあるルートディレクトリにして実行する
  • これで terraform output も正しく参照でき、スクリプトが正常に動作します

補足
もし scripts/ に移動して実行したい場合は、スクリプトの冒頭でルートディレクトリに移動する処理を追加する必要があります。

check_infra.sh
#!/bin/bash
cd ..

まとめ

今回は、Terraformで作成した ALB+EC2の構成をスクリプトで一括確認する方法を試してみました。
学んだことやポイントは以下の通りです。

  • Terraform outputs を利用することで、ALB DNS や EC2 ID など重要情報を簡単に取得できる
  • AWS CLI を組み合わせることで、EC2ステータス・ALB状態・ターゲットヘルス・SSM接続状況などを一括で確認可能
  • curlを使った簡単なアクセス確認で、ALB経由でEC2が応答することを確認できる
  • スクリプト化することで手動でAWSコンソールを確認する手間が大幅に削減できる
  • 実行時のカレントディレクトリに注意することが重要(scripts/ ではなくルートから実行)
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?