Go言語で実装されたおみくじAPIサーバーです。ELB/AutoScalingハンズオン用のサンプルアプリケーションとして設計されています。
- Go 1.21+
- 標準ライブラリのみ使用(外部依存なし)
| エンドポイント | メソッド | 説明 |
|---|---|---|
/omikuji |
GET | おみくじを引く |
/hostname |
GET | インスタンスのホスト名(ID)を取得 |
/health |
GET | ヘルスチェック |
/stress |
GET | CPU負荷テスト(Auto Scaling検証用) |
ランダムにおみくじの結果を返します。
レスポンス例:
{
"result": "大吉",
"message": "すべてがうまくいく最高の運勢です!"
}おみくじの種類:
- 大吉: すべてがうまくいく最高の運勢です!
- 中吉: 良いことが起こりそうな予感です。
- 小吉: 小さな幸せが訪れるでしょう。
- 吉: 穏やかな一日になりそうです。
- 末吉: 努力が実を結ぶ兆しがあります。
- 凶: 慎重に行動することをお勧めします。
- 大凶: 今日は控えめに過ごしましょう。
負荷分散の確認用エンドポイントです。EC2インスタンスIDを返します。
レスポンス例:
{
"hostname": "i-0123456789abcdef0"
}ALBのターゲットグループで使用するヘルスチェック用エンドポイントです。
レスポンス例:
{
"status": "healthy"
}Auto Scalingの動作確認用エンドポイントです。60秒間CPU負荷をかけます。
レスポンス例:
{
"message": "CPU stress test started for 60 seconds"
}| 変数名 | 必須 | 説明 |
|---|---|---|
| INSTANCE_ID | × | EC2インスタンスID(userdataで自動設定) |
- Go 1.21以上
- 依存関係をインストール(標準ライブラリのみなので不要)
go mod tidy- 起動
go run main.goサーバーが http://localhost:80 で起動します(root権限が必要)。
開発時は別ポートで起動することも可能です:
// main.go の最後の行を変更
log.Fatal(http.ListenAndServe(":8080", nil))go build -o omikuji-api main.go
./omikuji-apicurl http://localhost/omikuji# 10回連続でリクエストを送信し、異なるインスタンスに振り分けられることを確認
for i in {1..10}; do curl http://localhost/hostname; echo; donecurl http://localhost/healthcurl http://localhost/stressEC2インスタンスのユーザーデータで userdata/api_userdata.sh を実行することで、自動的にセットアップされます。
- golang
- git
- stress-ng(負荷テスト用)
アプリケーションは omikuji-api.service として systemd で管理されます。
# サービスの状態確認
sudo systemctl status omikuji-api
# サービスの再起動
sudo systemctl restart omikuji-api
# ログの確認
sudo journalctl -u omikuji-api -f