端到端 AWS DevOps 项目:用于 ECS Fargate 和 ECR 及 RDS 的 CI/CD 管道
本项目提供全面的指南,指导您如何使用集成了AWS CodePipeline、AWS CodeBuild、Amazon Elastic Container Registry (ECR)和Amazon Relational Database Service (RDS) 的CI/CD 管道在 AWS ECS (Elastic Container Service) Fargate 上部署容器化应用程序,从而实现数据库管理。您将学习如何在 Fargate 上设置容器化应用程序、自动化部署流程以及如何管理 AWS 上的基础设施。
目录
- 介绍
- 架构概述
- 先决条件
- 步骤1:设置Docker化应用程序
- 步骤 2:创建 ECR 存储库
- 步骤3:启动RDS数据库
- 步骤 4:设置 ECS Fargate
- 步骤 5:使用 CodePipeline 创建 CI/CD 管道
- 步骤6:测试部署
- 使用 CloudWatch 进行监控和日志记录
- 结论
介绍
在本项目中,我们将在AWS ECS Fargate上部署一个 Docker 化的 Node.js 应用程序。我们将使用Amazon RDS进行数据库管理,并使用AWS CodePipeline和AWS CodeBuild配置CI/CD 管道,以自动将 Docker 镜像部署到 Fargate。该应用程序将与 RDS 数据库进行通信。
该架构利用 Fargate 为容器提供无服务器计算,实现无缝扩展和管理,无需担心底层基础设施。
架构概述
项目架构涉及以下组件:
- AWS ECS Fargate:无需管理服务器即可运行 Docker 容器。
- Amazon RDS:托管关系数据库。
- Amazon ECR:一个完全托管的 Docker 容器注册表,用于存储图像。
- AWS CodePipeline:自动化 CI/CD 流程。
- AWS CodeBuild:构建并测试 Docker 镜像。
- CloudWatch:用于监控和日志记录。
先决条件
- 具有必要权限的AWS账户。
- 已安装并配置AWS CLI。
- Docker安装在本地。
- 用于存储应用程序代码的GitHub存储库。
- 具有Docker、Node.js和AWS 服务的基本知识。
步骤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. 向 ECR 验证 Docker
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 实例
- 转到AWS 管理控制台> RDS >创建数据库。
- 选择MySQL作为引擎。
- 选择免费套餐选项并配置数据库名称、用户名和密码。
3.2. 记下 RDS 端点
一旦 RDS 实例可用,请记下Endpoint URL,它将在应用程序代码中使用。
步骤 4:设置 ECS Fargate
4.1. 创建任务定义
- 转到ECS 控制台>任务定义>创建新任务定义。
- 选择Fargate作为启动类型。
- 添加一个容器并从 ECR 指定 Docker 镜像 URL。
4.2. 设置环境变量
添加以下环境变量用于连接RDS数据库:
DB_HOST
:您的 RDS 端点。DB_USER
:数据库用户名。DB_PASS
:数据库密码。DB_NAME
:数据库名称。
4.3. 创建 ECS 集群
- 进入ECS 控制台>集群>创建集群。
- 为 Fargate选择仅联网。
- 为您的集群命名(例如
fargate-cluster
)。
4.4. 创建服务
- 转到ECS 集群>创建服务。
- 选择之前创建的任务定义。
- 使用所需的任务、负载均衡器和 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. 创建管道
- 转到CodePipeline >创建管道。
- 使用您的 GitHub 存储库设置源阶段。
- 使用AWS CodeBuild添加构建阶段。
- 添加部署阶段以使用新图像更新您的 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 警报
- 转到CloudWatch 控制台>警报。
- 为 CPU、内存使用情况或日志错误模式创建警报,以确保正确监控。
结论
在本项目中,您在 AWS 上构建了完整的 DevOps 管道,并使用ECS Fargate、RDS和ECR部署了一个 Dockerized Node.js 应用程序。您还使用CodePipeline和CodeBuild实现了部署流程的自动化,并通过CloudWatch集成了强大的监控功能。此设置可扩展、弹性强,并遵循现代 DevOps 实践。
👤 作者

加入我们的电报社区||在 GitHub 上关注我以获取更多 DevOps 内容!
文章来源:https://dev.to/prodevopsguytech/end-to-end-aws-devops-project-cicd-pipeline-for-ecs-fargate-with-ecr-and-rds-2b07