

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

# 使用自動化工作流程簡化 Amazon Lex 機器人開發和部署
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam、Attila Dancso、Pavan Dusanapudi、Anand Jumnani 和 Amazon Web Services 的 James O'Hara*

## 總結
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

當您嘗試管理多個功能、開發人員和環境時，開發和部署 Amazon Lex 對話式機器人可能具有挑戰性。使用基礎設施即程式碼 (IaC) 原則的自動化工作流程有助於簡化程序。此模式有助於提高 Amazon Lex 開發人員的生產力，並透過下列方式實現高效率的機器人生命週期管理：
+ **啟用並行開發多個功能** - 透過自動化工作流程，開發人員可以在不同的分支中平行處理不同的功能。然後，可以合併和部署變更，而不會封鎖其他工作。
+ **使用 Amazon Lex 主控台 UI** - 開發人員可以使用易於使用的 Amazon Lex 主控台來建置和測試機器人。然後，機器人會在用於部署的基礎設施程式碼中描述。
+ **跨環境提升機器人** - 工作流程會自動從開發和測試等較低環境提升機器人版本，直到生產。此方法可降低手動提升的風險和額外負荷。
+ **維護版本控制** - 在 Git 中管理機器人定義，而不是僅透過 Amazon Lex 服務為您提供版本控制和稽核線索。與僅使用 AWS 管理主控台 或 APIs 修改存放在其中的機器人不同，變更會追蹤到個別開發人員 AWS。

透過自動化 Amazon Lex 機器人發行程序，團隊可以更快地提供功能，同時降低風險和精力。機器人保持在版本控制下，而不是在 Amazon Lex 主控台中隔離。

## 先決條件和限制
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**先決條件 **
+ 工作流程 AWS 帳戶 針對不同的環境 （開發、生產和 DevOps) 涉及多個 ，這需要帳戶管理和跨帳戶存取組態。
+ Python 3.9 可在您的部署環境或管道中使用。
+ 在本機工作站上安裝[https://git-scm.com/book/en/v2/Getting-Started-Installing-Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)和設定 Git 以進行來源控制。
+ AWS Command Line Interface (AWS CLI) [已安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)並設定為使用命令列或 Python 進行身分驗證。

**限制 **
+ **儲存庫存取** – 工作流程假設持續整合和持續交付 (CI/CD) 管道具有將變更遞交至原始程式碼儲存庫的必要許可。
+ **初始機器人版本** – 工具要求使用 AWS CloudFormation 範本部署機器人的初始版本。您必須建立機器人的第一次反覆運算，並將其遞交至儲存庫，自動化工作流程才能接管。
+ **合併衝突** – 雖然工作流程旨在啟用並行開發，但在整合來自不同分支的變更時，仍有可能發生合併衝突。解決機器人組態中的衝突可能需要手動介入。

**產品版本**
+ [Python 3.9](https://www.python.org/downloads/) 或更新版本
+ [AWS CDK v2 2.124.0](https://docs.aws.amazon.com/cdk/api/versions.html) 或更新版本
+ [適用於 Python (Boto3) 的 AWS SDK](https://docs.aws.amazon.com/pythonsdk/)1.28 或更新版本

## Architecture
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

下圖顯示解決方案的高階架構和關鍵元件。

![\[自動化 Amazon Lex 機器人開發和部署的工作流程。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


主要元件包括下列項目：
+ **Lex 機器人儲存庫** – 存放 Amazon Lex 機器人 IaC 定義的 Git 儲存庫。
+ **DevOps** – AWS 帳戶 專用於容納 CI/CD 管道和開發和部署程序的相關資源。
+ **管道** – 自動化機器人開發和部署生命週期各種階段的 AWS CodePipeline 執行個體，例如建立新的機器人、匯出機器人的定義、匯入機器人定義，以及刪除機器人。
+ **票證機器人和主要機器人** – Amazon Lex 機器人資源，其中票證機器人是由個別團隊或開發人員開發的特定功能機器人，而主要機器人是整合所有功能的基準機器人。

架構圖說明下列工作流程：

1. **基準主要機器人** – 工作流程的起點是在開發 (Dev) 環境中基準化主要機器人。主要機器人是未來開發和功能新增的基礎。

1. **建立票證機器人** – 需要新功能或變更時，會建立票證機器人。票證機器人基本上是開發人員可以處理的主要機器人複本或分支，而不會影響主要版本。

1. **匯出票證機器人** - 處理票證機器人完成後，它會從 Amazon Lex 服務匯出。然後，包含票證機器人的分支會從主分支重新建立基礎。此步驟可確保在票證機器人開發期間對主要機器人所做的任何變更都已納入，以減少潛在的衝突。

1. **匯入以重新為基礎的票證機器人並進行驗證** – 以重新為基礎的票證機器人會匯入到開發環境並進行驗證，以確保其與主分支的最新變更一起正常運作。如果驗證成功，則會建立提取請求 (PR)，將票證機器人變更合併到主分支。

1. **刪除票證機器人** – 變更成功合併到主分支後，不再需要票證機器人。您可以刪除票證機器人，以保持環境乾淨且可管理。

1. 將**主要機器人部署到開發環境並測試** – 更新的主要機器人現在包括新功能或變更，已部署到開發環境。在這裡，它會進行徹底的測試，以確保所有功能都能如預期般運作。

1. 將**主要機器人部署到生產環境中** – 在開發環境中測試完成且成功之後，主要機器人會部署到生產環境。此步驟是工作流程的最後階段，其中新功能可供最終使用者使用。

**自動化和擴展**

自動化工作流程可讓開發人員平行處理不同的功能，每個功能都位於不同的分支中。這有助於並行開發，使團隊能夠有效地協作並更快地交付功能。在分支彼此隔離的情況下，可以合併和部署變更，而不會封鎖或干擾其他進行中的工作。

工作流程可自動化機器人版本在不同環境中的部署和提升，例如開發、測試和生產。

在 Git 等版本控制系統中存放機器人定義可提供全面的稽核線索，並實現高效的協同合作。系統會追蹤個別開發人員的變更，確保整個開發生命週期的透明度和責任。這種方法也有助於程式碼檢閱，讓團隊在部署到生產環境之前識別和解決問題。

透過使用 AWS CodePipeline 和其他 AWS 服務，自動化工作流程可以擴展以適應不斷增加的工作負載和團隊規模。

## 工具
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**AWS 服務**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) 是一種開放原始碼軟體開發架構，可透過使用熟悉的程式設計語言並佈建來定義程式碼中的 AWS 雲端 基礎設施 CloudFormation。此模式中的範例實作使用 Python。
+ [AWS CDK 命令列界面 (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) - Toolkit AWS CDK 是與您的 AWS CDK 應用程式互動的主要工具。它會執行您的應用程式、查詢您定義的應用程式模型，以及產生和部署 CDK 產生的 CloudFormation 範本。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可協助您設定 AWS 資源、快速且一致地佈建資源，以及在整個 AWS 帳戶 和 生命週期中管理資源 AWS 區域。此模式使用 CloudFormation，使用基礎設施做為程式碼來部署 Amazon Lex 機器人組態和相關資源。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 是一種全受管建置服務，可協助您編譯原始程式碼、執行單元測試，並產生準備好部署的成品。此模式使用 CodeBuild 來建置和封裝部署成品。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可協助您快速建模和設定軟體版本的不同階段，並自動化持續發行軟體變更所需的步驟。此模式使用 CodePipeline 來協調持續交付管道。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一種開放原始碼工具，可協助您AWS 服務 透過命令列 shell 中的命令與 互動。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一項運算服務，可協助您執行程式碼，無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展，因此您只需支付使用的運算時間。
+ [Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) 是 AWS 服務 ，用於使用語音和文字為應用程式建置對話介面 （機器人）。
+ [適用於 Python (Boto3) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) 是一種軟體開發套件，可協助您整合 Python 應用程式、程式庫或指令碼 AWS 服務。

**其他工具**
+ [Git](https://git-scm.com/docs) 是一種開放原始碼分散式版本控制系統。

**程式碼儲存庫**

此模式的程式碼可在 GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex) 儲存庫中使用。程式碼儲存庫包含下列資料夾和檔案：
+ `prerequisite` 資料夾 – 包含設定所需資源和環境的 CloudFormation 堆疊定義 （使用 AWS CDK)。
+ `prerequisite/lexmgmtworkflow` 資料夾 – Lex 管理工作流程專案的主要目錄，包括堆疊定義和 Python 程式碼。
+ `prerequisite/tests` – 包含單元測試。
+ `src` 資料夾 – 原始程式碼目錄，包括 Amazon Lex 機器人管理包裝函式和公用程式。
+ `src/dialogue_lambda` – 對話掛鉤 Lambda 函數的原始程式碼目錄，可在與 Amazon Lex 機器人的對話期間攔截和處理使用者輸入。

## 最佳實務
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **分離問題**
  + 在 DevOps、開發和生產環境之間保持明確的責任分離。
  + 針對 AWS 帳戶 每個環境使用單獨的 ，以強制執行適當的隔離和安全性界限。
  + 使用跨帳戶角色和最低權限存取原則，以確保環境之間的受控制存取。
+ **基礎設施即程式碼**
  + 定期檢閱和更新基礎設施程式碼，以符合最佳實務和不斷變化的需求。
  + 為原始程式碼儲存庫建立明確的分支和合併策略
+ **測試和驗證**
  + 在管道的各個階段實作自動化測試，以在開發週期的早期發現問題。
  + 使用 Amazon Lex 主控台或自動測試架構來驗證機器人組態和功能，然後再提升到更高的環境。
  + 考慮為部署到生產環境或關鍵環境實作手動核准閘道。
+ **監控和記錄 **
  + 設定管道、部署和機器人互動的監控和記錄機制。
  + 監控管道事件、部署狀態和機器人效能指標，以快速識別和解決問題。
  + 使用 Amazon CloudWatch 等 AWS 服務 AWS CloudTrail，以及 AWS X-Ray 進行集中式記錄和監控。
  + 定期檢閱和分析自動化工作流程的效能、效率和有效性。
+ **安全性與合規**
  + 實作安全編碼實務，並遵循 Amazon Lex 機器人開發和部署 AWS 的安全最佳實務。
  + 定期檢閱和更新 IAM 角色、政策和許可，以符合最低權限原則。
  + 考慮將安全掃描和合規檢查整合到管道中。

## 史詩
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### 設定 Amazon Lex 機器人管理的 IaC
<a name="set-up-iac-for-lex2-bot-management"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定本機 CDK 環境。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| 在 `devops` 環境中建立跨帳戶角色。 | `devops` 帳戶負責託管和管理 CI/CD 管道。若要讓 CI/CD 管道與 `dev`和 `prod`環境互動，請執行下列命令以在`devops`帳戶中建立跨帳戶角色。<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| 在 `dev` 環境中建立跨帳戶角色。 | 在`dev`帳戶中建立具有必要許可的 IAM 角色，以允許`devops`帳戶擔任此角色。CI/CD 管道會使用此角色在`dev`帳戶中執行動作，例如部署和管理 Amazon Lex 機器人資源。若要建立 IAM 角色，請執行下列命令：<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| 在 `prod` 環境中建立跨帳戶角色。 | 在`prod`帳戶中建立具有必要許可的 IAM 角色，以允許`devops`帳戶擔任此角色。CI/CD 管道會使用此角色在`prod`帳戶中執行動作，例如部署和管理 Amazon Lex 機器人資源。<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| 在 `devops` 環境中建立管道。 | 若要管理 Amazon Lex 機器人的開發工作流程，請執行下列命令以在`devops`環境中設定管道 。<pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### 建立主要機器人的基準
<a name="establish-the-baseline-for-the-main-bot"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 定義主要機器人的初始版本。 | 若要定義主要機器人的初始版本，請[觸發](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers)`BaselineBotPipeline`管道。管道會部署 CloudFormation 範本中定義的基本機器人定義，將主要機器人定義匯出為 .json 檔案。 並將主要機器人程式碼存放在版本控制系統中。 | AWS DevOps | 

### 實作功能開發工作流程
<a name="implement-the-feature-development-workflow"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立票證機器人以開發和測試功能。 | `TicketBot` 是從功能分支中現有主要機器人定義匯入的新機器人執行個體。此方法可確保新機器人具有主機器人的所有目前功能和組態。若要定義票證機器人的初始版本，請觸發`CreateTicketBotPipeline`管道。管道會在版本控制系統中建立新的功能分支，並根據主要機器人建立新的票證機器人執行個體。 | Lex Bot 開發人員 | 
| 開發和測試票證機器人功能。 | 若要開發和測試此功能，請登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/) 的 Amazon Lex 主控台。如需詳細資訊，請參閱《Amazon Lex 文件》中的[使用主控台測試機器人](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html)。使用`TicketBot`執行個體，您現在可以新增、修改或擴展機器人的功能，以實作新功能。例如，您可以建立或修改意圖、表達用語、槽和對話方塊流程。如需詳細資訊，請參閱 Amazon Lex 文件中的[新增意圖](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html)。 | Lex Bot 開發人員 | 
| 匯出票證機器人定義。 | 匯出的機器人定義基本上是以 JSON 格式呈現機器人的組態和功能。若要匯出票證機器人定義，請觸發`ExportTicketBotPipeline`管道。管道會將票證機器人定義匯出為 .json 檔案，並將票證機器人程式碼存放在版本控制系統中的功能分支中。 | Lex Bot 開發人員 | 
| 從最新的主分支重新建立特徵分支的基礎。 | 在開發新功能期間，主要分支可能已收到來自不同開發人員或團隊的其他變更。若要將這些變更納入功能分支，請執行 Git `rebase`操作。此操作基本上會在來自主分支的最新遞交之上，從特徵分支重播遞交，以確保特徵分支包含所有最新的變更 | Lex Bot 開發人員 | 
| 匯入和驗證以重新為基礎的票證機器人。 | 重新建立特徵分支的基礎之後，您必須將其匯入票證機器人執行個體。此匯入會使用重新為基礎的分支的最新變更來更新現有的票證機器人。若要匯入以重新為基礎的票證機器人，請觸發`ImportTicketBotPipeline`管道。管道會將版本控制系統中特徵分支中的票證機器人定義 .json 檔案匯入`TicketBot`執行個體。 | Lex Bot 開發人員 | 
| 驗證重新型機器人定義。 | 在您匯入重新型機器人定義之後，驗證其功能至關重要。您想要確保新功能如預期般運作，且不會與現有功能衝突。此驗證通常涉及使用各種輸入案例測試機器人、檢查回應，以及驗證機器人的行為是否如預期。您可以透過下列其中一種方式執行驗證：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Lex Bot 開發人員 | 
| 將功能分支合併到主分支。 | 在隔離的`TicketBot`執行個體中開發和測試新功能之後，請執行下列動作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Lex Bot Developer，儲存庫管理員 | 
| 刪除功能分支和票證機器人。 | 將功能分支成功合併至主分支後，請從原始碼儲存庫刪除功能分支和票證機器人。若要刪除功能分支和票證機器人，請觸發`DeleteTicketBotPipeline`管道。管道會移除開發過程中建立的臨時機器人資源 （例如票證機器人）。此動作有助於維護乾淨的儲存庫，並防止與未來的特徵分支混淆或衝突。 | Lex Bot 開發人員 | 

### 維護主要機器人
<a name="maintain-the-main-bot"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將最新的主要機器人定義匯入`dev`環境。 | 若要將主分支中最新的主機器人定義匯入`dev`環境，請觸發`DeployBotDevPipeline`管道。管道也會在核准時建立 git 標籤。 | AWS DevOps | 
| 將最新的主要機器人定義匯入`prod`環境。 | 若要將主分支中最新的機器人定義匯入`prod`環境，請提供先前任務的標籤參考做為參數，並觸發`DeployBotProdPipeline`管道。管道會將最新的機器人定義從特定標籤匯入`prod`環境。 | AWS DevOps | 

## 疑難排解
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 當您將 Amazon Lex 機器人部署到不同的 時 AWS 帳戶，工具服務必須具有存取這些帳戶中資源的必要許可。 | 若要授予跨帳戶存取權，請使用 IAM 角色和政策。在目標帳戶中建立 IAM 角色，並將政策連接到授予必要許可的角色。然後，從部署 Amazon Lex 機器人的帳戶擔任這些角色。如需詳細資訊，請參閱 Amazon Lex 文件中的[匯入所需的 IAM 許可](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions)和在 [Lex V2 中匯出機器人所需的 IAM 許可](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions)。 | 

## 相關資源
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [在 Amazon Lex V2 中匯入機器人](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [在 CodePipeline 中啟動管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [使用 Amazon Lex V2 機器人](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)