0

用例就像 - 開發人員進行一些代碼更改並且下面的事情自動發生 - 構建運行,創建應用程序工件,使用工件生成的docker圖像,將圖像推送到Docker註冊表,AWS ECS任務和ECS服務已更新。AWS ECS - 部署容器的方法

我想知道如何實現上述AWS ECS服務自動更新的方法。截至目前,我已經使用Jenkins構建實施了AWS ECS更新 -
1>從Jenkins運行構建AWS CLi腳本以更新ECS
2>構建後操作或管道步驟以調用AWS Lambda函數。我已經在Java中創建了一個Lambda函數來實現它。

請讓我以其他方式實現上述目標。謝謝。

+0

你只是想更新服務?如果是這樣的話:http://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html – Snarf

回答

1

我不斷將Docker容器從CircleCI部署到AWS ECS。

部署流程的概要如下:

  1. 構建和標記一個新的碼頭工人形象
  2. 登錄到AWS ECR,推動圖像ECS的
  3. 更新任務定義和服務ecs-deploy

ecs-deploy是一個有用的腳本,用於更新ECS中的Docker鏡像。

https://github.com/silinternational/ecs-deploy

0

雖然有很多的CI/CD工具在那裏,因爲我在我的早期推出,我決定寫一個小腳本,而不是有CI/CD管道這樣做。

這裏是一個一鍵部署腳本中,我使用ecs-deploy script作爲依賴,實現了泊塢窗圖像的滾動部署到ECS寫道。

您可以在開發或構建/部署框中本地運行此腳本,也可以使用Jenkins或本地構建工具。

#!/bin/bash 

# automatically login to AWS 
eval $(aws ecr get-login) 

# build local docker image and push repo to AWS 
docker build -t <yourlocaldockerimagetag> . 
docker tag <yourlocaldockerimagetag>:latest <yourECSRepoURL>:latest 
docker -D -l debug push <yourECSRepoURL>:latest 

# deploy to ECS 
ecs-deploy/ecs-deploy -m 50 -k <access-key> -s <secret-key> -r <aws-region> -c <cluster-name> -n <service-name> -i <yourECSRepoURL>:latest 

參數:

  • 集羣名:在ECS您的羣集名稱
  • 服務名稱:你曾在ECS
  • yourECSRepoURL創建您的服務名稱:ECS Repository URL
  • yourlocaldockerimagetag:任何地方形象的標籤名
  • 訪問鍵:爲部署
  • 您的AWS訪問鍵
  • 的密鑰:您的AWS密鑰

請務必在此之前安裝ecs-deploy腳本。

-m 50告訴它即使節點數量下降到50%也可以部署。理想情況下,您將有一個額外的節點來部署,但如果您無法負擔這種設置,這將確保部署繼續發生。

如果您還使用ELB(負載平衡器),則目標組的默認取消註冊延遲爲5分鐘,這有點過分。解除註冊延遲是等待現有請求完成的時間,然後ECS會向您的碼頭容器發送SIGTERM或SIGINT。您應該通過轉到EC2儀表板中的目標組來降低此值,然後單擊編輯屬性進行編輯。否則,您的部署可能會永遠存在。