終於要開始建立 ECS service 了!今天我們的目標是讓 Laravel 成功在 ECS service 上運作~

ECS Service 簡介

ECS service 是 AWS ECS 用來執行長期運作且 stateless 的 application 的功能,我們用 Laravel 開發的 web application 就是需要長期運作的 application,不像影片轉檔之類的工作,只在需要的時候執行一次。

一個 ECS cluster 可以建立多個 ECS service,每個 ECS service 會指定一個 task definition 及希望執行的 task 數量(task desired count)。

task 的數量由ECS service scheduler 負責維持,它以我們指定的 scheduling strategy 來決定 task 要放在哪台 container instance 上(task placement)。如果有 task fail 或 stop,ECS service scheduler 會啟動新的 task 以確保 task 數量。service 的 scheduling strategy 也被稱為 service type,有 REPLICA 跟 DAEMON 兩種。

接下來我們會啟動一個 MySQL container 作為 Database,然後建立一個基本的 ECS Service 並且看到 Laravel 的歡迎畫面。

Read more »

今天開始進入使用 Gitlab pipeline deploy 的部份,我們要把「手動 build docker image 並 push 上 ECR repository」這部份自動化、交給 Gitlab pipeline 做。不過使用 Gitlab pipeline 前,要先準備一台機器好安裝 Gitlab Runner。

需要一台機器?我們不是準備用 AWS 嗎?到 AWS EC2 開台機器吧!EC2 是個可以讓我們啟動機器的服務。機器需要有個網路環境才能啟動,所以我們今天先設置好它需要的網路環境,也就是 VPC 與 Subnet。(有種要做的事的 stack 一直被 push 的 fu 絕對不是錯覺!)

設置 AWS 費用通知

開始前先保護一下自己的荷包~(這很重要!)

前兩天提到除非還有免費使用期並且使用 free tier 的 resource,不然使用 AWS 服務會被收費、會被收費、會被收費(很重要說三次),要注意自己的資源使用狀況與費用(不然荷包會哭哭)。AWS 有個功能可以在花費達到設定的金額時寄 email 通知,可以用這個功能來注意費用有沒有超過太多。

這個功能是 Billing 裡 Cost Management 的 Budgets,用 root email 登入可以進到 Billing,從左邊選單進到 Budgets:

image.png

點選右上角 Create budget。

Read more »

2024 寫在最前面:這是去年(2023)IT 鐵人賽的文章,來個舊文重貼~


開賽啦~開賽啦~這 30 天會帶大家從地面飛上雲端!呃不是,是從本機建立 Laravel 的 Docker image 開始,一步步透過 Gitlab Pipeline 建立將 image deploy 上 AWS 的 CD 流程,再利用 AWS 的 container 服務 ECS 來運行 Laravel 的 web application。

另外,作為工程師,懶是最大的美德,能電腦做的事情就不要自己做,能用程式跑的東西就不要自己手動按,所以我們也會使用 infrastructure as code 的工具 Terraform 來維護以及持續進化各項基礎建設。(重點是雲裡那麼多複雜的設定,沒有程式碼筆者根本記不起來)

Read more »

動機

消除 duplicated member。

要了解 member 被使用的方式,如果被使用的方式類似,就可以移到 super class。除了移除 duplicated member 之外,也可以把 subclass 使用 member 的行為移到 supoer class(如果使用方式相似)。

作法

  1. 檢查候選 member 的所有使用方,確定它們用同樣的方式使用 member
  2. 如果 member 名稱彼此不同,使用 Rename Field 讓它們的名稱一致
  3. 在 super class 建立一個新 member
    這個新 member 要可以被 subclass 使用(一般語言通常是 protected)
  4. 刪除 subclass 的 member
  5. 測試

PhpStorm 操作