這個專案提供了一個全面的指南,用於在 AWS ECS(彈性容器服務)Fargate 上部署容器化應用程式,並使用整合 AWS CodePipeline、AWS CodeBuild、Amazon Elastic Container Registry (ECR) 和 Amazon Relational Database Service (RDS) 的 CI/CD 管道進行資料庫管理。您將學習如何在 Fargate 上建立容器化應用程式、自動化部署過程,以及管理您在 AWS 上的基礎設施。
在這個專案中,我們將在 AWS ECS Fargate 上部署一個 Docker 化的 Node.js 應用程式。我們將使用 Amazon RDS 進行資料庫管理,並配置一個使用 AWS CodePipeline 和 AWS CodeBuild 的 CI/CD 管道,以自動化將 Docker 映像檔部署到 Fargate。該應用程式將與 RDS 數據庫進行通信。
此架構利用 Fargate 的無伺服器計算來運行容器,讓您在不擔心基礎設施的情況下,實現無縫的可擴展性和管理。
專案架構涉及以下組件:
在這一步中,我們將創建一個簡單的 Node.js 應用程式並將其 Docker 化。
mkdir fargate-app
cd fargate-app
npm init -y
npm install express mysql
創建一個 server.js
文件,內容如下:
const express = require('express');
const mysql = require('mysql');
const app = express();
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
});
db.connect((err) => {
if (err) {
throw err;
}
console.log('Connected to database');
});
app.get('/', (req, res) => {
res.send('App running on ECS Fargate with RDS!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
touch Dockerfile
將以下內容添加到 Dockerfile:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
docker build -t fargate-app .
本地運行以測試應用程式:
docker run -p 3000:3000 fargate-app
要在 ECS Fargate 上部署 Docker 映像檔,您需要將映像檔存儲在 Amazon Elastic Container Registry (ECR) 中。
aws ecr create-repository --repository-name fargate-app
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <aws-account-id>.dkr.ecr.<region>.amazonaws.com
docker tag fargate-app:latest <aws-account-id>.dkr.ecr.<region>.amazonaws.com/fargate-app:latest
docker push <aws-account-id>.dkr.ecr.<region>.amazonaws.com/fargate-app:latest
一旦 RDS 實例可用,記下 端點 URL,該 URL 將在應用程式代碼中使用。
添加以下環境變數,以連接到 RDS 數據庫:
DB_HOST
:您的 RDS 端點。DB_USER
:數據庫使用者名稱。DB_PASS
:數據庫密碼。DB_NAME
:數據庫名稱。fargate-cluster
)。我們將使用 AWS CodePipeline 自動化部署過程。
確保您的管道擁有與 ECS、ECR 和 CodeBuild 互動所需的權限。
在倉庫根目錄中創建一個 buildspec.yml
文件,以定義構建指令:
version: 0.2
phases:
install:
commands:
- echo "Installing dependencies"
- npm install
pre_build:
commands:
- echo "Logging into Amazon ECR"
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
build:
commands:
- echo "Building Docker image"
- docker build -t fargate-app .
- docker tag fargate-app:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/fargate-app:latest
post_build:
commands:
- echo "Pushing Docker image to ECR"
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/fargate-app:latest
artifacts:
files:
- "**/*"
提交並推送代碼變更到 GitHub:
git add .
git commit -m "Initial commit for ECS Fargate app"
git push origin main
一旦代碼推送,CodePipeline 將被觸發,構建 Docker 映像檔,推送到 ECR,並將其部署到 ECS Fargate。
AWS Fargate 與 CloudWatch Logs 集成,允許您直接監控應用程式日誌。前往 CloudWatch > 日誌 以檢查日誌。
在這個專案中,您已經在 AWS 上構建了一個完整的 DevOps 管道,部署了一個 Docker 化的 Node.js 應用程式,使用 ECS Fargate、RDS 和 ECR。您還使用 CodePipeline 和 CodeBuild 自動化了部署過程,並通過 CloudWatch 集成了穩健的監控。該設置具有可擴展性、韌性,並符合現代 DevOps 實踐。
加入我們的 Telegram 社群 || 在 GitHub 關注我 獲得更多 DevOps 內容!