端到端的 AWS DevOps 项目:使用 ECR 和 RDS 的 ECS Fargate 的 CI/CD 管道
2024/9/29 21:02:33
本文主要是介绍端到端的 AWS DevOps 项目:使用 ECR 和 RDS 的 ECS Fargate 的 CI/CD 管道,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
该项目提供了一个全面的指南,用于使用 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 提供的无服务器计算来运行容器,实现了无缝的扩展和管理,无需担心底层基础设施。
架构概述
该项目架构涉及以下组件:
- 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 应用程序并将其容器化。
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('连接到数据库'); }); app.get('/', (req, res) => { res.send('应用在 ECS Fargate 和 RDS 上运行!'); }); app.listen(3000, () => { console.log('服务器在端口 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 实例
- 进入 AWS Management Console > 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 "安装依赖" - 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: - "**/*"
进入全屏模式 退出全屏模式
5.3. 创建管道
- 前往 CodePipeline > 创建管道。
- 使用您的 GitHub 仓库设置 源阶段。
- 使用 AWS CodeBuild 添加 构建阶段。
- 添加 部署阶段,使用新镜像更新您的 ECS Fargate 服务。
步骤 6:测试部署
6.1. 将代码推送到 GitHub
提交并推送到 GitHub 上的代码更改:
git add . git commit -m "初始提交用于 ECS Fargate 应用" 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 部署了一个 Docker 化的 Node.js 应用程序。你还通过 CodePipeline 和 CodeBuild 自动化了部署过程,并通过 CloudWatch 集成了强大的监控功能。这个设置是可扩展的、有弹性的,并且符合现代 DevOps 实践。
👤 作者
GIF
加入我们的Telegram社区 || 在GitHub关注我,获取更多DevOps内容!
这篇关于端到端的 AWS DevOps 项目:使用 ECR 和 RDS 的 ECS Fargate 的 CI/CD 管道的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20获取apk的md5值有哪些方法?-icode9专业技术文章分享
- 2024-11-20xml报文没有传 IdentCode ,为什么正常解析没报错呢?-icode9专业技术文章分享
- 2024-11-20如何知道代码有没有进行 Schema 验证?-icode9专业技术文章分享
- 2024-11-20Mycat教程:新手快速入门指南
- 2024-11-20WebSocket入门:轻松掌握WebSocket基础
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享