首頁 後端開發 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)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles