ALBのターゲットのヘルスチェックがUnhealthyになっていた件

プライベート環境でTerraformでALBやEC2を作成してターゲットグループにEC2を登録した時にステータスが「Unhealthy」となっていたので原因調査しました。

 

簡単に事象の整理。

 

まず、原因の当たりを見つけます。

Target Health の詳細理由を確認。

 

Health checks failed

 

「Health checks failed」となっており、ポート/プロセスのbindミスでした。

通常のヘルスチェックが失敗(= ALB から見てターゲットに到達できない/200を返せていない)可能性が高いです。

 

  • サブネットの配置ミス

EC2に接続してポートの接続確認しようとしたところこんなエラーが。

 

エラー画像

そもそもネットワークを誤ってプライベートのサブネットに配置していました。

ALBを該当AZのパブリックサブネット、EC2は到達可能なサブネットに修正しました。

 

  • アプリインストール&起動漏れ

修正後、エラーが解消され接続できるようになったのでEC2に接続しポート状況確認します。

 

# 80番でLISTENしているか(0.0.0.0 でバインドか)

ss -lntp | grep ':80'

反応なし

→ :80でLISTENしていない

 

# ローカル疎通(正常200が返ってくるか

000が返ってくる

→ ローカルからもHTTP応答なし

 

ネットワーク以前に、アプリ/HTTPサーバが起動していないことが原因だと分かりました。

しまった、そもそも元となるHTTPサーバをインストール&起動していなかった。

 

ということでnginxをインストール&起動することに。

今回はOSはAmazon Linux2なのでそのやり方でインストールします。

 

sudo yum update
which amazon-linux-extras
sudo amazon-linux-extras enable nginx1
sudo yum clean metadata
sudo yum install nginx
sudo systemctl enable --now nginx

 

動いているか正常性します。

 

systemctl enable --now nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
ss -lntp | grep ':80'
LISTEN 0      511          LISTEN 0 511(省略) HTTP/1.1 200 OK
Server: nginx/1.28.0

 

SG/NACLは最後に軽く再確認し、設定に問題ないことを確認しました。

すると、「Unhealthy」から「Healthy」に変更されていました。

実施後

正常です。

初歩的なミスですが備忘として残しております。

 

Git pushでファイル容量が多いエラーが出た時にやったこと

git pushでローカルリポジトリをpushした時にエラーが出ました。

remote: error: GH001: Large files detected. You may want to try Git Large File Storage

 

重いファイル置いてたっけ?と思い調べてみます。

find . -type f -exec du -h {} + | sort -rh | head -n 20

 

しまった確かに容量が多かった。
Git管理下に置く必要のないファイルだった為、.gitignoreに除外するファイルを追記しました。
しかし、エラーが解消されず

原因は2つありました。

 

【原因1】
Gitの管理下におきたくないファイルとして指定したはずの.terraform/ 以下の provider ファイルが無視されていませんでした。

どうやら.gitignore に書かれていても、すでに一度 git add してしまっていた為無視されないらしいです。

そもそも .terraform は ステート管理や provider バイナリが入っている作業ディレクトリなので、Git で管理すべきではないのに入れてしまっていたようです。
見逃してそのままgit addしてしまっていました。

【対応策1】
先述の通り、 .gitignore に除外設定を入れます。

**/.terraform/
 

次にすでに Git に追加済みの .terraform を管理対象から除外します。

git rm -r --cached environments/dev/.terraform/
git commit -m "Remove .terraform from version control"

 

ここまで問題なく出来ました。


【原因2】
.git/ フォルダの中の巨大ファイル(packファイル)がありました。
.git/ フォルダ自体は Git 本体が内部的に使うフォルダで、常に管理対象外かつ自動的に使用されます。

Git にコミットされた大容量ファイルがあると、それを圧縮した .pack ファイルとして .git/ に保管されます。
今回「過去に commit した大きすぎるファイル」が原因で、.git/ 内が肥大化している状態になっていました。

まず.git/ が肥大化している原因ファイルを特定します。

# 履歴を含めた Git オブジェクトのサイズを調査

git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
grep '^blob' | \
sort -k3 -n | \
tail -n 10 | \
awk '{printf "%.2fMB\t%s\n", $3/1024/1024, $4}'

 

【対処法2】
履歴に入り込んだ大容量ファイルの削除(BFGを使う)を行います。
BFGを使うためインストールします。
今回はMacを使用していた為Macのコマンドです。


手順例(サイズ削減)

# BFG Repo-Cleaner を使う(Javaが必要)

brew install bfg

 


# 例:全 `.zip` ファイルを履歴から除外

bfg --delete-files '*.zip'

 


# または特定ファイルだけ指定

bfg --delete-files 'terraform-provider-aws_v5.100.0_x5'

 


# 履歴を再構成したあと必要

git reflog expire --expire=now --all

git gc --prune=now --aggressive


問題なく実行できました。

ついでに.gitignore を最適化しました。(最初にやっておくべき)

最後にリポジトリサイズを確認します。

du -sh .git

160K .git

容量が減って、git pushしても問題なく通りました。
最初にgit pushする前に除外設定やそもそも不要なファイルを置かないことが大事だと学びました。

 

Github Pagesで独自ドメイン設定する時に失敗したこと

Git hub pagesに静的サイトを作成しました。

独自ドメインをお名前.comで取得した為、静的サイトに反映させることに。

しかし、いくつか初歩的なミスをしてすぐ反映できなかった為備忘として記録します。

 

  • 失敗したこと

1. リポジトリをpublicにするのを忘れていた

一時的にリポジトリをprivateにしていたのですが、public公開に戻すのを忘れていました。

さっきまであったGit hub PagesのPage項目で独自ドメインの設定画面が消えていたので焦りました。

 

事象1

 

再度public公開に変更したらGithub Pageの設定画面に戻りました。

 

事象解決1

 

2. 公開元のルート直下に CNAME ファイルを配置していない

git pushでリポジトリに更新かける度にGithub PagesのCustom domainの独自ドメインが削除されてしまい、独自ドメインでアクセス出来なくなっていました。

 

焦って調べると、公開元(main/docs/gh-pages など)のルート直下にCNAMEファイルを配置する必要があることを知りました。

CNAMEファイルの中には独自ドメイン(例:xxx.com)を記載する必要があります。

 

cd ルート直下
echo "独自ドメイン名(例:xxx.com)" > CNAMEE
git add CNAME
git commit -m "Add CNAME for GitHub Pages custom domain"
git push origin ブランチ名

 

ファイルを作成してそのファイルもgit push

その後git pushしてリポジトリ更新しても独自ドメイン設定が消えませんでした。

 

githubドメイン周りの知見が乏しいので勉強していきたいです。

 

VSCodeのサイドバーのエクスプローラーが問題ないのに赤色になっていた件

 

VSCodeでTerraformの作業をしていたある日のこと、変更していないフォルダが赤色になっていました。

子階層のフォルダやファイルに問題があるのかなと確認しましたが特に問題なく、原因が掴めないです。

 

事象発生

 

原因切り分けと事象解消の為以下を実施しました。

 

1. terraform init しなおす

大分terraformのコードを改修していたので、一度該当の階層にてinitし直しました。

terraform init

それでも解決しませんでした。

 

2. git status -s で状態確認

Git由来か確認する為、git statusで状態確認をします。
差分があればその差分を解消すれば直るかも。

git status -s

特に差分も発生していませんでした。

 

3. 念のためgit push した

git pushして問題なくpush &merge出来るか確認。

git push origin ブランチ名

問題なく通りました。

 

4. VSCodeを再起動してみる

ここまで見て原因が分からなかった為再起動しました。

すると直りました。

 

事象解決

 

VSCodeにキャッシュ的な履歴が残っていたのだろうか。

 

コードもGitもTerraformも問題ない場合は一度VSCodeを再起動してみると直るパターンもあるのでメモしました。