【AWS】Day 7:運算服務 - Elastic Beanstalk(自動化部署服務)
在前幾篇,我們介紹了 EC2,了解了怎麼自己開一台雲端主機、自己設定環境、自己管防火牆、自己擴展、自己備份。
但如果你覺得自己管這些基礎建設很麻煩,希望可以更專注在「寫程式」跟「部署應用程式」上面,那 AWS 其實也有更方便的選擇:
今天要介紹的就是 —— Elastic Beanstalk
什麼是 Elastic Beanstalk?
Elastic Beanstalk 是 AWS 提供的一種 PaaS(平台即服務)。
它的目標很簡單:
-
你只要準備好應用程式
-
把應用程式丟給 Beanstalk
-
Beanstalk 幫你處理所有底層繁瑣的事情
包括:
-
建好 EC2 instance
-
建好負載平衡器(Load Balancer)
-
建好 Auto Scaling
-
建好 Security Group、防火牆設定
-
幫你佈署、監控、收集日誌
-
還可以一鍵回滾版本
你專注在開發跟部署,AWS 幫你顧好其他基礎設施。
支援的應用類型
Elastic Beanstalk 支援超多種語言與平台:
-
Node.js
-
Python
-
Java
-
Ruby
-
PHP
-
.NET
-
Go
-
Docker(完整支援 Container)
-
靜態網站(HTML/CSS/JS)
如果你是 Web 應用開發者,基本上都可以直接使用 Beanstalk 部署。
Elastic Beanstalk 的架構概念
雖然 Beanstalk 幫你管理底層資源,但其實背後還是會幫你建立 AWS 其他服務,包括:
-
EC2(跑你的應用)
-
Elastic Load Balancer(分流)
-
Auto Scaling Group(自動擴展)
-
CloudWatch(監控、日誌)
-
RDS(如果有需要資料庫)
這些資源都是 Beanstalk 幫你「托管」,你可以選擇要不要深入調整。
✅ 你仍然可以進入 EC2 頁面看到自己應用用到的實例,但建議不要直接手動修改,避免破壞 Beanstalk 的管理邏輯。
建立 Elastic Beanstalk 應用的流程
-
進入 AWS Console,打開 Elastic Beanstalk
-
點選「Create Application」
-
填入:
-
Application Name(應用名稱)
-
Platform(選語言與環境)
-
Upload your code(上傳程式碼壓縮檔)
-
-
設定部署設定(可以預設)
-
點下「Create Application」
幾分鐘後,AWS 就會幫你建好整個環境,還會提供一個 URL,直接可以訪問你的應用!
部署更新與版本管理
Elastic Beanstalk 很貼心地內建了「版本管理」功能:
-
每次部署新程式碼,都會建立一個新的版本
-
可以快速回滾(Rollback)到前一個版本
-
可以在不同環境(例如 dev、prod)快速切換程式版本
常見 Elastic Beanstalk 的使用情境
-
快速啟動 MVP、小型專案
-
開發階段測試不同版本部署
-
中小型團隊的 Web 應用架設
-
需要簡單 Auto Scaling、Load Balancing 但不想自己架設
注意事項
-
不是完全免維運:雖然簡化很多,但還是要稍微理解 VPC、Security Group 等 AWS 基本概念
-
資源會產生費用:Beanstalk 本身不收費,但底層建立的 EC2、RDS、S3 等都會收費
-
適合標準架構:如果應用有非常特殊的環境需求(例如自訂作業系統 kernel)可能還是要回去用 EC2 自己建
小結
Elastic Beanstalk 是 AWS 上手最簡單的運算服務之一:
-
幫你管理底層基礎建設
-
讓你快速部署、快速擴展、快速回滾
-
適合中小型 Web 應用,也適合剛開始學 AWS 的人嘗試
當然可以!這裡直接幫你補上
Elastic Beanstalk 簡易實作教學(以 Node.js 舉例),延續前面文章的語氣與結構,實作內容也保持簡單明瞭,讓讀者可以直接跟著做。
Elastic Beanstalk 簡易實作教學(以 Node.js 範例)
剛剛介紹了 Elastic Beanstalk 是什麼,接下來就實際帶大家操作一次:
-
我們會快速做出一個 Node.js 小應用
-
壓成 ZIP 檔
-
部署到 Elastic Beanstalk 上
目標是:10 分鐘內完成一個雲端 Web App!
1. 建立一個簡單的 Node.js 專案
首先,在你的電腦上開一個新資料夾,例如 eb-demo-app
,然後建立最基本的 Node.js 應用。
mkdir eb-demo-app
cd eb-demo-app
npm init -y
npm install express
接著建立一個 app.js
,內容如下:
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello from Elastic Beanstalk!');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
這樣就完成了最基本的 Node.js Web 應用。
注意:這裡我們用 process.env.PORT
是 Elastic Beanstalk 的部署要求,讓它自動分配正確的 port。
2. 建立必要的設定檔
Elastic Beanstalk 在 Node.js 環境中,需要有一個叫做 package.json
的設定檔(剛剛 npm init
已經自動生成),還需要明確標出啟動指令。
請確認 package.json
中有這一段:
"scripts": {
"start": "node app.js"
}
如果沒有,手動加上去,這樣 Elastic Beanstalk 才知道要怎麼啟動你的應用程式。
3. 壓縮成 ZIP 檔案
回到 eb-demo-app
目錄,將所有檔案壓縮成一個 .zip
檔。
注意:不要把整個資料夾壓縮進去!
-
ZIP 檔裡面應該是直接包含
app.js
、package.json
,不是包一層資料夾!
例如正確的內容:
app.js
package.json
node_modules/
如果你想省空間,其實可以只壓 app.js
和 package.json
,讓 Elastic Beanstalk 自己在雲端跑 npm install
。
4. 登入 AWS Elastic Beanstalk 控制台
-
點選「Create Application」
-
填上:
-
Application name:例如
demo-node-app
-
Platform:選
Node.js
-
Application code:選擇「Upload your code」上傳剛剛的
.zip
檔
-
-
點選「Create Application」
接下來 AWS 會自動:
-
建 EC2
-
建 Load Balancer
-
建 Auto Scaling Group
-
佈署你的應用程式
大概 3-5 分鐘後,就可以從 Elastic Beanstalk 頁面拿到一個網址,直接訪問你的應用!
5. 驗證部署結果
打開 Elastic Beanstalk 頁面給你的 URL,比如:
http://demo-node-app.ap-northeast-1.elasticbeanstalk.com/
你應該會看到網頁上寫著:
Hello from Elastic Beanstalk!
部署成功 🎉!
小結
這就是最簡單的 Elastic Beanstalk 實作流程,總結一下步驟:
-
建立應用(Node.js / Python / etc)
-
加好
start
指令 -
壓成 ZIP 檔
-
上傳到 Elastic Beanstalk
-
幾分鐘內自動建立並上線
對於想快速上線 MVP 或測試環境的人來說,Elastic Beanstalk 真的是一個超省力的好選擇!
沒問題!這裡幫你補上
Elastic Beanstalk 簡易實作教學(Python / Flask 範例)
延續剛剛 Node.js 範例的風格和節奏,一樣清楚、快速能跟著做!
Elastic Beanstalk 簡易實作教學(以 Python / Flask 範例)
如果你是使用 Python 的開發者,想要快速把 Flask App 部署到 Elastic Beanstalk,也是非常簡單的!
這篇教學會帶你從零建立一個最簡單的 Flask App,並且成功部署到 Elastic Beanstalk 上運行。
1. 建立一個 Flask 專案
首先,在你的電腦上新建一個資料夾,例如 eb-python-demo
:
mkdir eb-python-demo
cd eb-python-demo
python3 -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate
pip install flask
接著新增一個 application.py
(注意:檔名是 application.py
,Elastic Beanstalk 預設會找這個名字)
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "Hello from Elastic Beanstalk with Python!"
if __name__ == "__main__":
application.run(host='0.0.0.0', port=5000)
這樣就完成一個超簡單的 Flask Web App!
2. 建立 requirements.txt
Elastic Beanstalk 需要知道要安裝哪些套件,所以要建立一個 requirements.txt
檔案,內容如下:
Flask
(未來如果有更多套件,就加在這個檔案裡。)
指令快速產生:
pip freeze > requirements.txt
3. 建立 .ebextensions
設定檔(可選)
如果你想在 Elastic Beanstalk 上做更多進階設定(例如自動安裝系統套件),可以用 .ebextensions
。
不過這次我們簡單部署,這步可以先跳過。
4. 壓縮成 ZIP 檔案
跟剛剛 Node.js 一樣,把你的檔案壓縮成一個 .zip
檔案。
⚡ 注意:
-
ZIP 裡面應該包含:
application.py
、requirements.txt
-
不要壓整個資料夾進去
正確的結構是:
application.py
requirements.txt
5. 部署到 Elastic Beanstalk
打開 AWS Elastic Beanstalk Console
操作步驟:
-
點選「Create Application」
-
填寫:
-
Application name:例如
demo-python-app
-
Platform:選 Python
-
Platform Branch:例如 Python 3.11
-
-
上傳剛剛壓好的
.zip
檔案 -
點選「Create Application」
Elastic Beanstalk 會自動:
-
幫你建立 EC2
-
幫你佈署 Flask
-
幫你設定 Load Balancer
大約 3-5 分鐘部署完成。
6. 驗證部署結果
部署好之後,Elastic Beanstalk 會給你一個 URL,比如:
http://demo-python-app.ap-northeast-1.elasticbeanstalk.com/
打開之後應該會看到:
Hello from Elastic Beanstalk with Python!
大成功!🎉
小結
Python / Flask 的 Elastic Beanstalk 快速部署流程:
-
建好 Flask 應用(注意
application.py
) -
建立
requirements.txt
-
打包成
.zip
-
上傳到 Elastic Beanstalk
-
等待幾分鐘,直接有一個可以訪問的 Web App
Elastic Beanstalk 進階教學
(環境變數、eb CLI 部署、自動串接 RDS)
一、設定環境變數(Environment Variables)
在實際應用中,很常需要讓應用程式讀取一些敏感資訊(像資料庫連線字串、API 金鑰等等),這些不適合硬寫在程式碼裡。
這時就需要使用「環境變數」。
✅ 在 Elastic Beanstalk 上設定環境變數
操作步驟:
-
打開 Elastic Beanstalk Console,進入你的應用 Environment
-
左邊選單找到「Configuration」
-
找到「Software」,按下「Edit」
-
在 Environment properties 區塊新增你的變數,例如:
Key | Value |
---|---|
DB_HOST |
mydb.xxxxxxxxx.rds.amazonaws.com |
DB_USER |
admin |
DB_PASSWORD |
supersecure123 |
儲存後,Elastic Beanstalk 會自動重啟環境,讓你的應用可以透過環境變數讀取設定。
✅ 在程式中讀取環境變數(Python Flask 範例)
import os
db_host = os.getenv('DB_HOST')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
這樣就能安全地使用環境設定,不用把敏感資訊寫死在程式碼裡!
二、使用 eb CLI 進行快速部署
如果你覺得每次都開 Console 點來點去很煩,AWS 提供了專門給 Elastic Beanstalk 用的指令工具:
Elastic Beanstalk CLI (eb CLI)
可以直接從 Terminal 完成初始化、部署、查看環境狀態等等,非常方便!
✅ 安裝 eb CLI
先安裝 AWS EB CLI:
pip install awsebcli --upgrade
有時候 MacOS 或 Linux 需要加上
--user
,或用 virtualenv 安裝。
安裝好後,試試:
eb --version
如果能正常顯示版本號,代表安裝成功。
✅ eb CLI 操作基本流程
-
登入 AWS(要先設定好 AWS CLI credentials)
aws configure
-
初始化 eb 專案
在你的應用資料夾內:
eb init
過程中會問你:
-
要使用哪個 Region?
-
是哪個 Platform?(Node.js、Python 等)
-
是否需要設定 SSH?
-
建立 Environment
eb create dev-env
(可以自己取環境名字)
-
部署更新
eb deploy
-
查看環境資訊
eb status
-
開啟瀏覽器查看應用
eb open
超級方便,可以完全不開網頁直接部署更新!
三、自動串接 RDS 資料庫(一起建立)
如果你的應用需要資料庫(例如 MySQL、PostgreSQL),Elastic Beanstalk 可以在建立 Environment 時順便幫你建立 RDS!
✅ 如何設定
-
建立 Environment 時,選擇「Configure more options」
-
找到「Database」選項,點選「Edit」
-
選擇:
-
資料庫引擎(MySQL、PostgreSQL)
-
資料庫版本
-
使用者名稱、密碼
-
硬碟空間大小
-
建立好後:
-
Elastic Beanstalk 會自動把 RDS 與你的應用放在同一個 VPC、Security Group
-
會自動把資料庫連線資訊存到環境變數(
RDS_HOSTNAME
、RDS_USERNAME
、RDS_PASSWORD
、RDS_PORT
)
你的 Flask / Node.js 應用只要讀取這些環境變數,就能連上資料庫!
✅ Flask 範例(連接 Elastic Beanstalk RDS)
import os
import pymysql
db_host = os.getenv('RDS_HOSTNAME')
db_user = os.getenv('RDS_USERNAME')
db_password = os.getenv('RDS_PASSWORD')
db_name = os.getenv('RDS_DB_NAME')
conn = pymysql.connect(
host=db_host,
user=db_user,
password=db_password,
database=db_name
)
就可以在應用程式中直接操作資料庫啦!
小結
Elastic Beanstalk 除了快速部署應用,進階玩法還可以:
-
設定環境變數,安全管理敏感資訊
-
使用 eb CLI,極速 Terminal 部署
-
一起建立 RDS,讓應用直接串接雲端資料庫
Elastic Beanstalk 常見錯誤排除指南
Elastic Beanstalk 幫我們自動化了很多事,但實際使用過程中還是很容易遇到一些常見錯誤。
這篇幫大家整理了:
-
常見的 Elastic Beanstalk 部署問題
-
原因說明
-
解決方法
給你一份遇到問題時能快速排雷的工具包!
1. 部署後出現 502 Bad Gateway
問題現象
-
部署成功,但一打開應用的網址就跳出 502 Bad Gateway
-
或者頁面載入超級慢然後 timeout
常見原因
-
應用程式沒有正常啟動
-
聽錯了 Port(Elastic Beanstalk 預設會轉送到 80 或由 proxy pass)
解決方法
✅ 檢查你的應用程式是否有監聽正確的 Port:
-
Node.js / Flask / Django 等應用,要監聽環境變數給定的 port
-
例如 Flask:
application.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
✅ 查看 Logs:
-
Elastic Beanstalk Console → Logs → Request logs → Last 100 lines
-
查看應用啟動過程是否有錯誤訊息,例如 module not found、port 綁定錯誤等
2. 部署失敗,顯示「Instance deployment failed」
問題現象
-
上傳 ZIP 包後,環境 Health 直接變紅色
-
console 顯示 deployment failed
常見原因
-
上傳的 ZIP 包結構錯誤
-
必要檔案(像
application.py
或package.json
)缺少或錯誤 -
requirements.txt 有誤(例如版本衝突、缺失)
解決方法
✅ 確認 ZIP 檔內部是正確的結構:
application.py
requirements.txt
(不要包一層資料夾)
✅ 如果是 Python,確保有 requirements.txt
,且內容正確。
✅ 部署失敗可以看 Instance logs:
-
Console → Logs → Instance logs → 全部下載下來
-
查看
/var/log/eb-engine.log
或/var/log/web.stdout.log
裡的錯誤訊息
3. 無法 SSH 連線到 EC2
問題現象
-
按下「Connect」或者手動 SSH 連線失敗
-
卡在 timeout,無法進去 Instance
常見原因
-
Security Group 沒有開放 port 22
-
沒有設定 Key Pair
-
錯誤使用 Public IP 或 DNS 名稱
解決方法
✅ 確認 Environment → Configuration → Security → EC2 Key Pair 有設定。
✅ Security Group 要開 TCP 22 port,允許你的 IP 連進去。
✅ 連線指令正確,例如:
ssh -i my-key.pem ec2-user@your-public-dns.amazonaws.com
4. 資源遺留:環境刪掉但 EC2、RDS 還在
問題現象
-
刪除 Elastic Beanstalk 環境後
-
發現 EC2、RDS、Security Group、EBS Volume 還殘留在帳號中
常見原因
-
預設刪除環境時,只會刪除 Beanstalk 直接管理的資源
-
外掛式 RDS、手動建立的資源不會跟著刪
解決方法
✅ 手動到 EC2、RDS、VPC 頁面,檢查並刪除殘留的資源。
✅ 未來建立環境時,如果有開 RDS,選「內嵌式 RDS」(跟環境生命週期綁在一起),才會自動清掉。
5. 更新應用程式後,環境變紅,回不去
問題現象
-
部署新版本應用後
-
Elastic Beanstalk 環境變成 Severe(紅色)
-
想緊急回滾但不知道怎麼做
常見原因
-
新版程式出錯,導致服務無法正常啟動
-
Elastic Beanstalk 的 Health Check 判定失敗
解決方法
✅ 使用 Elastic Beanstalk 的 版本回滾功能:
-
Console → Application → Versions
-
找到上一個成功部署的版本,按「Deploy」
✅ 部署失敗時,通常 Console 會自動記錄上一次成功的狀態,可以快速 Rollback。
6. 頻繁超過資源限制(Instance CPU 爆表、Memory 爆滿)
問題現象
-
Elastic Beanstalk 環境 Health 不穩
-
應用載入變慢或直接掛掉
常見原因
-
Instance 選太小(例如 t2.micro 記憶體太小)
-
程式設計有記憶體洩漏(Memory Leak)
-
同一台機器上負載過高
解決方法
✅ 調整 Instance Type:
-
將 EC2 Instance 換成 t3.medium、t3.large 或更高階型號
-
Elastic Beanstalk 支援一鍵調整 Scaling 設定
✅ 設定 Auto Scaling Policy:
-
當 CPU > 60% 自動擴展一台
-
當 CPU < 30% 自動縮減
✅ 用 CloudWatch 監控 CPU、Memory 使用率,設通知(Alarm)
小結
Elastic Beanstalk 雖然大幅降低了管理負擔,但遇到問題時:
-
善用 Logs
-
善用 Environment Health Status
-
善用版本控制回滾機制
這三個是最快速排除問題的關鍵!
下一篇,我們將進入 AWS 的 Serverless 運算世界 —— Lambda!
看看如果連 EC2、Load Balancer 都不想管,只想「寫 function」,AWS 能怎麼幫你做到!
Day 8 再見 👋