はじめに
本記事では、【Terraform】ALB+EC2構築後のリソースをスクリプトで確認(構築編)の続きになります。
Terraformで作った ALB+EC2 の構成を手動でAWSコンソールを開かずに確認するため確認作業をスクリプト化しています。
構成図
フォルダ構成
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/ に移動して実行したい場合は、スクリプトの冒頭でルートディレクトリに移動する処理を追加する必要があります。
#!/bin/bash
cd ..
まとめ
今回は、Terraformで作成した ALB+EC2の構成をスクリプトで一括確認する方法を試してみました。
学んだことやポイントは以下の通りです。
- Terraform outputs を利用することで、ALB DNS や EC2 ID など重要情報を簡単に取得できる
- AWS CLI を組み合わせることで、EC2ステータス・ALB状態・ターゲットヘルス・SSM接続状況などを一括で確認可能
- curlを使った簡単なアクセス確認で、ALB経由でEC2が応答することを確認できる
- スクリプト化することで手動でAWSコンソールを確認する手間が大幅に削減できる
- 実行時のカレントディレクトリに注意することが重要(scripts/ ではなくルートから実行)
