在寫鐵人賽的時候想說寫個 CDK WordPress 建置,我把 CDK 寫完在測試的時候發現服務有時候正常有時候不正常查了一下發現 ECS 一直重啟 Docker 看一下 Log 發現原因是 Target group 的 Health Check 會失敗
使用 cURL 測試服務狀態
用 cURL
測試了一下發現回應竟然不是 200 OK 而是 302 Found
$ curl -v http://cdkwo-servi-ysnp5li748bg-66853377.us-west-2.elb.amazonaws.com/index.php * Trying 54.149.6.49... * TCP_NODELAY set * Connected to cdkwo-servi-ysnp5li748bg-66853377.us-west-2.elb.amazonaws.com (54.149.6.49) port 80 (#0) > GET /index.php HTTP/1.1 > Host: cdkwo-servi-ysnp5li748bg-66853377.us-west-2.elb.amazonaws.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 302 Found < Date: Tue, 13 Oct 2020 14:21:58 GMT < Content-Type: text/html; charset=UTF-8 < Content-Length: 0 < Connection: keep-alive < Server: Apache/2.4.38 (Debian) < X-Powered-By: PHP/7.4.11 < Expires: Wed, 11 Jan 1984 05:00:00 GMT < Cache-Control: no-cache, must-revalidate, max-age=0 < X-Redirect-By: WordPress < Location: http://cdkwo-servi-ysnp5li748bg-66853377.us-west-2.elb.amazonaws.com/wp-admin/install.php < * Connection #0 to host cdkwo-servi-ysnp5li748bg-66853377.us-west-2.elb.amazonaws.com left intact * Closing connection 0
判斷原因
第一次開啟需要跑安裝流程
看了一下網頁發現因為 WordPress 第一次開啟需要跑安裝流程所以會 302 到 /wp-admin/install.php
這樣子理所當然 Health Check 會失敗,但是我又不能把檢查代碼設定成 302,因為等第一次安裝結束後一定會是正常的 200 OK
查詢 Docker Hub 文件
所以就查了一下 wordpress – Docker Hub 的說明文件想要看看有沒有 Health Check 頁面可以使用,結果答案是沒有
查詢 Docker library issue
就再去查了一下 docker-library/wordpress 發現有一個 PR 441 要加入 mod_status.html
,想說有希望了只是文件沒有寫到結果被拒絕 QQ …
尋找 WordPress 靜態頁面
想說竟然都到這邊了就找個靜態頁面來用吧!就去翻了 WordPress Project 找了一個比較適合檔案 /wp-includes/images/blank.gif
它只有 43 Bytes 看來會是一個不錯的解決方法
使用 WordPress 靜態頁面當解決方案
就直接把它喂給 Health Check 因為它是靜態頁面理當在沒有帶入 session 的情況下每次都會回應 200 OK,使用此解法才把問題解決
延伸閱讀
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!