该项目提供了一个全面的指南,用于使用 CI/CD 管道在 AWS ECS(Elastic Container Service)Fargate 上部署容器化应用程序。该管道集成了 AWS CodePipeline 、 AWS CodeBuild 、 Amazon Elastic Container Registry (ECR) 和 Amazon Relational Database Service (RDS) 以管理数据库。您将学习如何在 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 提供的无服务器计算来运行容器,实现了无缝的扩展和管理,无需担心底层基础设施。
该项目架构涉及以下组件:
CloudWatch : 用于监控和日志记录。
具有必要权限的 AWS 账户。
安装并配置了 AWS CLI。
在本地安装了 Docker。
用于存储应用代码的 GitHub 仓库。
在这一步骤中,我们将创建一个简单的 Node.js 应用程序并将其容器化。
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('连接到数据库'); }); app.get('/', (req, res) => { res.send('应用在 ECS Fargate 和 RDS 上运行!'); }); app.listen(3000, () => { console.log('服务器在端口 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 实例可用,记下 Endpoint 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 "安装依赖" - npm install pre_build: commands: - echo "登录 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 "构建 Docker 镜像" - 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 "将 Docker 镜像推送到 ECR" - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/fargate-app:latest artifacts: files: - "**/*"
进入全屏模式 退出全屏模式
提交并推送到 GitHub 上的代码更改:
git add . git commit -m "初始提交用于 ECS Fargate 应用" git push origin main
进入全屏模式 退出全屏模式
一旦代码被推送,CodePipeline 将会被触发,构建 Docker 镜像,将其推送到 ECR,并部署到 ECS Fargate。
AWS Fargate 与 CloudWatch Logs 集成,允许您直接监控应用程序日志。通过前往 CloudWatch 查看日志。
> 日志**。
进入 CloudWatch 控制台 > 警报。
在这个项目中,你已经在 AWS 上构建了一个完整的 DevOps 管道,使用 ECS Fargate 、 RDS 和 ECR 部署了一个 Docker 化的 Node.js 应用程序。你还通过 CodePipeline 和 CodeBuild 自动化了部署过程,并通过 CloudWatch 集成了强大的监控功能。这个设置是可扩展的、有弹性的,并且符合现代 DevOps 实践。
GIF
加入我们的Telegram社区 || 在GitHub关注我,获取更多DevOps内容!