這個專案提供了一個全面的指南,用於在 AWS ECS(彈性容器服務)Fargate 上部署容器化應用程式,並使用整合 AWS CodePipelineAWS CodeBuildAmazon Elastic Container Registry (ECR)Amazon Relational Database Service (RDS) 的 CI/CD 管道進行資料庫管理。您將學習如何在 Fargate 上建立容器化應用程式、自動化部署過程,以及管理您在 AWS 上的基礎設施。


目錄

  1. 介紹
  2. 架構概述
  3. 先決條件
  4. 步驟 1:設置 Docker 化應用程式
  5. 步驟 2:創建 ECR 倉庫
  6. 步驟 3:啟動 RDS 數據庫
  7. 步驟 4:設置 ECS Fargate
  8. 步驟 5:使用 CodePipeline 創建 CI/CD 管道
  9. 步驟 6:測試部署
  10. 使用 CloudWatch 進行監控和日誌記錄
  11. 結論

介紹

在這個專案中,我們將在 AWS ECS Fargate 上部署一個 Docker 化的 Node.js 應用程式。我們將使用 Amazon RDS 進行資料庫管理,並配置一個使用 AWS CodePipelineAWS CodeBuildCI/CD 管道,以自動化將 Docker 映像檔部署到 Fargate。該應用程式將與 RDS 數據庫進行通信。

此架構利用 Fargate 的無伺服器計算來運行容器,讓您在不擔心基礎設施的情況下,實現無縫的可擴展性和管理。


架構概述

專案架構涉及以下組件:

  • AWS ECS Fargate:在不管理伺服器的情況下運行 Docker 容器。
  • Amazon RDS:一個管理式關聯數據庫。
  • Amazon ECR:一個完全管理的 Docker 容器倉庫,用於存儲映像檔。
  • AWS CodePipeline:自動化 CI/CD 流程。
  • AWS CodeBuild:構建與測試 Docker 映像檔。
  • CloudWatch:用於監控和日誌記錄。

先決條件

  1. 擁有具備必要權限的 AWS 帳戶
  2. 已安裝並配置的 AWS CLI
  3. 本地安裝的 Docker
  4. 用於存儲應用程式代碼的 GitHub 倉庫。
  5. DockerNode.jsAWS 服務 的基本知識。

步驟 1:設置 Docker 化應用程式

在這一步中,我們將創建一個簡單的 Node.js 應用程式並將其 Docker 化。

1.1. 創建 Node.js 應用程式

mkdir fargate-app
cd fargate-app
npm init -y
npm install express mysql

1.2. 應用程式代碼

創建一個 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');
});

1.3. 創建 Dockerfile

touch Dockerfile

將以下內容添加到 Dockerfile:

FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

1.4. 本地構建 Docker 映像檔

docker build -t fargate-app .

本地運行以測試應用程式:

docker run -p 3000:3000 fargate-app

步驟 2:創建 ECR 倉庫

要在 ECS Fargate 上部署 Docker 映像檔,您需要將映像檔存儲在 Amazon Elastic Container Registry (ECR) 中。

2.1. 創建 ECR 倉庫

aws ecr create-repository --repository-name fargate-app

2.2. 驗證 Docker 到 ECR

aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <aws-account-id>.dkr.ecr.<region>.amazonaws.com

2.3. 標籤並推送 Docker 映像檔到 ECR

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

步驟 3:啟動 RDS 數據庫

3.1. 創建 RDS 實例

  1. 前往 AWS 管理控制台 > RDS > 創建數據庫
  2. 選擇 MySQL 作為引擎。
  3. 選擇免費層選項並配置數據庫名稱、使用者名稱和密碼。

3.2. 記下 RDS 端點

一旦 RDS 實例可用,記下 端點 URL,該 URL 將在應用程式代碼中使用。


步驟 4:設置 ECS Fargate

4.1. 創建任務定義

  1. 前往 ECS 控制台 > 任務定義 > 創建新任務定義
  2. 選擇 Fargate 作為啟動類型。
  3. 添加一個容器並指定來自 ECR 的 Docker 映像 URL。

4.2. 設置環境變數

添加以下環境變數,以連接到 RDS 數據庫:

  • DB_HOST:您的 RDS 端點。
  • DB_USER:數據庫使用者名稱。
  • DB_PASS:數據庫密碼。
  • DB_NAME:數據庫名稱。

4.3. 創建 ECS 集群

  1. 前往 ECS 控制台 > 集群 > 創建集群
  2. 為 Fargate 選擇 僅網路
  3. 命名您的集群(例如,fargate-cluster)。

4.4. 創建服務

  1. 前往 ECS 集群 > 創建服務
  2. 選擇之前創建的任務定義。
  3. 配置服務與所需的任務、負載均衡器和 VPC 設定。

步驟 5:使用 CodePipeline 創建 CI/CD 管道

我們將使用 AWS CodePipeline 自動化部署過程。

5.1. 創建 CodePipeline 的 IAM 角色

確保您的管道擁有與 ECS、ECR 和 CodeBuild 互動所需的權限。

5.2. CodeBuild 的 BuildSpec

在倉庫根目錄中創建一個 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:
    - "**/*"

5.3. 創建管道

  1. 前往 CodePipeline > 創建管道
  2. 設置 來源階段,選擇您的 GitHub 倉庫。
  3. 添加一個 構建階段,使用 AWS CodeBuild
  4. 添加一個 部署階段,以使用新映像檔更新 ECS Fargate 服務。

步驟 6:測試部署

6.1. 將代碼推送到 GitHub

提交並推送代碼變更到 GitHub:

git add .
git commit -m "Initial commit for ECS Fargate app"
git push origin main

6.2. 驗證管道執行

一旦代碼推送,CodePipeline 將被觸發,構建 Docker 映像檔,推送到 ECR,並將其部署到 ECS Fargate


使用 CloudWatch 進行監控和日誌記錄

7.1. ECS Fargate 日誌記錄

AWS Fargate 與 CloudWatch Logs 集成,允許您直接監控應用程式日誌。前往 CloudWatch > 日誌 以檢查日誌。

7.2. 設置 CloudWatch 警報

  1. 前往 CloudWatch 控制台 > 警報
  2. 創建 CPU、內存使用情況或日誌錯誤模式的警報,以確保適當的監控。

結論

在這個專案中,您已經在 AWS 上構建了一個完整的 DevOps 管道,部署了一個 Docker 化的 Node.js 應用程式,使用 ECS FargateRDSECR。您還使用 CodePipelineCodeBuild 自動化了部署過程,並通過 CloudWatch 集成了穩健的監控。該設置具有可擴展性、韌性,並符合現代 DevOps 實踐。


👤 作者

banner

加入我們的 Telegram 社群 || 在 GitHub 關注我 獲得更多 DevOps 內容!


原文出處:https://dev.to/prodevopsguytech/end-to-end-aws-devops-project-cicd-pipeline-for-ecs-fargate-with-ecr-and-rds-2b07


共有 0 則留言