首页 > 后端开发 > Python教程 > 使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS

使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS

Barbara Streisand
发布: 2024-11-25 12:05:12
原创
745 人浏览过

介绍

在这篇文章中,我将引导您完成在 AWS 上部署入侵检测系统的过程

注意:此项目假设您已经拥有一个活跃的 AWS 账户,并为代码编辑器配置了您的账户凭证(访问密钥),并且此项目将在您的控制台中产生一些费用

项目概况

目标

该项目的目标如下:

  • 使用 Docker 将应用程序容器化
  • 将容器镜像推送到 ECR
  • 创建一个 VPC、两个私有子网和两个公有子网
  • 为私有子网创建 VPC 终端节点以访问 ECR
  • 在 ECS 服务的公有子网中部署应用程序负载均衡器和目标组
  • 为 ECS 服务创建任务定义
  • 在私有子网中创建 ECS 集群和具有 Fargate 启动类型的 ECS 服务。
  • 在路由 53 中创建托管区域并将其指向 ALB 的 DNS 名称

项目架构

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

使用 docker 将应用程序容器化

本节将展示从头开始创建此项目所涉及的步骤

第 1 步:Dockerize Flask 应用程序

在项目目录中创建一个 Dockerfile 以打包 Flask 应用。

FROM python:3.12

#set the working dir
WORKDIR /usr/src/app

#copy the requirements and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy all the files to the container
COPY . .

#Expose the port
EXPOSE 5000

#run the app
CMD ["gunicorn","-b","0.0.0.0:5000", "app:app"]
登录后复制

第 2 步:构建并测试 Docker 镜像

在本地构建和测试 docker 镜像以确保其按预期工作非常重要

docker build -t image-name .
docker run -p 5000:5000 image-name
登录后复制

将 Docker 镜像推送到 ECR

步骤 1. 创建弹性容器存储库 (ECR)

  • 转到 AWS ECR 控制台并创建存储库并记下 URI(例如 123456789012.dkr.ecr.region.amazonaws.com/repo-name)
  • 注意:输入您的 ECR 存储库并选择查看推送命令,以便查看将映像推送到您的 ECR 存储库的命令。这些命令将在这里使用。

步骤 2.向 ECR 验证 Docker

运行以下命令以使用 ECR 验证 Docker(替换 your-region 和 your-account-id):

aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com

登录后复制

步骤 3. 标记并推送镜像

标记本地 Docker 镜像以匹配 ECR 存储库,然后推送它:

注意:确保这是您帐户各自的区域和帐户 ID

docker tag image-name:latest your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
docker push your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
登录后复制

您的 ECR 存储库应该看起来像这样,图像已成功推送

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

创建 VPC 及其子网

记下该区域,因为这是所有资源将部署的地方

步骤一:创建新的VPC

  • 进入VPC控制台并创建新的VPC
  • 指定 CIDR 块(例如 10.0.0.0/16)

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 注意:创建 VPC 时确保选中启用 DNS 主机名设置

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

步骤 2:为 VPC 创建 Internet 网关 (IGW)

在 VPC 控制台中,选择 Intergate Gateway 选项卡并创建 Internet 网关。创建 IGW 后,将其附加到您的 VPC

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

第 3 步:创建子网

  • 在一个可用区中创建两个子网(例如 us-east-1)
  • 在不同的可用区 (AZ) 中创建另一组两个子网(例如 us-east-2)
  • 注意:在每个可用区中,子网将分别充当私有子网和公有子网。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

注意:ECS 集群将部署在私有子网中,Application Load Balancer 将位于公有子网中,并将访问私有子网中的 ECS 集群

第 4 步:更新路由表

  • 为公有子网和私有子网创建路由表,并将路由表分别关联到公有子网和私有子网。 (确保两者都选择正在使用的 VPC。)
  • 对于公有子网路由表,添加路由以通过互联网网关引导所有出站流量 0.0.0.0/0。
  • 私有子网暂时不会路由出站流量。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

为 ECR 创建 VPC 终端节点

这将使 ECS 集群能够访问弹性容器注册表 (ECR)。
注意:将为 S3、ECR、DOCKER 和 CloudWatch 创建四个端点。

  • 选择端点并单击创建端点。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 命名端点并在服务 com.amazonaws.us-east-1.ecr.api 下搜索 ECR api 端点
  • 选择我们一直使用的 VPC,这将显示子网选项,其中将选择我们的私有子网所在的可用区,然后最终选择我们的私有子网和默认安全组。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 选择默认值并保留策略不变,然后创建 VPC。

*现在创建其余端点,并更改 docker com.amazonaws.us-east-1.ecr.dkr、CloudWatch 日志 com.amazonaws.us-east-1.logs 和 S3 com.amazonaws 的服务。分别为 us-east-1.s3 并遵循这些更改所预期的所有其他内容。

  • 注意:对于 S3 端点,选择网关。这称为 S3 网关端点,会提示您将其连接到私有子网路由表,这将在路由表中为其创建一条路由。

创建应用程序负载均衡器和目标组

这是非常重要的一步,因为它是 ALB
将把流量路由到私有 ECS 服务。

首先,我们需要为 ALB 创建一个安全组。

  • 转到左侧的安全组并选择创建安全组。为安全性提供名称和描述。
  • 在端口范围 80 和源 0.0.0.0/0 上添加入站规则,并分别针对 HTTP 和 HTTPS 流量在端口范围 443 和源 0.0.0.0/24 上添加第二个入站规则

第 1 步:创建目标组

  • 转到 EC2 控制台,在左侧的负载均衡下选择目标组。
  • 在基本配置下选择 IP 地址并命名目标组
  • 将协议和端口保留为 HTTP:80
  • 选择我们要在其中部署负载均衡器的 VPC,然后滚动并单击下一步。
  • 此处删除现有的 IP 地址,所有 IP 地址将自动添加。接下来,指定暴露的端口,Port:5000 并创建目标组。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

创建应用程序负载均衡器

  • 在 EC2 控制台左侧,选择负载均衡器,然后选择创建负载均衡器。
  • 选择创建应用程序负载均衡器,这将是一个面向互联网的负载均衡器。给 ALB 起一个名字。
  • 在网络映射部分选择已创建的 VPC 以及两个可用区中的公有子网。
  • 在侦听器和路由部分中,选择创建的目标组。 ALB 将监听端口:80 并转发到目标组。
  • 创建 ALB。

创建任务定义

进入ECS控制台并选择任务定义。

步骤一:

  • 命名任务定义系列
  • 保留默认的基础架构要求不变,但您可以根据您的判断更改 vCPU 和内存。 Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

第 2 步:对于 容器 1

  • 给个名字
  • 转到 ECR 并复制我们在本项目前面部分中推送的 docker 映像的 URI,然后返回到我们正在创建的任务定义的容器 1 部分,并将其粘贴到容器的映像 URI 中。
  • 对于端口映射,将其设置为 5000,因为这是我们在 docker 容器中公开的端口并为其命名。 注意:端口映射与公开的 docker 端口相同非常重要
  • 添加环境变量
    这在该项目的 CI/CD 部分非常重要。但暂时会被跳过。

  • 继续跳过剩余部分并创建任务定义

创建 Fargate 集群和服务

为 ECS 服务创建安全组

  • 转到左侧的安全组并选择创建安全组。为安全性提供名称和描述。
  • 在端口范围 5000 上添加入站规则,源将是 Application Load Balancer 安全组。

步骤一:创建集群

  • 转到集群选项卡并选择创建集群,这将带您进入集群配置页面。命名集群并确保在基础设施选项卡下仅选择 AWS Fargate(Serverless),然后创建集群。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

第 2 步:创建服务

  • 选择创建的集群,点击service下的create。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

这将引导您进入一个新页面,您将在其中指定 Fargate 服务的配置。

  • 滚动经过“环境”部分并移至“部署配置”。在这里,指定任务定义系列,它也会自动选择修订版。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 选择要启动的所需任务数量。对于这个项目来说,一个就可以了。

  • 滚动到网络选项卡并选择已创建的 VPC,然后选择私有子网

  • 在负载均衡器部分中,选择负载均衡器类型作为应用程序负载均衡器,然后选择使用现有负载均衡器。这将显示在前面部分中创建的 ALB。选择它。

  • 滚动你就会看到,听众。选择使用现有侦听器并选择那里的端口 80 侦听器,在目标组下执行相同操作,选择我们创建的现有目标组。

  • 接下来是服务自动缩放。这是可选的,但对于必须根据定义的指标扩展到应用程序来说是一个很好的补充。启用此选项并指定要运行的任务的最小和最大数量。接下来添加扩展策略。对于此项目,Target 跟踪策略与 ALBrequestCountPerTarget ECS 服务指标一起使用,目标值为 50,横向扩展冷却时间和横向收缩冷却时间为 60 秒

  • 创建服务。

  • 创建服务后,将创建所需数量的任务。

在路线 53 中创建托管区域

如果遵循上述说明,您应该拥有一个功能齐全的网络应用程序,要访问它,请转到您的负载均衡器,复制 DNS 名称并粘贴到您的浏览器中。但这很乏味,而且没有使用最佳实践。理想情况下,ALB 或 CloudFront 前面应该有一个 Web 应用程序防火墙,但为了简单起见,我们将仅使用 Route 53。

注意:本部分要求您拥有 AWS 或任何其他提供商的注册域名

第 1 步:创建托管于

  • 转到 Route 53 控制台。
  • 在左侧选项卡上,选择托管区域。你应该拥有这个。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 选择创建托管区域
  • 输入您的域名并提供描述。将类型保留为公共托管区域并选择创建托管区域。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

步骤 2:将 ALB DNS 名称添加到托管区域记录

  • 转到您的 ALB 控制台并复制其 DNS 名称。
  • 返回托管区域并选择创建记录。

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 默认记录类型是 A 记录,将使用该记录。
  • 切换别名开关

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 在选择端点下,选择应用程序别名和经典负载均衡器
  • 接下来,选择您启动负载均衡器的区域。在本例中为 us-east-1,确保它是您所在的区域。
  • 从下拉菜单中选择您的负载均衡器。
  • 创建记录。

这假设您在 AWS 拥有域名

恭喜!

如果您按照步骤进行操作,您应该拥有一个可通过您的域名访问的功能齐全的网络应用程序。

这是一个非常令人兴奋的项目,因为我与 VPC、私有和公有子网、VPC 端点、ECS 服务、ECR、目标组、安全组和应用程序负载均衡器一起工作,因为它们一起创建了这个网络 -应用程序。

以上是使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板