使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS
介绍
在这篇文章中,我将引导您完成在 AWS 上部署入侵检测系统的过程
注意:此项目假设您已经拥有一个活跃的 AWS 账户,并为代码编辑器配置了您的账户凭证(访问密钥),并且此项目将在您的控制台中产生一些费用
项目概况
目标
该项目的目标如下:
- 使用 Docker 将应用程序容器化
- 将容器镜像推送到 ECR
- 创建一个 VPC、两个私有子网和两个公有子网
- 为私有子网创建 VPC 终端节点以访问 ECR
- 在 ECS 服务的公有子网中部署应用程序负载均衡器和目标组
- 为 ECS 服务创建任务定义
- 在私有子网中创建 ECS 集群和具有 Fargate 启动类型的 ECS 服务。
- 在路由 53 中创建托管区域并将其指向 ALB 的 DNS 名称
项目架构
使用 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 存储库应该看起来像这样,图像已成功推送
创建 VPC 及其子网
记下该区域,因为这是所有资源将部署的地方
步骤一:创建新的VPC
- 进入VPC控制台并创建新的VPC
- 指定 CIDR 块(例如 10.0.0.0/16)
- 注意:创建 VPC 时确保选中启用 DNS 主机名设置
步骤 2:为 VPC 创建 Internet 网关 (IGW)
在 VPC 控制台中,选择 Intergate Gateway 选项卡并创建 Internet 网关。创建 IGW 后,将其附加到您的 VPC
第 3 步:创建子网
- 在一个可用区中创建两个子网(例如 us-east-1)
- 在不同的可用区 (AZ) 中创建另一组两个子网(例如 us-east-2)
- 注意:在每个可用区中,子网将分别充当私有子网和公有子网。
注意:ECS 集群将部署在私有子网中,Application Load Balancer 将位于公有子网中,并将访问私有子网中的 ECS 集群
第 4 步:更新路由表
- 为公有子网和私有子网创建路由表,并将路由表分别关联到公有子网和私有子网。 (确保两者都选择正在使用的 VPC。)
- 对于公有子网路由表,添加路由以通过互联网网关引导所有出站流量 0.0.0.0/0。
- 私有子网暂时不会路由出站流量。
为 ECR 创建 VPC 终端节点
这将使 ECS 集群能够访问弹性容器注册表 (ECR)。
注意:将为 S3、ECR、DOCKER 和 CloudWatch 创建四个端点。
- 选择端点并单击创建端点。
- 命名端点并在服务 com.amazonaws.us-east-1.ecr.api 下搜索 ECR api 端点
- 选择我们一直使用的 VPC,这将显示子网选项,其中将选择我们的私有子网所在的可用区,然后最终选择我们的私有子网和默认安全组。
- 选择默认值并保留策略不变,然后创建 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 并创建目标组。
创建应用程序负载均衡器
- 在 EC2 控制台左侧,选择负载均衡器,然后选择创建负载均衡器。
- 选择创建应用程序负载均衡器,这将是一个面向互联网的负载均衡器。给 ALB 起一个名字。
- 在网络映射部分选择已创建的 VPC 以及两个可用区中的公有子网。
- 在侦听器和路由部分中,选择创建的目标组。 ALB 将监听端口:80 并转发到目标组。
- 创建 ALB。
创建任务定义
进入ECS控制台并选择任务定义。
步骤一:
- 命名任务定义系列
- 保留默认的基础架构要求不变,但您可以根据您的判断更改 vCPU 和内存。
第 2 步:对于 容器 1
- 给个名字
- 转到 ECR 并复制我们在本项目前面部分中推送的 docker 映像的 URI,然后返回到我们正在创建的任务定义的容器 1 部分,并将其粘贴到容器的映像 URI 中。
- 对于端口映射,将其设置为 5000,因为这是我们在 docker 容器中公开的端口并为其命名。 注意:端口映射与公开的 docker 端口相同非常重要
添加环境变量
这在该项目的 CI/CD 部分非常重要。但暂时会被跳过。继续跳过剩余部分并创建任务定义
创建 Fargate 集群和服务
为 ECS 服务创建安全组
- 转到左侧的安全组并选择创建安全组。为安全性提供名称和描述。
- 在端口范围 5000 上添加入站规则,源将是 Application Load Balancer 安全组。
步骤一:创建集群
- 转到集群选项卡并选择创建集群,这将带您进入集群配置页面。命名集群并确保在基础设施选项卡下仅选择 AWS Fargate(Serverless),然后创建集群。
第 2 步:创建服务
- 选择创建的集群,点击service下的create。
这将引导您进入一个新页面,您将在其中指定 Fargate 服务的配置。
- 滚动经过“环境”部分并移至“部署配置”。在这里,指定任务定义系列,它也会自动选择修订版。
选择要启动的所需任务数量。对于这个项目来说,一个就可以了。
滚动到网络选项卡并选择已创建的 VPC,然后选择私有子网
在负载均衡器部分中,选择负载均衡器类型作为应用程序负载均衡器,然后选择使用现有负载均衡器。这将显示在前面部分中创建的 ALB。选择它。
滚动你就会看到,听众。选择使用现有侦听器并选择那里的端口 80 侦听器,在目标组下执行相同操作,选择我们创建的现有目标组。
接下来是服务自动缩放。这是可选的,但对于必须根据定义的指标扩展到应用程序来说是一个很好的补充。启用此选项并指定要运行的任务的最小和最大数量。接下来添加扩展策略。对于此项目,Target 跟踪策略与 ALBrequestCountPerTarget ECS 服务指标一起使用,目标值为 50,横向扩展冷却时间和横向收缩冷却时间为 60 秒
创建服务。
创建服务后,将创建所需数量的任务。
在路线 53 中创建托管区域
如果遵循上述说明,您应该拥有一个功能齐全的网络应用程序,要访问它,请转到您的负载均衡器,复制 DNS 名称并粘贴到您的浏览器中。但这很乏味,而且没有使用最佳实践。理想情况下,ALB 或 CloudFront 前面应该有一个 Web 应用程序防火墙,但为了简单起见,我们将仅使用 Route 53。
注意:本部分要求您拥有 AWS 或任何其他提供商的注册域名
第 1 步:创建托管于
- 转到 Route 53 控制台。
- 在左侧选项卡上,选择托管区域。你应该拥有这个。
- 选择创建托管区域
- 输入您的域名并提供描述。将类型保留为公共托管区域并选择创建托管区域。
步骤 2:将 ALB DNS 名称添加到托管区域记录
- 转到您的 ALB 控制台并复制其 DNS 名称。
- 返回托管区域并选择创建记录。
- 默认记录类型是 A 记录,将使用该记录。
- 切换别名开关
- 在选择端点下,选择应用程序别名和经典负载均衡器
- 接下来,选择您启动负载均衡器的区域。在本例中为 us-east-1,确保它是您所在的区域。
- 从下拉菜单中选择您的负载均衡器。
- 创建记录。
这假设您在 AWS 拥有域名
恭喜!
如果您按照步骤进行操作,您应该拥有一个可通过您的域名访问的功能齐全的网络应用程序。
这是一个非常令人兴奋的项目,因为我与 VPC、私有和公有子网、VPC 端点、ECS 服务、ECR、目标组、安全组和应用程序负载均衡器一起工作,因为它们一起创建了这个网络 -应用程序。
以上是使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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