端到端的 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 CodePipelineAWS CodeBuildAmazon Elastic Container Registry (ECR)Amazon Relational Database Service (RDS) 以管理数据库。您将学习如何在 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 应用程序并将其容器化。

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 实例

  1. 进入 AWS Management Console > 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 "安装依赖"
          - 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. 创建管道

  1. 前往 CodePipeline > 创建管道
  2. 使用您的 GitHub 仓库设置 源阶段
  3. 使用 AWS CodeBuild 添加 构建阶段
  4. 添加 部署阶段,使用新镜像更新您的 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 警报

  1. 进入 CloudWatch 控制台 > 警报

  2. 创建 CPU 使用率、内存使用率或日志错误模式的警报,以确保正确监控。

结论

在这个项目中,你已经在 AWS 上构建了一个完整的 DevOps 管道,使用 ECS FargateRDSECR 部署了一个 Docker 化的 Node.js 应用程序。你还通过 CodePipelineCodeBuild 自动化了部署过程,并通过 CloudWatch 集成了强大的监控功能。这个设置是可扩展的、有弹性的,并且符合现代 DevOps 实践。


&#128100; 作者

GIF banner

加入我们的Telegram社区 || 在GitHub关注我,获取更多DevOps内容!



这篇关于端到端的 AWS DevOps 项目:使用 ECR 和 RDS 的 ECS Fargate 的 CI/CD 管道的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程