

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

# 使用 Terraform 部署容器化 Blu Age 應用程式的環境
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform"></a>

*Richard Milner-Watts，Amazon Web Services*

## 總結
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-summary"></a>

將舊版大型主機工作負載遷移至現代雲端架構，可以免除維護大型主機的成本，而這些成本只會隨著環境的老化而增加。不過，從大型主機遷移任務可能會帶來獨特的挑戰。內部資源可能不熟悉任務邏輯，與商品化、一般化 CPUs 相比，在這些特殊任務中大型主機的高效能可能很難複寫。重寫這些任務可能是一項大型任務，需要大量精力。

Blu Age 會將舊版大型主機工作負載轉換為現代 Java 程式碼，然後您可以做為容器執行。

此模式提供範例無伺服器架構，用於執行已使用 Blu Age 工具進行現代化化的容器化應用程式。隨附的 HashiCorp Terraform 檔案將建置安全架構，以協調 Blu Age 容器，同時支援批次任務和即時服務。

如需使用 Blu Age 和 AWS 服務來現代化工作負載的詳細資訊，請參閱下列 AWS 規範指引出版物：
+ [在 AWS 無伺服器基礎設施上使用 Blu Age 進行現代化的大型主機工作負載](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [容器化已由 Blu Age 現代化的大型主機工作負載](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)

如需使用 Blu Age 來現代化大型主機工作負載的協助，請在 Blu Age 網站上選擇**聯絡我們的專家**[，以聯絡 Blu Age](https://www.bluage.com/) 團隊。如需協助將現代化工作負載遷移至 AWS、將它們與 AWS 服務整合，並將它們移至生產環境，請聯絡您的 AWS 客戶經理或填寫 [AWS Professional Services 表單](https://pages.awscloud.com/AWS-Professional-Services.html)。

## 先決條件和限制
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-prereqs"></a>

**先決條件**
+ [Containerize 大型主機工作負載所提供的範例容器化 Blu Age 應用程式，已透過 Blu Age 模式進行現代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)。範例應用程式提供邏輯來處理現代化應用程式的輸入和輸出處理，並可與此架構整合。
+ 部署這些資源需要 Terraform。

**限制**
+ Amazon Elastic Container Service (Amazon ECS) 會限制可供容器使用的任務資源。這些資源包括 CPU、RAM 和儲存。例如，使用 Amazon ECS 搭配 AWS Fargate 時，會[套用任務資源限制](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)。

**產品版本**

此解決方案已使用下列版本進行測試：
+ Terraform 1.3.6
+ Terraform AWS 提供者 4.46.0

## Architecture
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-architecture"></a>

**來源技術堆疊**
+ 藍齡
+ Terraform

**目標技術堆疊**
+ Amazon Aurora PostgreSQL-Compatible Edition
+ AWS Backup
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ AWS Identity and Access Management Service (IAM)
+ AWS Key Management Server (AWS KMS)
+ AWS Secrets Manager
+ Amazon Simple Notification Service (Amazon SNS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Step Functions
+ AWS Systems Manager

**目標架構**

下圖顯示解決方案架構。

![\[描述遵循圖表。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/12825490-2622-4f0b-80c9-2c5076d50fa3/images/c0708b0a-aa36-458a-8d6c-d42e3dec7727.png)


1. 解決方案會部署下列 IAM 角色：
   + 批次任務角色
   + 批次任務執行角色
   + 服務任務角色
   + 服務任務執行角色
   + Step Functions 角色
   + AWS Backup角色
   + RDS 增強型監控角色。

   角色符合最低權限的存取原則。

1. Amazon ECR 用於存放由此模式協調的容器映像。

1. AWS Systems Manager 參數存放區會在執行時間將每個環境的組態資料提供給 Amazon ECS 任務定義。

1. AWS Secrets Manager 會在執行時間將環境的敏感組態資料提供給 Amazon ECS 任務定義。資料已由 AWS KMS 加密。

1. Terraform 模組會為所有即時和批次任務建立 Amazon ECS 任務定義。

1. Amazon ECS 使用 AWS Fargate 作為運算引擎來執行批次任務。這是短期任務，由 AWS Step Functions 視需要啟動。

1. Amazon Aurora PostgreSQL 相容提供資料庫以支援現代化應用程式。這會取代大型主機資料庫，例如 IBM Db2 或 IBM IMS 資料庫。

1. Amazon ECS 會執行長期服務，以提供現代化即時工作負載。這些無狀態應用程式會隨著跨可用區域的容器永久執行。

1. Network Load Balancer 用於授予即時工作負載的存取權。Network Load Balancer 支援舊版通訊協定，例如 IBM CICS。或者，您可以將 Application Load Balancer 與 HTTP 型工作負載搭配使用。

1. Amazon S3 為任務輸入和輸出提供物件儲存。容器應處理 Amazon S3 的提取和推送操作，以準備 Blu Age 應用程式的工作目錄。

1. AWS Step Functions 服務用於協調執行 Amazon ECS 任務以處理批次工作負載。

1. 每個批次工作負載的 SNS 主題會用來整合現代化應用程式與其他系統，例如電子郵件，或啟動其他動作，例如將輸出物件從 Amazon S3 交付至 FTP。

**注意**  
根據預設，解決方案無法存取網際網路。此模式假設虛擬私有雲端 (VPC) 將使用 [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/) 等服務連接到其他網路。因此，部署了多個界面 VPC 端點，以授予對解決方案所用 AWS 服務的存取權。若要開啟直接網際網路存取，您可以使用 Terraform 模組中的切換，將 VPC 端點取代為網際網路閘道和相關聯的資源。

**自動化和擴展**

在整個模式中使用無伺服器資源有助於確保，透過向外擴展，此設計的規模幾乎沒有限制。這可減少*雜訊的鄰里問題*，例如在原始大型主機上可能遇到的運算資源競爭。批次任務可以排程為視需要同時執行。

個別容器受限於 Fargate 支援的大小上限。如需詳細資訊，請參閱 Amazon ECS 文件中的[https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size)一節。

若要[水平擴展即時工作負載](https://nathanpeck.com/amazon-ecs-scaling-best-practices/)，您可以新增容器。

## 工具
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-tools"></a>

**AWS 服務**
+ [Amazon Aurora PostgreSQL 相容版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是完全受管的 ACID 相容關聯式資料庫引擎，可協助您設定、操作和擴展 PostgreSQL 部署。
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) 是一項全受管服務，可協助您集中和自動化跨雲端和內部部署 AWS 服務的資料保護。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一種受管容器映像登錄服務，安全、可擴展且可靠。
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) 是快速、可擴展的容器管理服務，可協助您執行、停止和管理叢集上的容器。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 可透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可協助您建立和控制密碼編譯金鑰，以協助保護您的資料。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 可協助您以 API 呼叫 Secrets Manager，以程式設計方式擷取秘密，取代程式碼中的硬式編碼登入資料，包括密碼。
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可協助您協調和管理發佈者和用戶端之間的訊息交換，包括 Web 伺服器和電子郵件地址。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一種雲端型物件儲存服務，可協助您儲存、保護和擷取任何數量的資料。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一種無伺服器協同運作服務，可協助您結合 AWS Lambda 函數和其他 AWS 服務 來建置業務關鍵應用程式。
+ [AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)為組態資料管理和秘密管理提供安全的階層式儲存。

**其他服務**
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一種基礎設施即程式碼 (IaC) 工具，可協助您使用程式碼來佈建和管理雲端基礎設施和資源。此模式使用 Terraform 來建立範例架構。

**程式碼儲存庫**

此模式的原始程式碼可在 GitHub [Blu Age Sample ECS Infrastructure (Terraform)](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform#aws-blu-age-sample-ecs-infrastructure-terraform) 儲存庫中使用。

## 最佳實務
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-best-practices"></a>
+ 對於測試環境，請使用 等功能`forceDate`來設定現代化應用程式，藉由一律在已知期間內執行 來產生一致的測試結果。
+ 個別調校每個任務，以取用最佳數量的資源。您可以使用 [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 來取得潛在瓶頸的指引。

## 史詩
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-epics"></a>

### 準備環境以進行部署
<a name="prepare-the-environment-for-deployment"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製解決方案原始程式碼。 | 從 [GitHub 專案](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform)複製解決方案程式碼。 | DevOps 工程師 | 
| 透過部署資源來存放 Terraform 狀態來引導環境。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 工程師 | 

### 部署解決方案基礎設施
<a name="deploy-the-solution-infrastructure"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 檢閱並更新 Terraform 組態。 | 在根目錄中，開啟 檔案`main.tf,`檢閱內容，並考慮進行下列更新：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 工程師 | 
| 部署 Terraform 檔案。 | 從終端機執行 `terraform apply`命令來部署所有資源。檢閱 Terraform 產生的變更，然後輸入 **yes** 以啟動建置。請注意，部署此基礎設施可能需要超過 15 分鐘的時間。 | DevOps 工程師 | 

### （選用） 部署有效的 Blu Age 容器化應用程式
<a name="optional-deploy-a-valid-blu-age-containerized-application"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將 Blu Age 容器映像推送至 Amazon ECR。 | 將容器推送到您在上一個 epic 中建立的 Amazon ECR 儲存庫。如需說明，請參閱 [Amazon ECR 文件](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。記下容器映像 URI。 | DevOps 工程師 | 
| 更新 Terraform 以參考 Blu Age 容器映像。 | 更新 檔案`main.tf`** **以參考您上傳的容器映像。 | DevOps 工程師 | 
| 重新部署 Terraform 檔案。 | 從終端機執行 `terraform apply`以部署所有資源。從 Terraform 檢閱建議的更新，然後輸入 **yes** 以繼續部署。 | DevOps 工程師 | 

## 相關資源
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-resources"></a>
+ [藍齡](https://www.bluage.com/)
+ [在 AWS 無伺服器基礎設施上使用 Blu Age 進行現代化的大型主機工作負載](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [容器化已由 Blu Age 現代化的大型主機工作負載](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)