搜尋
首頁後端開發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
Python中的合併列表:選擇正確的方法Python中的合併列表:選擇正確的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入兩個列表?如何在Python 3中加入兩個列表?May 14, 2025 am 12:09 AM

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

Python串聯列表字符串Python串聯列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

Python執行,那是什麼?Python執行,那是什麼?May 14, 2025 am 12:06 AM

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python:關鍵功能是什麼Python:關鍵功能是什麼May 14, 2025 am 12:02 AM

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python:編譯器還是解釋器?Python:編譯器還是解釋器?May 13, 2025 am 12:10 AM

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

python用於循環與循環時:何時使用哪個?python用於循環與循環時:何時使用哪個?May 13, 2025 am 12:07 AM

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

Python循環:最常見的錯誤Python循環:最常見的錯誤May 13, 2025 am 12:07 AM

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具