首頁 > 後端開發 > Python教學 > 使用 CI/CD 將基於 Flask 的入侵偵測系統部署到 AWS ECS

使用 CI/CD 將基於 Flask 的入侵偵測系統部署到 AWS ECS

Barbara Streisand
發布: 2024-11-25 12:05:12
原創
697 人瀏覽過

介紹

在這篇文章中,我將引導您完成在 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板