使用藍色/綠色策略和AWS Lambda 執行以規範為基礎的部署 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用藍色/綠色策略和AWS Lambda 執行以規範為基礎的部署

由拉朱班納吉(AWS)創作

建立者:AWS

:Enveronment ( PoC 或試驗

技術:DevOps

AWS 服務:AWS CodeDeploy

Summary

此模式會引導您完成使用 AWS CodeDeploy 設定以規範為基礎的藍綠部署的步驟。CodeDeploy 是一項全受管部署服務,可自動將軟體部署至各種運算服務,例如 Amazon Elastic Compute Cloud (Amazon EC2)、AWS Lambda 和現場部署伺服器。手動將應用程式部署到伺服器可能需要很長的時間,而且通常會導致錯誤導致停機。

金絲雀部署的目的是降低部署影響工作負載的新版本的風險。此模式涵蓋的方法會逐步部署新版本,讓新使用者以緩慢的方式看到新版本。當您對部署充滿信心時,您可以部署它來取代整個目前的版本。

通過遵循這種模式,你可以測試新舊應用程序版本。您可以使用 AWS 雲端原生工具,無需維護單獨的部署工具,也無需額外的 Amazon EC2 機器成本。該模式支援 AWS Identity and Access Management (IAM) 身份驗證與稽核功能,該功能可使用 AWS CloudTrail 管理使用者活動。

先決條件和限制

先決條件

  • 應用程式,具有 AppSpec 檔案中定義的程式碼

  • 作用中的 AWS 帳戶

  • 虛擬私有雲端 (VPC)

  • Amazon EC2 Auto Scaling 群組

  • key pair (選擇性)

  • IAM 角色

  • Amazon Simple Notification Service (Amazon SNS) 主題

限制

  • 舊版本的代碼將不提供自動縮放功能。

  • 清理舊環境將需要一個單獨的 Lambda 函數。或者,等候 48 小時,依預設會清除環境。

Architecture

目標技術堆疊

  • Amazon CloudWatch Events

  • IAM

  • Amazon SNS

  • AWS CodeBuild

  • AWS CodeDeploy

  • Amazon EC2

  • Application Load Balancer

  • AWS Lambda

目標架構

Auto Scaling 和擴展

AWS CloudFormation 可用來自動建立基礎設施。

可以使用 Python (Boto) 指令碼和環境的標籤來自動化試驗環境的清理。

Tools

工具

  • AWS CodeBuild— AWS CodeBuild 是在雲端的全受管組建服務。CodeBuild 可編譯原始碼、執行單位測試,並產生可立即部署的成品。

  • AWS CodeDeploy— AWS CodeDeploy 是一項部署服務,可自動將應用程式部署至 EC2 執行個體、現場部署執行個體、無伺服器 Lambda 函數,或 Amazon ECS) 服務。您不需要先變更現有的程式碼,才能使用 CodeDeploy。

  • AWS Lambda— AWS Lambda 是一項運算服務,可讓您執行程式碼,無需佈建或管理伺服器。

  • AWS SNS— Amazon SNS 是一項 Web 服務,可協調與管理訂閱端點或用戶端的訊息交付或傳送。訂閱者 (包括 Lambda 函數) 訂閱主題時,其將透過任一種支援的通訊協定取用或接收訊息或通知。

  • 啟動範本— 啟動範本會指定執行個體組態資訊。內含 Amazon Machine Image (AMI) 的 ID、執行個體類型、金鑰對、安全群組,以及您用來啟動 EC2 執行個體的其他參數。

Code

Lambda 函數的 Python 程式碼

import boto3 client = boto3.client('codedeploy') clientasg = boto3.client('autoscaling') autosg =[]  def lambda_handler(event, context): #Define the code-deploy related parameters here or pass it using lambda parameters.     codedeployappname="pattern-test"     codedeploymentgroup="pattern-testing"     albtargetgrouparn="arn:aws:elasticloadbalancing:us-east-1:************:targetgroup/green-target-group/0614b53e*******"       response = client.list_deployments(         applicationName=codedeployappname,         deploymentGroupName=codedeploymentgroup,         includeOnlyStatuses=[             'Succeeded',         ],     )  #Get the latest deployment event and fetch the id and ignore any autoscale events.     for i in range (len(response['deployments'])):         response3 = client.get_deployment(         deploymentId=(response['deployments'][i])     )         type01=(response3['deploymentInfo']['creator'])         if type01 == 'user':             deploymentinfo=(response['deployments'][i])               response4 = client.get_deployment(deploymentId=response['deployments'][i])             response5 = response4['deploymentInfo']['targetInstances']['autoScalingGroups'][0]             autosg.append(response5)     print (autosg[1])       response = clientasg.attach_load_balancer_target_groups(         AutoScalingGroupName=autosg[1],         TargetGroupARNs=[             albtargetgrouparn,         ]         )

Epics

任務描述所需技能
建立 AMI。

第一個版本的部署完成後,請建立 EC2 執行個體的 AMI。

雲端管理員
建立啟動範本。

建立用於設定應用程式的 Auto Scaling 群組的範本。啟動範本會使用您在第一個任務中建立的 AMI 的 AMI ID。如需有關這個和其他史詩中所述的命令和步驟的詳細資訊,請參閱本模式結尾的 < 相關資源 > 一節。

雲端管理員
設定 Auto Scaling。

使用啟動範本建立「Auto Scaling」群組。

雲端管理員
任務描述所需技能
為 Application Load Balancer 建立目標群組。

建立兩個目標群組:藍色目標群組和綠色目標群組。

雲端管理員
建立 Application Load Balancer。

若要在藍色和綠色環境之間平均分割流量,請將轉寄動作新增至接聽程式。您也可以啟用群組層級黏性以維護工作階段。如果目標群組是黏性的,路由至該目標群組的要求會在階段作業期間保留在該目標群組中。粘性的持續期間可以介於 1 秒到 7 天之間。

雲端管理員
任務描述所需技能
建立服務角色。

如果您是第一次設定 CodeDeploy,則必須建立 IAM 角色,以便 CodeDeploy 可以擔任該角色並執行作業。

雲端管理員
建立應用程式

選擇「部署」以開始建立應用程式。提供應用程式的名稱,然後選擇「EC2/ 現場部署」。

雲端管理員
建立部署群組。

在應用程式頁面上,使用與應用程式相同的名稱建立部署群組。

雲端管理員
設定部署群組。

在「服務角色」下,選擇您在第一個工作中建立的服務角色。在「部署類型」之下,選擇「藍色/綠色」。在「環境組態」之下,選擇「自動複製 Amazon EC2 Auto Scaling 群組」。在「部署設定」之下,選擇「立即重新路由流量」。如果您的測試時間需要兩天以上,請選擇「保持部署群組中的原始執行個體在執行」。

雲端管理員
指定 Application Load Balancer 的目標群組。

在「負載平衡器」下,選擇您建立的藍色目標群組。

雲端管理員
設定部署觸發。

展開「進階-選擇性」區段,然後選擇「建立觸發程序」。輸入名稱。在「事件」欄位中,選擇「部署成功」,然後選擇 SNS 主題。

雲端管理員
任務描述所需技能
建立新的 IAM 角色。

建立具有更新 Auto Scaling 群組和將記錄寫入 CloudWatch 的權限的 IAM 角色。

雲端管理員
建立 Lambda 函數。

在「執行時間」之下,選擇最新版本的 Python。

雲端管理員
設定 Lambda 函數。

使用此模式的「程式碼」區段中的 Python 程式碼來更新函式。對於觸發程序來源,請使用您在設定 CodeDeploy 部署群組時所使用的相同 SNS 主題。

雲端管理員
任務描述所需技能
清理自動調整比例環境。

從 CodeDeploy 主控台複製部署識別碼,並使用它來搜尋與該識別碼相關聯的 Auto Scaling 群組。刪除擴展群組以清除與此設定相關聯的所有 EC2 執行個體。

雲端管理員
刪除負載平衡器和目標群組。

雲端管理員
刪除 Lambda 函數。

刪除 Lambda 函數,除非您計劃稍後將其用於其他用途。

雲端管理員

建立負載平衡器

設定 Auto Scaling 群組

設定 CodeDeploy

其他參考