

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

# 使用 Auto Scaling 從 IBM WebSphere Application Server 遷移至 Amazon EC2 上的 Apache Tomcat
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling"></a>

*Kevin Yung 和 Afroz Khan，Amazon Web Services*

## 總結
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-summary"></a>

此模式提供在啟用 Amazon EC2 Auto Scaling 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上，將 Java 應用程式從 IBM WebSphere Application Server 遷移至 Apache Tomcat 的指引。 Amazon EC2 Auto Scaling  

透過使用此模式，您可以實現：
+ 降低 IBM 授權成本
+ 使用異地同步備份部署的高可用性
+ 使用 Amazon EC2 Auto Scaling 改善應用程式彈性

## 先決條件和限制
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-prerequisites-and-limitations"></a>

**先決條件**
+ Java 應用程式 (7.*x* 或 8.*x* 版） 應該在 LAMP 堆疊中開發。
+ 目標狀態是在 Linux 主機上託管 Java 應用程式。此模式已成功在 Red Hat Enterprise Linux (RHEL) 7 環境中實作。其他 Linux 發行版本可以遵循此模式，但應該參考 Apache Tomcat 發行版本的組態。
+ 您應該了解 Java 應用程式的相依性。
+ 您必須有權存取 Java 應用程式原始碼才能進行變更。

**限制和修改變更**
+ 您應該了解企業封存 (EAR) 元件，並確認所有程式庫都封裝在 Web 元件 WAR 檔案中。您需要設定 [Apache Maven WAR 外掛程式](https://maven.apache.org/plugins/maven-war-plugin/)並產生 WAR 檔案成品。
+ 使用 Apache Tomcat 8 時，servlet-api.jar 和應用程式套件內建 jar 檔案之間存在已知衝突。若要解決此問題，請從應用程式套件中刪除 servlet-api.jar。
+ 您必須設定位於 [Apache Tomcat 組態](https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html) *classpath* 中的 WEB-INF/resources。根據預設，JAR 程式庫不會載入 目錄中。或者，您可以在 src/main/resources 下部署所有資源*。*
+ 檢查 Java 應用程式中的任何硬式編碼內容根目錄，並更新 [Apache Tomcat 的新內容根目錄。](https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context)
+ 若要設定 JVM 執行期選項，您可以在 Apache Tomcat bin 資料夾中建立組態檔案 setenv.sh，例如 JAVA\_OPTS、JAVA\_HOME ****等。 
+ 驗證是在容器層級設定，並在 Apache Tomcat 組態中設定為領域。會為下列三個領域中的任何一個建立身分驗證： 
  + [JDBC Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JDBC_Database_Realm_-_org.apache.catalina.realm.JDBCRealm) 會在 JDBC 驅動程式存取的關聯式資料庫中查詢使用者。
  + [DataSource Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#DataSource_Database_Realm_-_org.apache.catalina.realm.DataSourceRealm) 會在 JNDI 存取的資料庫中查詢使用者。
  + [JNDI Directory Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JNDI_Directory_Realm_-_org.apache.catalina.realm.JNDIRealm) 會在由 JNDI 供應商存取的輕量型目錄存取通訊協定 (LDAP) 目錄中查詢使用者。查詢需要： 
    + LDAP 連線詳細資訊：使用者搜尋基礎、搜尋篩選條件、角色基礎、角色篩選條件 
    + 金鑰 JNDI Directory Realm：連線至 LDAP、驗證使用者，以及擷取使用者為成員的所有群組
+ 授權：如果容器具有檢查 web.xml 中授權限制的角色型授權，則必須定義 Web 資源，並與限制中定義的角色進行比較。如果 LDAP 沒有群組角色映射，您必須在 web.xml 中設定屬性 <security-role-ref>，以實現群組角色映射。若要查看組態文件的範例，請參閱 [Oracle 文件](https://docs.oracle.com/cd/E19226-01/820-7627/bncav/index.html)。 
+ 資料庫連線：使用 Amazon Relational Database Service (Amazon RDS) 端點 URL 和連線詳細資訊，在 Apache Tomcat 中建立資源定義。使用 JNDI 查詢更新應用程式碼以參考 DataSource。在 WebSphere 中定義的現有資料庫連線無法運作，因為它使用 WebSphere 的 JNDI 名稱。您可以使用 JNDI 名稱和 DataSource 類型定義，在 web.xml 中新增 <resource-ref> 項目。若要查看範例組態文件，請參閱 [Apache Tomcat 文件](https://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html#JDBC_Data_Sources)。
+ 記錄：根據預設，Apache Tomcat 會記錄到主控台或日誌檔案。您可以更新 *logging.properties 來啟用領域層級追蹤 *（請參閱 [Tomcat 中的記錄](https://tomcat.apache.org/tomcat-8.0-doc/logging.html))。如果您使用 Apache Log4j 將日誌附加至檔案，則必須下載 tomcat-juli 並將其新增至 *classpath*。
+ 工作階段管理：如果您為應用程式負載平衡和工作階段管理保留 IBM WebSEAL，則不需要變更。如果您使用 Application Load Balancer 或 AWS 上的 Network Load Balancer 取代 IBM WebSEAL 元件，則必須使用 Amazon ElastiCache 執行個體搭配 Memcached 叢集來設定工作階段管理，並將 Apache Tomcat 設定為使用[開放原始碼工作階段管理](https://github.com/magro/memcached-session-manager)。 
+ 如果您使用 IBM WebSEAL 轉送代理，您必須在 AWS 上設定新的 Network Load Balancer。使用 Network Load Balancer for WebSEAL 連接組態提供的 IPs。
+ SSL 組態：我們建議您使用 Secure Sockets Layer (SSL) end-to-end通訊。若要在 Apache Tomcat 中設定 SSL 伺服器組態，請遵循 [Apache Tomcat 文件](https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html)中的指示。 

## Architecture
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-architecture"></a>

**來源技術堆疊**
+ IBM WebSphere 應用程式伺服器

 

**目標技術堆疊**
+ 架構使用 [Elastic Load Balancing （第 2 版](https://docs.aws.amazon.com/elasticloadbalancing/))。如果您使用 IBM WebSEAL 來識別管理和負載平衡，您可以在 AWS 上選取要與 IBM WebSEAL 反向代理整合的 Network Load Balancer。
+ Java 應用程式會部署到 Apache Tomcat 應用程式伺服器，該伺服器在 Amazon EC2 Auto Scaling 群組中的 EC2 執行個體上執行。 [Amazon EC2 Auto Scaling ](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) 您可以根據 Amazon CloudWatch 指標設定[擴展政策](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)，例如 CPU 使用率。 
+ 如果您要淘汰使用 IBM WebSEAL 進行負載平衡，您可以使用 [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html) 進行工作階段管理。
+ 對於後端資料庫，您可以[為 Amazon RDS 部署高可用性 （多可用區）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)，然後選取資料庫引擎類型。

 

**目標架構**

![](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/52b91dab-7b3b-4751-abe2-25e7c7cd8d89/images/25125023-9a81-452a-9ada-184e2416cc02.png)


## 工具
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [AWS 命令列界面 (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)
+ Apache Tomcat (7.*x* 或 8.*x* 版）
+ RHEL 7 或 Centos 7
+ [Amazon RDS 異地同步備份部署](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html) （選用）

## 史詩
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-epics"></a>

### 設定 VPC
<a name="set-up-the-vpc"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 Virtual Private Cloud (VPC) |  |  | 
| 建立子網路。 |  |  | 
| 視需要建立路由表。 |  |  | 
| 建立網路存取控制清單 ACLs)。 |  |  | 
| 設定 AWS Direct Connect 或企業 VPN 連線。 |  |  | 

### 複寫應用程式
<a name="replatform-the-application"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 重構應用程式建置 Maven 組態以產生 WAR 成品。 |  |  | 
| 重構 Apache Tomcat 中的應用程式相依性資料來源。 |  |  | 
| 重構應用程式原始碼，以在 Apache Tomcat 中使用 JNDI 名稱。 |  |  | 
| 將 WAR 成品部署至 Apache Tomcat。 |  |  | 
| 完成應用程式驗證和測試。 |  |  | 

### 設定網路
<a name="configure-the-network"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定公司防火牆以允許連線至相依性服務。 |  |  | 
| 設定公司防火牆以允許最終使用者存取 AWS 上的 Elastic Load Balancing。 |  |  | 

### 建立應用程式基礎設施
<a name="create-the-application-infrastructure"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 EC2 執行個體上建立和部署應用程式。 |  |  | 
| 建立 Amazon ElastiCache for Memcached 叢集以進行工作階段管理。 |  |  | 
| 為後端資料庫建立 Amazon RDS Multi-AZ 執行個體。 |  |  | 
| 建立 SSL 憑證並將其匯入 AWS Certificate Manager (ACM)。 |  |  | 
| 在負載平衡器上安裝 SSL 憑證。 |  |  | 
| 安裝 Apache Tomcat 伺服器的 SSL 憑證。 |  |  | 
| 完成應用程式驗證和測試。 |  |  | 

### 剪下
<a name="cut-over"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 關閉現有的基礎設施。 |  |  | 
| 將資料庫從生產還原至 Amazon RDS。 |  |  | 
| 透過 DNS 變更來切斷應用程式。 |  |  | 

## 相關資源
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-related-resources"></a>

**參考**
+ [Apache Tomcat 7.0 文件](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html)
+ [Apache Tomcat 7.0 安裝指南](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html)
+ [Apache Tomcat JNDI 文件](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS 異地同步備份部署](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)

**教學課程和影片**
+ [Amazon RDS 入門](https://aws.amazon.com/rds/getting-started/)