🏗️ 如何将遗留应用程序迁移到AWS — “直接上传会失败”

#

将一个有10年历史的遗留系统迁移到云端,这不是搬家,而是一场外科手术。

>


🎯 本文涵盖内容

  • 将遗留应用程序迁移到AWS的6种策略 (6 R’s)
  • 最常见的选择 — Lift & Shift 与 Replatform 比较
  • 数据库迁移专用工具 (AWS DMS, SCT) 实战概述
  • 迁移顺序和常见的失败模式

📌 引言 / 背景

您在公司是否曾听过这样的话?

这个系统,没人知道是谁做的。也没有文档。但我们必须把它迁移到云端。

遗留(legacy)应用程序指的是老旧、不再进行开发或仅勉强维护的系统。这包括运行在Windows Server 2008上的.NET Framework 3.5应用程序、依赖Oracle 11g的ERP系统,甚至IBM大型机。

将其迁移到AWS的原因很简单:

  • ☁️ 本地服务器的维护成本和许可证续订压力
  • 📉 安全补丁终止 (EoL) 威胁
  • 🚀 需要扩展的业务需求

但问题是 — 遗留系统不能像复制粘贴一样简单地迁移。


🔍 AWS迁移的6种策略 — “6 R’s”

这是AWS和Gartner共同建立的云迁移策略框架。

策略 别名 说明
Rehost Lift & Shift 原样迁移到EC2。改动最小
Replatform Lift, Tinker & Shift 保持核心功能,但进行部分优化 (例如: 转换为RDS)
Refactor Re-architect 将架构本身重新设计为云原生
Repurchase Drop & Shop 替换为SaaS解决方案 (例如: Salesforce)
Retire 废弃不再需要的系统
Retain 暂时不动

对于遗留系统,大多数情况下,采用Rehost (第一阶段)Replatform (第二阶段) 的方法更为现实。


🚚 第一阶段: Rehost — 先将其迁移到EC2

这是最快且风险最低的方法。它涉及将整个服务器复制到EC2实例。

🛠️ 主要工具: AWS Application Migration Service (MGN)

以前称为CloudEndure Migration,现在已整合到AWS MGN中。

工作方式:

  1. 在源服务器上安装MGN代理
  2. 将服务器磁盘持续复制到AWS (实时同步)
  3. 准备就绪后执行切换(Cutover) — 流量切换
  4. 验证EC2实例的启动
# MGN代理安装示例 (Linux)
sudo ./aws-replication-installer-init.py 
  --region ap-northeast-2 
  --aws-access-key-id <ACCESS_KEY> 
  --aws-secret-access-key <SECRET_KEY>

优点: 最小化停机时间(Downtime),无需修改代码

缺点: 结构性问题 (操作系统依赖性、许可证问题) 会随之迁移

💡 对于Windows Server的BYOL(Bring Your Own License)问题,务必提前确认AWS的许可证政策。


⚙️ 第二阶段: Replatform — 仅更改数据库就成功了一半

遗留系统最大的痛点是数据库。Oracle、MS SQL、Sybase… 许可证费用非常高昂。

将其转换为Amazon RDSAurora,可以大大降低成本和运营负担。

🗄️ 两种专用数据库迁移工具

1) AWS DMS (Database Migration Service)

这是迁移实际数据的工具。

  • 将数据从源数据库复制到目标数据库
  • 支持异构数据库迁移 (例如: Oracle → Aurora PostgreSQL)
  • 支持CDC (Change Data Capture) — 即使在运行中也能实现实时同步
소스: Oracle 11g (온프레미스)
    ↓  [DMS Replication Instance]
타겟: Amazon Aurora PostgreSQL (AWS)

实际使用方式如下:

# 创建DMS复制实例 (AWS CLI)
aws dms create-replication-instance 
  --replication-instance-identifier my-legacy-migration 
  --replication-instance-class dms.t3.medium 
  --allocated-storage 50 
  --region ap-northeast-2

DMS支持的源数据库:

  • Oracle, MS SQL Server, MySQL, PostgreSQL, MongoDB, SAP ASE, IBM Db2 等

2) AWS SCT (Schema Conversion Tool)

这是转换模式(结构)的工具。DMS迁移数据,而SCT转换表结构、索引、存储过程、触发器等。

  • 将Oracle PL/SQL转换为PostgreSQL PL/pgSQL
  • 将无法转换的项目以报告形式显示 (识别需要手动修改的项目)
  • 基于GUI的工具 (免费下载)
[SCT 워크플로우]
1. 소스 DB 연결 → 스키마 분석
2. 변환 리포트 생성 (호환성 평가)
3. 자동 변환 실행
4. 수동 수정 필요 항목 확인 및 처리
5. 타겟 DB에 변환된 스키마 적용

💡 DMS vs SCT 总结

>

– SCT = 结构(模式)转换

– DMS = 数据复制和迁移

通常两者结合使用


💻 实战迁移流程示例

Oracle 11g → Aurora PostgreSQL 转换场景:

[1단계] AWS SCT 설치 및 스키마 분석
  → 변환 가능 항목 자동 변환
  → 수동 수정 목록 확인

[2단계] Aurora PostgreSQL 인스턴스 생성
  → RDS 콘솔 또는 Terraform으로 프로비저닝

[3단계] DMS 복제 인스턴스 생성
  → 소스/타겟 엔드포인트 설정

[4단계] 전체 로드(Full Load) 실행
  → 기존 데이터 전체 복제

[5단계] CDC 활성화
  → 실시간 변경사항 동기화 (운영 중 마이그레이션)

[6단계] 애플리케이션 DB 접속 정보 변경
  → 컷오버 및 모니터링
# 简单的DMS端点创建示例 (boto3)
import boto3

dms = boto3.client('dms', region_name='ap-northeast-2')

# 源端点 (Oracle)
response = dms.create_endpoint(
    EndpointIdentifier='source-oracle',
    EndpointType='source',
    EngineName='oracle',
    Username='migration_user',
    Password='your_password',
    ServerName='192.168.1.100',
    Port=1521,
    DatabaseName='ORCL'
)
print(response['Endpoint']['EndpointArn'])

⚠️ 注意事项 / 常见错误

1. 许可证陷阱 🪤 Windows Server、Oracle DB等在AWS上的“包含许可证”费用和BYOL(自带许可证)费用不同。如果不知道这一点就进行迁移,成本可能会暴涨。

2. 忽视网络延迟 😵 在本地部署时代,数据库和应用程序位于同一个IDC内,但现在它们必须通过互联网(或VPN/Direct Connect)进行通信。特别是遗留应用程序经常发出数百次数据库查询,因此延迟差异可能是致命的。

3. 忽略SCT报告 ⛔ 如果忽略SCT标记为“需要手动转换”的项目,只运行DMS — 数据可能已迁移,但存储过程可能无法正常工作。

4. 切换前缺乏充分验证 即使在CDC同步期间,也必须有一个阶段将实际应用程序连接到目标数据库进行测试(并行运行)。在切换当天首次测试就太晚了。

5. IAM权限设置不足 DMS复制实例必须能够访问源数据库和目标数据库。请提前仔细检查VPC安全组、子网和IAM角色设置。


✅ 总结 / 结束语

将遗留系统迁移到AWS并非一蹴而就。分阶段的方法是关键。

阶段 策略 工具
第一阶段 Rehost (Lift & Shift) AWS MGN
第二阶段 Replatform (数据库转换) AWS SCT + DMS
第三阶段 Refactor (可选) Lambda, ECS, Aurora Serverless 等

要继续前进:

  • ✅ 实践AWS Application Migration Service (MGN) 官方文档
  • ✅ 下载AWS SCT并尝试转换示例Oracle模式
  • ✅ AWS DMS Workshop (AWS官方免费动手实践)

将遗留系统迁移到AWS可能令人望而生畏 — 但如果了解正确的工具和顺序,可以比想象中更有条理地完成。🚀


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注