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

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

Nov 25, 2024 pm 12:05 PM

介绍

在这篇文章中,我将引导您完成在 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

Python 3.6加载pickle文件报错ModuleNotFoundError: No module named '__builtin__'怎么办? Python 3.6加载pickle文件报错ModuleNotFoundError: No module named '__builtin__'怎么办? Apr 02, 2025 am 06:27 AM

Python3.6环境下加载pickle文件报错:ModuleNotFoundError:Nomodulenamed...

使用Scapy爬虫时,管道文件无法写入的原因是什么? 使用Scapy爬虫时,管道文件无法写入的原因是什么? Apr 02, 2025 am 06:45 AM

使用Scapy爬虫时管道文件无法写入的原因探讨在学习和使用Scapy爬虫进行数据持久化存储时,可能会遇到管道文�...

See all articles