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

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

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

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

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

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

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

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

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


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具