前面我們用 Gitlab pipeline build docker image 並且推上 ECR repository,ECS service 會用 ECR repository 內對應的 image 執行 container 提供服務。那麼有新 image 後是誰會把新 image deploy 到 ECS service 上呢?總不是要手動按吧?說好的自動化呢~?

今天我們要接上 CD 自動化的最後一塊拼圖:CodePipeline。利用 CodePipeline 在 ECR repository 有新的 image 時 trigger ECS deployment。 (筆者這麼懶怎麼可能自己按

Read more »

前面我們建立了 ECS cluster 跟 service,並且用一台 EC2 instance 作為 container instance 來執行 task,最後用 EC2 instance 的 public IP address 連到 Laravel。

等等,如果只是要這樣,直接開台 EC2 instance 把 web server、php、database 裝一裝就好了吧?幹麻搞得那麼複雜?

沒錯,前面先了解如何建立 ECS cluster 跟 service,接下來我們要讓 ECS service 可以執行多個 task,並且以 load balancer 進行負載平衡、將 request 分散到多個 container 上。這麼一來,只要連到 load balancer 就能連到我們的 application 了。

今天我們先來玩玩 load balancer~

Read more »

終於要開始建立 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 »