使用 AWS 應用程式 2 容器將現場部署 Java 應用程式遷移到 AWS - AWS Prescriptive Guidance

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

使用 AWS 應用程式 2 容器將現場部署 Java 應用程式遷移到 AWS

丹南傑·卡蘭傑卡 (AWS) 創作

來源:應用程式

目標:部署在 Amazon ECS 上的容器化應用程式

R 類型 平台重建

:环境 PoC 或試驗

Technologies 移轉;網站與網路應用程式

工作負載:開放原始碼

AWS 服務 AWS EC2 Container Registry;亞馬遜 ECS

Summary

AWS App2Container (A2C) 是命令列工具,可協助將虛擬機器中執行的現有應用程式轉換為容器,而不需要變更任何程式碼。A2C 會探索伺服器上執行的應用程式、識別相依性並產生相關成品,以便無縫部署到 Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS)。

此模式提供了透過工作者機器使用 App2Container,將部署在應用程式伺服器上的現場部署 Java 應用程式遠端遷移到 AWS Fargate 或 Amazon EKS 的步驟。 

背景工作機器可以用於下列使用案例:

  • 在執行 Java 應用程式的應用程式伺服器上,不允許或不可用 Docker 安裝。

  • 您必須管理部署在不同實體或虛擬伺服器上的多個應用程式的移轉。

先決條件和限制

先決條件

  • 具有在 Linux 伺服器上執行 Java 應用程式的應用程式伺服器

  • 具有 Linux 作業系統的工作者機器

  • 具有至少 20 GB 可用磁碟空間的背景工作機器

限制

Architecture

來源堆疊

  • 在 Linux 伺服器上執行的 Java 應用程式

目標堆疊

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodeDeploy

  • AWS CodePipeline

  • Amazon Elastic Container Registry

  • AWS Fargate

目標架構

Tools

工具

  • AWS 應用程式 2 容器— AWS App2Container (A2C) 是一種命令列工具,可協助您提升和移轉在現場部署資料中心或虛擬機器上執行的應用程式,以便應用程式在 Amazon ECS 或 Amazon EKS 管理的容器中執行。

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

  • AWS CodeCommit— AWS CodeCommit 是由 Amazon Web Service 託管的一項版本控制服務,您可以用它在雲端私下存放和管理資產 (例如,文件、原始碼和二進位檔案)。

  • AWS CodePipeline— AWS CodePipeline 是一種持續交付服務,可讓您對發行軟體所需的步驟進行模型化、視覺化和自動化。

  • Amazon ECS— Amazon EElastic Container Service (Amazon ECS) 是一項具高可擴展性且快速的容器管理服務,可在叢集上執行、停止和管理容器。

  • Amazon ECR— Amazon EElastic Container Registry (Amazon ECR) 是 AWS 受管的容器映像登錄檔服務,具安全性、可擴展性和可靠性。

  • Amazon EKS— Amazon Elastic Kubernetes Service (Amazon EKS) 是一項受管的 Kubernetes 服務,您可以用它在 AWS 執行 Kubernetes,而無須安裝、操作和維護您自己的 Kubernetes 控制平面或節點。

  • AWS Fargate— AWS Fargate 是一項技術,您可以搭配使用 Amazon ECS 來執行容器,而無須管理 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的伺服器或叢集。有了 Fargate,就不再需要佈建、設定或擴展虛擬機器的叢集來執行容器。

Epics

任務描述所有技能
建立存取應用程式伺服器的秘密。

若要從工作者機器遠端存取應用程式伺服器,請在 AWS Secrets Manager 中建立秘密。對於您的秘密,您可以使用 SSH 私鑰或證書和 SSH 私鑰。如需詳細資訊,請參閱「」管理 AWS 應用程式 2 容器的秘密

DevOps, 開發人員
任務描述所需技能
安裝 tar 檔案。

執行 sudo yum install -y tar

DevOps, 開發人員
安裝 AWS CLI.

若要安裝 Amazon Command Line Interface (AWS CLI),請執行curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"。 

解壓縮 awscliv2.zip

執行 sudo ./aws/install

DevOps, 開發人員
安裝應用程式 2 容器。

執行下列命令:

curl -o AWSApp2Container-installer-linux.tar.gz https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/AWSApp2Container-installer-linux.tar.gz

sudo tar xvf AWSApp2Container-installer-linux.tar.gz

sudo ./install.sh

DevOps, 開發人員
設定設定檔。

若要設定 AWS 預設設定檔,請執行sudo aws configure

要配置具名的 AWS 默認配置文件,請運行sudo aws configure --profile <profile name>

DevOps, 開發人員
安裝 Docker.

執行下列命令。

sudo yum install -y docker

sudo systemctl enable docker & sudo systemctl restart docker

初始化應用程式 2 容器。

若要初始化 App2Container,您需要以下資訊:

  • workspace:儲存應用程式容器化成品。建議您提供至少有 20 GB 的可用磁碟空間的目錄路徑。

  • awsProfile:在伺服器上設定的 AWS 設定檔。這是上傳工件到 Amazon S3 所需,執行containerize命令,並產生 AWS 工件,以便在 Amazon ECS 或 Amazon EKS 上部署。

  • s3Bucket:提取和存儲 AWS 工件。

  • metricsReportPermission:收集並儲存已報告的度量。

  • dockerContentTrust:簽署 Docker 映像。

執行 sudo app2container init

DevOps, 開發人員
任務描述所需技能
將背景工作機器設定為遠端連線,並在應用程式伺服器上執行 App2Container 命令。

若要設定背景工作機器,需要下列資訊:

  • Server FQDN:應用程式伺服器的完整網域名稱。

  • Server IP address:應用程式伺服器的 IP 地址。FQDN 或 IP 位址就足夠了。

  • SecretARN:Amazon Resource Name (ARN) 用來連線至應用程式伺服器,並儲存在 Secrets Manager 中的秘密。

  • AuthMethodkeycert身份驗證方法。

執行 sudo app2container remote configure

DevOps, 開發人員
任務描述所需技能
探索內部部署 Java 應用程式。

若要遠端探索應用程式伺服器上執行的所有應用程式,請執行下列命令:

sudo app2container remote inventory --target <FQDN/IP of App server>

這個命令會在inventory.json

開發人員、DevOps
分析探索到的應用程式。

若要使用詳細目錄階段中取得的應用程式識別碼,從遠端分析每個應用程式,請執行下列命令。

sudo app2container remote analyze --application-id <java-app-id> --target <FQDN/IP of App Server>

這會產生analysis.json檔案位於工作區位置。產生此檔案之後,您可以根據需求變更容器化參數。

開發人員、DevOps
擷取已分析的應用程式。

若要為分析的應用程式產生應用程式存檔,請從遠端執行下列命令,此命令會在工作區位置產生 tar 服務包。

sudo app2container remote extract --application-id <application id> --target <FQDN/IP of App Server>

擷取的人工因素可以在本機工作者電腦上產生。

開發人員、DevOps
任務描述所需技能
將擷取的人工因素容器化。

透過執行下列命令,將上一個步驟中擷取的人工因素容器化。

sudo app2container containerize --input-archive <tar bundle location on worker machine>

開發人員、DevOps
完成目標

若要完成目標,請開啟deployment.json,這是當containerize命令執行。若要指定 AWS Fargate 作為目標,請將createEcsArtifactstrue。若要將 Amazon EKS 設定為目標,請將createEksArtifacts變成 true。

開發人員、DevOps
任務描述所需技能
在工作者機器上產生 AWS 部署人工因素。

若要產生部署成品,請執行下列命令。

sudo app2container generate app-deployment --application-id <application id>

這會產生ecs-master.yml工作區中的 AWS CloudFormation 範本。

DevOps
佈建人工因素。

若要進一步佈建產生的成品,請執行下列命令來部署 AWS CloudFormation 範本。

aws cloudformation deploy --template-file <path to ecs-master.yml> --capabilities CAPABILITY_NAMED_IAM --stack-name <application id>–ECS

DevOps
產生配管。

修改pipeline.json,這是根據您的需求在前一個故事中創建的。然後執行generate pipeline命令來產生管線部署人工因素。

DevOps