端到端 AWS DevOps 项目:用于 ECS Fargate 和 ECR 及 RDS 的 CI/CD 管道

2025-05-26

端到端 AWS DevOps 项目:用于 ECS Fargate 和 ECR 及 RDS 的 CI/CD 管道

本项目提供全面的指南,指导您如何使用集成了AWS CodePipelineAWS CodeBuildAmazon Elastic Container Registry (ECR)Amazon Relational Database Service (RDS) 的CI/CD 管道在 AWS ECS (Elastic Container Service) Fargate 上部署容器化应用程序,从而实现数据库管理。您将学习如何在 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 CodeBuild配置CI/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
Enter fullscreen mode Exit fullscreen mode

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');
});
Enter fullscreen mode Exit fullscreen mode

1.3. 创建 Dockerfile

touch Dockerfile
Enter fullscreen mode Exit fullscreen mode

在Dockerfile中添加以下内容:

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

1.4. 本地构建 Docker 镜像

docker build -t fargate-app .
Enter fullscreen mode Exit fullscreen mode

通过运行以下命令在本地测试应用程序:

docker run -p 3000:3000 fargate-app
Enter fullscreen mode Exit fullscreen mode

步骤 2:创建 ECR 存储库

要在 ECS Fargate 上部署 Docker 镜像,您需要将镜像存储在Amazon Elastic Container Registry (ECR)中。

2.1. 创建 ECR 存储库

aws ecr create-repository --repository-name fargate-app
Enter fullscreen mode Exit fullscreen mode

2.2. 向 ECR 验证 Docker

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

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
Enter fullscreen mode Exit fullscreen mode

步骤3:启动RDS数据库

3.1. 创建 RDS 实例

  1. 转到AWS 管理控制台> RDS >创建数据库
  2. 选择MySQL作为引擎。
  3. 选择免费套餐选项并配置数据库名称、用户名和密码。

3.2. 记下 RDS 端点

一旦 RDS 实例可用,请记下Endpoint 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:
    - "**/*"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 管道,并使用ECS FargateRDSECR部署了一个 Dockerized Node.js 应用程序。您还使用CodePipelineCodeBuild实现了部署流程的自动化,并通过CloudWatch集成了强大的监控功能。此设置可扩展、弹性强,并遵循现代 DevOps 实践。


👤 作者

横幅

加入我们的电报社区||在 GitHub 上关注我以获取更多 DevOps 内容!

文章来源:https://dev.to/prodevopsguytech/end-to-end-aws-devops-project-cicd-pipeline-for-ecs-fargate-with-ecr-and-rds-2b07
PREV
端到端 DevOps 项目:构建、部署和监控全栈应用程序
NEXT
端到端 AWS DevOps 项目:使用 GitLab CI/CD 自动构建 Node.js 应用程序并将其部署到 Amazon ECS