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

介绍

在这篇文章中,我将引导您完成在 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
我如何使用美丽的汤来解析HTML?我如何使用美丽的汤来解析HTML?Mar 10, 2025 pm 06:54 PM

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

Python中的数学模块:统计Python中的数学模块:统计Mar 09, 2025 am 11:40 AM

Python的statistics模块提供强大的数据统计分析功能,帮助我们快速理解数据整体特征,例如生物统计学和商业分析等领域。无需逐个查看数据点,只需查看均值或方差等统计量,即可发现原始数据中可能被忽略的趋势和特征,并更轻松、有效地比较大型数据集。 本教程将介绍如何计算平均值和衡量数据集的离散程度。除非另有说明,本模块中的所有函数都支持使用mean()函数计算平均值,而非简单的求和平均。 也可使用浮点数。 import random import statistics from fracti

python对象的序列化和避难所化:第1部分python对象的序列化和避难所化:第1部分Mar 08, 2025 am 09:39 AM

Python 对象的序列化和反序列化是任何非平凡程序的关键方面。如果您将某些内容保存到 Python 文件中,如果您读取配置文件,或者如果您响应 HTTP 请求,您都会进行对象序列化和反序列化。 从某种意义上说,序列化和反序列化是世界上最无聊的事情。谁会在乎所有这些格式和协议?您想持久化或流式传输一些 Python 对象,并在以后完整地取回它们。 这是一种在概念层面上看待世界的好方法。但是,在实际层面上,您选择的序列化方案、格式或协议可能会决定程序运行的速度、安全性、维护状态的自由度以及与其他系

如何使用TensorFlow或Pytorch进行深度学习?如何使用TensorFlow或Pytorch进行深度学习?Mar 10, 2025 pm 06:52 PM

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

如何解决Linux终端中查看Python版本时遇到的权限问题?如何解决Linux终端中查看Python版本时遇到的权限问题?Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

哪些流行的Python库及其用途?哪些流行的Python库及其用途?Mar 21, 2025 pm 06:46 PM

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

用美丽的汤在Python中刮擦网页:搜索和DOM修改用美丽的汤在Python中刮擦网页:搜索和DOM修改Mar 08, 2025 am 10:36 AM

该教程建立在先前对美丽汤的介绍基础上,重点是简单的树导航之外的DOM操纵。 我们将探索有效的搜索方法和技术,以修改HTML结构。 一种常见的DOM搜索方法是EX

如何使用Python创建命令行接口(CLI)?如何使用Python创建命令行接口(CLI)?Mar 10, 2025 pm 06:48 PM

本文指导Python开发人员构建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等库详细介绍,强调输入/输出处理,并促进用户友好的设计模式,以提高CLI可用性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。