使用 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)

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

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

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

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

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

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

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

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