1. 程式人生 > >AWS Fargate – 無伺服器化容器解決方案

AWS Fargate – 無伺服器化容器解決方案

AWS Fargate 是可以與 Amazon ECS結合使用的技術,讓您在執行容器時不需要管理伺服器或叢集。使用 AWS Fargate,你不需要搭建控制平面,只需選擇合適的例項型別,或配置應用程式堆疊的所有其它部分,比如網路、擴充套件、服務發現、負載均衡,安全組、許可權或金鑰管理。你只需要構建容器映象,定義希望它如何執行、在何處執行,併為實際需要的資源付費。Fargate天生與Amazon VPC、自動擴充套件(Auto Scaling)、彈性負載均衡(ELB)、身份及訪問管理(IAM)角色和金鑰管理整合起來。AWS花了很多時間讓Fargete隨時可用於生產環境,制定了確保正常執行時間達到99.99%的服務級別協議(SLA),符合支付卡行業資料安全標準(PCI)、服務組織控制(SOC)、ISO和《健康保險可攜性及責任性法案》(HIPAA)等法規或標準。

目前,Amazon ECS 具有兩種模式:Fargate 啟動型別和 EC2 啟動型別。如果使用 Fargate 啟動型別,您只需將應用程式打包到容器中,指定 CPU 和記憶體需求,選擇awsvpc網路模型和 IAM 策略,然後直接啟動應用程式。如果使用EC2 啟動型別,您可以對執行容器應用程式的基礎設施進行更精細的伺服器級控制。Amazon ECS負責跟蹤叢集中的所有 CPU、記憶體及其他資源,並根據您指定的資源要求查詢最適合執行容器的伺服器。無論你使用Kubernetes、Mesos、Rancher、Nomad、ECS還是其他任何系統,有了Fargate,唯一要管理的是僅僅是應用程式本身的邏輯。AWS Fargate終於讓容器在雲端計算的環境裡發揮地淋漓盡致。

本文所涉及到的內容主要是圍繞著AWS Fargate 啟動型別,我們將演示如何使用AWS Cloud9進行程式碼編輯和提交,配合CodeCommit、CodeBuild、CodePipeline、Amazon ECS,基於Fargate進行容器應用的持續整合和持續部署,對外暴露ALB負載均衡,Fargate與DynamoDB進行增刪改查等資料庫操作。

一、使用Fargate執行容器

Fargate可以自定義CPU和記憶體大小的計算資源,但不需要維護和管理底層的計算例項資源。接下來我們將使用Amazon ECS叢集,並用AWS Fargate啟動型別來執行容器。 點選: https://console.aws.amazon.com/ecs/home?region=us-east-1#/firstRun ,如下圖所示,一個ECS叢集可以啟動多個Service,一個Service可以定義多個Task Definition,一個Task裡面可以跑一個或者多個Container。

選擇現有的sample-app的模板,網路模型選擇awsvpc模式,在Task Definition中,你可以指定Task資源CPU和記憶體的大小。

在這裡,我們先不使用ALB負載均衡,後面的實驗中我們會加上這部分內容。

輸入叢集的名字,取名為workshop。稽核所有資訊之後啟動叢集。

等待幾分鐘時間,直至所有狀態都變成“complete”。

檢視Task狀態,從一開始的PROVISIONING,到PENDING,最後變成RUNNING狀態。

點選Task ID號: b956092f-4962-4342-bada-8e20802a6c44,在網路部分中可以看到網絡卡資訊、私有IP、公有IP,以及Mac地址。

在瀏覽器輸入公有IP地址,可以檢視到httpd所在的應用已經部署成功。

二、啟動Cloud9編碼和提交程式碼

Cloud9背後執行的環境是在一臺EC2上面的,VPC選擇之前啟動ECS叢集自動建立的VPC。

三、 建立容器映象倉庫(Docker Image Repository)

(1)建立容器倉庫Amazon ECR

輸入容器倉庫Amazon ECR的名字

(2)構建Docker映象,首先開啟Cloud9客戶端,下載程式碼

git clone https://github.com/TerrificMao/fargate-workshop-app.git

cd fargate-workshop-app/

(3)根據下載的Dockerfile構建成docker image

docker build — tag 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop .

(4)確認構建的image是否成功

docker images 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

(5)建立DynamoDB表,Table name取名為quotes,Primary partition key取名為ID。

(6)測試生成的docker image

首先安裝 jq,jq 是一款命令列下處理 JSON 資料的開軟軟體,我們將用它檢視返回結果。

sudo yum install -y jq

–detach代表容器將會執行在後臺模式,–publish指定容器暴露80埠,–volume將AWS配置掛載到容器,使得應用可以訪問AWS credentials,最後是docker映象的地址,在前面建立Amazon ECR時生成。

docker run –detach –publish 80:80 –volume $HOME/.aws:/root/.aws \

556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

(7)測試應用

curl -Ss http://127.0.0.1/ | jq

(8)列出所有DynamoDB資料庫裡面的內容,此時顯示是空的,因為裡面還沒有資料。

curl -Ss http://127.0.0.1/quotes | jq

(9)往DynamoDB裡面增加一條資料

curl -Ss http://127.0.0.1/quotes -X PUT -H “Content-Type: application/json” -d ‘{“Text”:”AWS Fargate workshop demo on AWS Global Virginia region,”,”AttributedTo”:”AWS China”}’

(10)再次列出所有資料庫裡面的內容,可以顯示內容了

curl -Ss http://127.0.0.1/quotes | jq

四. 將docker image推送至AWS ECR

首先登入到ecr

aws ecr get-login –no-include-email –region us-east-1

使用docker push推送

docker push 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

五、建立Task Definition

(1)首先建立所需的AWS Role,選擇Elastic Container Service,再選擇Elastic Container Service Task,

(2)選擇“建立策略”

(3)配置Fargate訪問DynamoDB時所需的策略。

(4)輸入名字“WorkshopAppPolicy”,Policy建立成功

(5)建立Task Definitions

(6)選擇Fargate啟動型別

(7)選擇Task memory (GB),比如0.5GB;選擇Task CPU (vCPU),比如0.25vCPU。然後選擇“Add container”。

(8)點選“Add Container”,增加一個自定義容器,輸入具體資訊

點選“Create”

(9)使用自定義的docker image,增加container成功。

六、建立應用層負載均衡ALB

(1)選擇應用層負載均衡ALB

(2)輸入Load Balancer的名字“workshop”,選擇對應的VPC。

(3)建立ALB的安全組

(4)由於Fargate底層不需要考慮計算資源,所以Target Type不需要選擇instance,而是選擇ip。

(5)註冊Targets這塊先不選擇,可以利用ECS為我們去管理Target Group。

(6)ALB建立成功,記錄DNS Name,比如: workshop-1435838475.us-east-1.elb.amazonaws.com

七、建立services選擇Fargate啟動型別

現在之前建立的VPC和對應的子網,並啟動自動分配IP。

配置ALB負載均衡,配置偵聽埠和Target Group。

暫時不選Auto Scaling

啟動成功

使用命令列檢查負載均衡器是否生效

curl -Ss http://workshop-1435838475.us-east-1.elb.amazonaws.com/quotes | jq

在瀏覽器輸入ALB公網域名地址,可以通過Container查詢到DynamoDB裡面的內容。

或者可以選擇常用的Postman進行除錯

使用HTTP PUT方式,新增一條資訊,插入到DynamoDB

檢視HTTP PUT的執行結果

再次檢視結果

從控制檯檢查DynamoDB中的內容

至此,Amazon ECS採用Fargate啟動型別,已經在VPC內部部署了Container應用,Container對外暴露了ALB負載均衡地址,應用和DynaomDB資料庫完成了互動,應用可以通過負載均衡直接對外訪問。接下去,我們將介紹如何利用AWS開發運維相關的服務,基於Container進行持續整合和持續部署的方案。

八、基於容器的持續整合/持續部署方案

接下來我們將採用CodeCommmit託管程式碼,CodeBuild進行容器應用的構建,利用Amazon ECS進行容器編排排程和部署。整個流程如下所示

首先建立CodeCommit程式碼倉庫,取名workshop

Event type可以先不填寫。

利用命令列將程式碼推送到CodeCommit

git config –global credential.helper ‘!aws codecommit credential-helper [email protected]

git config –global credential.UseHttpPath true

git remote set-url origin https://git-codecommit.us-east-1.amazonaws.com/v1/repos/workshop

git push origin master

重新整理AWS CodeCommit的控制檯,發現程式碼已經上傳。

接下去建立CodePipeline。在建立CodePipeline之前,先建立所需要的Role,選擇CodeBuild。

複製如下Policy的內容,注意將resource內容替換成自己Account ID。

{

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CompleteLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:us-east-1:556776719183:repository/workshop"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        }
    ]
}
輸入policy的名字WorkshopBuildPolicy

當然,在測試階段,可以賦予一個Admin的許可權。(選做)

接著建立CodePipeline

配置CodeBuild

配置CodeBuild的環境變數,Name: REPOSITORY_URI,Value: 556776719183.dkr.ecr.us-east-1.amazonaws.com/workshop

看到保持成功資訊,接著點選“下一步”。Build provider選擇AWS CodeBuild進行構建。

部署方式選擇Amazon ECS,輸入之前建立的叢集名字workshop以及Service名字。

至此,CodePipeline建立完畢。

客戶端更改程式碼

推送至AWS CodeCommit倉庫

CodePipeline自動檢測到程式碼更新

自動進入到程式碼構建階段

自動使用Amazon ECS部署Fargate

不到一杯咖啡的時間,通過CodePipeline自動完成整個過程。

通過Postman測試新增加的delete方法,首先使用HTTP PUT新增一條記錄到DynamoDB。

檢視HTTP GET剛剛插入的裡面的資料,記錄返回的ID號: 46311760-3ac9-11e8-82b5-9ba0642ae25e。ID是DynamoDB資料庫的主鍵,根據主鍵進行HTTP DELETE測試。

執行HTTP DELETE介面

重新整理DynamoDB控制檯

此時記錄被成功刪除。

至此,通過CodeCommit, CodeBuild, CodePipeline, Amazon ECS在Fargate中部署的程式碼已經生效,對外暴露負載均衡AWS ALB,併成功與DynamoDB資料庫完成了增刪改查等基本操作。整個流程大致如下。

附: 解決微服務系統的服務發現,可以基於ECS + Route53方案,請參考:

相關推薦

AWS Fargate伺服器容器解決方案

AWS Fargate 是可以與 Amazon ECS結合使用的技術,讓您在執行容器時不需要管理伺服器或叢集。使用 AWS Fargate,你不需要搭建控制平面,只需選擇合適的例項型別,或配置應用程式堆疊的所有其它部分,比如網路、擴充套件、服務發現、負載均衡,安全組、許可權或金鑰管理。你只需

AZURE ACI -- 服務器容器解決方案

rim ubuntu mar nat 收費 page out 結果 fin 標題很對仗,目的很明確,蹭熱度!!!前天看了 A 站的童鞋搞了一個,今兒我換個姿勢用軟 A 也搞一個。Azure Container Instance 服務是一種無服務器化的容器解決

開發版速達光耀-公網IP伺服器訪問整體解決方案

一. 雲伺服器部署 如果不是機密內部系統,上雲應該是首首選,具體可以看看文章: https://www.cnblogs.com/devsuperdata/p/9944125.html 租用阿里雲、百度雲、華為雲、騰訊雲、京東雲伺服器,伺服器費用一般在1200 至 6000,看伺服器配置,速達軟體建議2核

前端模塊開發解決方案詳解

暴露 可見 返回 異步加載 def 今天 htm 硬盤 業務邏輯 一、模塊化開發方案 前端發展到今天,已經有不少模塊化的方案,比如 CommonJS(常用在服務器端,同步的,如nodejs) AMD(常用在瀏覽器端,異步的,如requirejs)(Asynchronous

TNS-12541: TNS: 監聽程式 解決方案

轉自   感謝   https://www.cnblogs.com/yx007/p/6732012.html 問題描述 在用PL/SQL Developer連線Oracle 11g時報錯“ORA-12541: TNS: 無監聽程式”,如下圖所示。可以按照如下的步驟進

VS2013新建asp.net空網站專案失敗,配置IISexpress失敗,未能找到web伺服器“http://localhost”解決方案

前兩天用vs2013新建asp.net空網站時失敗了出現這個問題: 於是我上網搜尋關鍵字“配置IISexpress失敗,未能找到web伺服器“http://localhost”,結果是這樣滴 並沒有我這個問題的解決辦法,然後我就只能死馬當活馬醫,隨便試試了,說不定就好了呢。有一個

spring security oauth2 授權伺服器負載均衡解決方案

1.引言 本文所講的內容是以spring security oauth2 與 spring cloud 為基礎的,在微服務的構建中,將授權伺服器註冊在eureka上面。當客戶端訪問資源伺服器的時候必須攜帶token進行認證和授權。如果我們在資源伺服器上直接硬編碼授權伺服器地

Hibernate類沒有找到序列解決方案

Hibernate類沒有找到序列化器解決方案 異常資訊類似如下 No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discov

canal 修改mysql資料後Java客戶端反應的問題解決方案

canal官方文件可以點選這裡檢視。 按照官網的教程完成配置後會發現,在修改mysql時java客戶端還是沒有反應。暫時發現有以下兩種原因: 1.需要修改canal.properties配置,但是官網沒有講解。(大概率) 進入canal解壓檔案 ,編輯conf/canal.prope

ltelliJ IDEA 建立Maven web專案src目錄的解決方案

一、緣由 這幾天閒來無事,突然想試試IDEA這個編譯器,之前一直都在用Eclipse 和 Myeclipse。下好滿懷期待建了個Maven專案後,還在載入init就去吃飯了,半小時回來後,居然發現沒有Src標準目錄結構。這不能忍了,原來Maven資源一直還在載入,國內網無

使用宣告式啟動job任務時報JobInitializationPlugin或XMLSchedulingDataProcessorPlugin例項失敗 解決方案

org.quartz.SchedulerException: SchedulerPlugin class 'org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin' could not be instantiated. [See nested excep

系統技術非業餘研究 » Erlang版TCP伺服器對抗攻擊解決方案

網際網路上的TCP伺服器面對的環境情況比企業私有的伺服器要複雜很多。常見的針對tcp伺服器的攻擊有以下幾種: 1. 偽造協議,導致伺服器crash. 比如說某條命令的欄位長度,協議最大規定是1024,偽造個4096的。 2. 偽造大的報文,比如說一個包有1024M這麼大。 3. 消耗伺服器資源。開

AWS 上設計多區域 SaaS 解決方案

軟體即服務 (SaaS) 組織不斷髮展,其全球業務覆蓋範圍也不斷擴大,與此同時,他們必須考慮更廣闊的地理覆蓋範圍會對其系統架構產生怎樣的影響。遷移到地理位置分散的 SaaS 模型可能會對運營、部署、敏捷性、安全性和擴充套件等方面產生影響。 這種朝著多區域模式轉變的趨勢通常代表

InfluxDB1.2之後版本web介面問題解決方案

很多剛接觸InfluxDB的朋友都會問為啥web介面打不開,因為從1.3版開始InfluxDB官方就把web介面給取消了,網上說有解決方案能開啟,但是我一直沒弄好,所以這個暫且不說。有些朋友剛開始接觸的時候從1.3之後的,說是Chronograf可以提供更豐富的

無法連線到伺服器的錯誤解決方案

  機房收費系統進入埠的時候,前幾次明明好了,可是第三次開啟電腦的時候說什麼也連線不上了! 進入登陸窗體,系統登陸顯示未未響應! 看資料庫告訴你,無法遠端連線!(這叫讓人一個惱火!可是惱火沒有用啊,在提高班沒培養出啥來,遇到問題不慌不亂,習以為常倒是真的!方法總比困難多

fastJson對mongodb的Id序列失敗解決方案

1.今天遇見fastJson對mongodb的ID序列化失去精度的問題,今天講解下,並解決 如:id : 5baf10e781d589000175c5cd fastJson裝換後變成: 2.為題分析 首先是出現serializers裡面並沒有mongodb的Obj

更密集伺服器的電源解決方案

       在計算機伺服器的設計中,密度已經成為一個至關重要的因素。摩爾定律使得將多個高效能的核心放在一個系統晶片(SoC)裝置和支援邏輯上成為可能。高密度現場可程式設計門陣列(fpga)為應用加速和整合提供了進一步的可能性。  結果是在系統內的每個邏輯板上部署多個高效能的

Xcode10出現代碼提示、無色解決方案

eve 文件夾 command ive dev cache library 路徑 方案 1.Command+Q退出Xcode 2.重啟電腦 3.刪除DerivedData文件夾(路徑: ~/Library/Developer/Xcode/DerivedData) 4.刪除c

EasyNVR H5外掛攝像機直播解決方案前端解析之:監控實時直播的四分屏的前端展示

完成執行效果圖: 一、四分屏展示樣式佈局 1.通過html、css等來進行樣式排版 根據需求的四分屏的樣式;來合理的劃分出四個大塊,分別用於放置四個播放器; 以四等分結構為例進行前端的排版; html樣式佈局: <d

mac電腦iTerm2連結linux伺服器斷線解決方案

問題 用windows連結linux伺服器,方式很多,我最經常用的是xshell。但是xshell沒有mac版,那用mac電腦,比較好的命令列軟體是什麼呢?我用的是iTerm2 ,這個功能確實蠻強大,很多人都在用。但是,你用iTerm2 連結遠端linux伺服器,假如你