iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Build on AWS

從零到雲端:AWS 開發之路系列 第 13

Day13 認識 Elastic Beanstalk(簡化網站部署工具)

  • 分享至 

  • xImage
  •  

在前幾天,我們用EC2+Apache+RDS部署了一個小小的動態留言板網站。這種方式很靈活,但缺點是很多東西要自己手動設定,例如:建 EC2、裝 PHP/Apache、上傳程式碼、設定資料庫連線、維護系統更新、伺服器安全性,對新手來說可能會覺得有點複雜。
今天要介紹的 AWS Elastic Beanstalk,就是一個幫你「自動化」這些麻煩事的服務。因為我之前專案的資源都在台北(ap-east-2),但Elastic Beanstalk \目前不支援台北,所以我先用 CLI 示範設定流程並介紹操作步驟。等到後面建立另一個專案我們再來做示範

什麼是 Elastic Beanstalk?

Elastic Beanstalk(簡稱 EB)是一個 平台即服務(PaaS),意思是,你只要把程式碼(例如 PHP、Node.js、Java、Python)打包丟上去,AWS會自動幫你:

  1. 建 EC2
  2. 裝環境(Apache / Nginx / PHP)
  3. 設定自動擴展(traffic 多的時候自動加機器)
  4. 建立Load Balancer(分流器)
  5. 幫你做監控

梳理一下大致流程

Step1: 確認你有AWS CLI(aws)跟EB CLI(eb)。如果沒有,先安裝:

brew install awsebcli

Step2: 進入專案資料夾

cd ~/Desktop/message-board

Step3: 修改index.php
把資料庫帳號密碼移到環境變數,之前我們的 $host, $db, $user, $pass 都是「寫死在程式碼裡」的,這樣比較危險(如果上傳GitHub就會外流 😱)。我們改成從「環境變數」讀取,Elastic Beanstalk可以設定環境變數,這樣密碼不會留在程式。

  • 程式端改用getenv():更安全,不會把密碼寫死
  • Elastic Beanstalk 設定環境變數:自動套用,不用每次改PHP
$host = getenv('DB_HOST') ?: 'localhost';
$db   = getenv('DB_NAME') ?: 'mydb1';
$user = getenv('DB_USER') ?: 'admin';
$pass = getenv('DB_PASS') ?: 'changeme';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

Step4: 初始化Elastic Beanstalk
第一次使用 EB,需要初始化:

eb init

接下來會問一些問題:

  1. Region:選你的 RDS 同一區域(例如 ap-east-1 香港,或 ap-northeast-1 東京)
  2. Application name:輸入 message-board
  3. Platform:選PHP
  4. 之後問要不要設定SSH:輸入yes,並選擇你之前建立的key pair(沒有的話從AWS首頁的設定中設定就可以囉!)

Step5: 建立環境
初始化完畢,建立一個新環境:

eb create message-board-env

這步會花幾分鐘,AWS 幫你建好 EC2、Load Balancer、Security Group。完成後會給你一個網址

Step6: 設定 RDS 連線環境變數
因為程式是透過 getenv() 抓 DB 連線設定,所以要在 EB 環境加上環境變數:

eb setenv DB_HOST=mydb1.c928ymcywg3j.ap-east-2.rds.amazonaws.com DB_NAME=mydb1 DB_USER=admin DB_PASS=你的密碼

(設定完,EB 會自動更新環境)

Step7: 部署程式碼
第一次建立時 EB 已經把程式deploy上去了,之後如果你有修改(例如 PHP 程式),只要再跑:

eb deploy

Step8: 測試留言板
打開 EB 的網址,並嘗試輸入一個留言。
接著連到 RDS 檢查:

mysql -h mydb1.c928ymcywg3j.ap-east-2.rds.amazonaws.com -u admin -p
USE mydb1;
SELECT * FROM messages ORDER BY created_at DESC;

看到你剛輸入的留言,代表部署成功!
其實這些步驟我們都可以在AWS中EC2的Elastic Beanstalk做設定與上傳,這邊是以終端機的設定作為範例,那實際上有這兩種方式可以給大家做參考!


上一篇
Day12 將網站連接到 RDS MySQL(存資料)
下一篇
Day14 本週回顧與心得文章 (week 2)
系列文
從零到雲端:AWS 開發之路15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言