目次
AWS Transform v2.0 完全ガイド
公式ドキュメント
- AWS Transform User Guide
- AWS Transform for Mainframe
- AWS Transform Pricing
- Mainframe Modernization with AWS Transform
1. 本質と位置付け
AWS Transform は 「生成 AI(Amazon Q Developer)を活用してレガシーコード(COBOL・Java・.NET)を自動変換・モダナイズするマネージドサービス」 である。2024 年 GA。コード意味理解 AI が大規模ソースコードを分析・変換し、数百万行のレガシーアプリケーション現代化を数ヶ月で実現する。
サービス概要
- 対応言語:COBOL / PL/I → Java、Java 8/11 → Java 17/21、.NET Framework → .NET、Assembler → COBOL
- 変換内容:言語アップグレード、フレームワーク近代化(Spring Boot 2 → 3)、UI 現代化(CICS → Angular/React)
- 実行形式:AWS コンソール、CLI、CodeBuild パイプライン統合
- 価格モデル:$0.0011/行(変換対象コード行数に応じた従量課金)
- 品質保証:自動ビルド検証、単体テスト実行、差分レポート生成
このサービスを選ぶ理由
なぜ AWS Transform でないといけないのか?
-
意味的なコード変換(生成 AI の価値)
- 単純な正規表現・検索置換ツール:javax → jakarta パッケージ置換のみ
- AWS Transform(Amazon Q Developer):コードのビジネスロジック・パターンを理解
- 例)Spring Boot 設定ファイル自動生成、API Gateway 統合の推奨設定
- 例)COBOL COPY BOOK → Java POJO に意味的に変換
- 変換精度:業界平均 70% → AWS Transform 95%+
-
大規模プロジェクトのコスト削減
- 100 万行の .NET Framework アップグレード:
- 手動リファクタリング:3~5年、チーム 20人、総コスト $5M~8M
- AWS Transform:3~6ヶ月、AI 変換 + QA、総コスト $1,100 + インフラ + 人件費(QA のみ)
- ROI:6~12ヶ月で回収
- 100 万行の .NET Framework アップグレード:
-
ビルド検証付き変換
- 単なるコード生成でなく、変換後のコードを自動ビルド・コンパイルエラー修正・単体テスト実行
- 変換品質の機械的保証(VS 手動コードレビューの属人性排除)
-
AWS クラウドネイティブへの最短経路
- COBOL の JCL バッチ → AWS Batch / Step Functions
- メインフレーム CICS 画面 → Angular/React SPA
- VSAM ファイルシステム → RDS / DynamoDB
- 完全なモダンアーキテクチャへの段階的移行
2. 対応する変換タイプ詳細
2.1 .NET Framework アップグレード
対応バージョン:.NET Framework 3.5 / 4.0 / 4.5 / 4.6 → .NET 6 / 7 / 8
変換範囲:
- Web.config → appsettings.json の自動変換
- System.* → Microsoft.* 名前空間の置換
- 非推奨 API の現代的な代替への自動置換
- NuGet パッケージ互換性チェック・アップグレード
- WCF(Windows Communication Foundation)→ gRPC / ASP.NET Core への提案
// 変換前(.NET Framework 4.8)
[ServiceContract]
public interface IOrderService
{
[OperationContract]
Order GetOrder(int orderId);
}
// 変換後(.NET 8)
public interface IOrderService
{
Task<Order> GetOrderAsync(int orderId);
}
[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
[HttpGet("{id}")]
public async Task<ActionResult<Order>> GetOrder(int id)
{
// ASP.NET Core で実装
}
}
2.2 Java バージョンアップグレード
対応バージョン:Java 8 / 11 → Java 17 / 21 LTS
変換範囲:
- Spring Boot 2.x → 3.x のアップグレード
- javax.* → jakarta.* パッケージの完全置換(Jakarta EE 10)
- 非推奨の Collection API → Modern Streams API
- 古い XML/JSON パーサー → Jackson / GSON アップグレード
// 変換前(Java 8 + Spring Boot 2.x)
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp();
}
}
// 変換後(Java 17 + Spring Boot 3.x)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp/", ".jsp");
}
}
2.3 メインフレーム COBOL → Java Spring Boot
対応スコープ:
- COBOL オンラインプログラム(CICS TXN)→ Spring Boot REST API
- COBOL バッチ(JCL)→ Spring Boot Batch / AWS Batch ジョブ
- VSAM ファイルシステム → JPA / Hibernate ORM
- COBOL COPY BOOK → Java POJO / DTO 自動生成
* 変換前(COBOL)
IDENTIFICATION DIVISION.
PROGRAM-ID. ORDPROC01.
DATA DIVISION.
FILE SECTION.
FD ORDER-FILE.
01 ORDER-REC.
05 ORDER-ID PIC 9(8).
05 ORDER-AMT PIC 9(7)V99.
05 CUST-ID PIC 9(5).
// 変換後(Java)
@Entity
@Table(name = "orders")
public class Order {
@Id
@Column(name = "order_id")
private Long orderId;
@Column(name = "order_amount")
@Digits(integer = 7, fraction = 2)
private BigDecimal orderAmount;
@Column(name = "customer_id")
private Long customerId;
}
@Service
public class OrderProcessingService {
@Autowired
private OrderRepository orderRepository;
public Order processOrder(Long orderId) {
Order order = orderRepository.findById(orderId)
.orElseThrow(() -> new OrderNotFoundException());
// ビジネスロジック
return orderRepository.save(order);
}
}
2.4 VMware / Container 化(プレビュー機能)
VM 上で実行されているアプリケーション → Dockerfile / ECS / EKS タスク定義への変換。
3. AWS Transform 実行フロー
フェーズ 1:コード分析・準備
┌─────────────────────────────────────────────────────────┐
│ ステップ 1: ソースコード収集 │
├─────────────────────────────────────────────────────────┤
│ · ソースコードを S3 に配置 │
│ · ビルドスクリプト / Maven pom.xml / .csproj を準備 │
│ · 依存関係ライブラリを s3://dependencies/ に配置 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ ステップ 2: CodeBuild プロジェクト構成 │
├─────────────────────────────────────────────────────────┤
│ · buildspec.yml 作成(ビルド・テストコマンド) │
│ · 環境変数(JAVA_VERSION, MAVEN_VERSION など) │
│ · S3 出力パス(変換結果保存先) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ ステップ 3: AWS Transform ジョブ作成 │
├─────────────────────────────────────────────────────────┤
│ · 変換タイプ選択(JAVA_UPGRADE / DOTNET_UPGRADE) │
│ · 入出力 S3 パス指定 │
│ · ターゲットバージョン指定 │
└─────────────────────────────────────────────────────────┘
フェーズ 2:AI による自動変換
# AWS Transform ジョブ作成
aws transform start-job \
--job-name "legacy-app-dotnet-modernization" \
--transformation-type NET_FRAMEWORK \
--input-location '{
"s3Bucket": {
"s3BucketName": "my-legacy-apps",
"s3KeyPrefix": "legacy-dotnet-4.8/"
}
}' \
--output-location '{
"s3Bucket": {
"s3BucketName": "my-modernized-apps",
"s3KeyPrefix": "modern-dotnet-8/"
}
}' \
--server-side-encryption-strategy AWS_OWNED_KEY
# ジョブ進捗確認
aws transform get-job --job-id job-0123456789abcdef0
# 出力形式:
# {
# "job": {
# "jobId": "job-0123456789abcdef0",
# "jobName": "legacy-app-dotnet-modernization",
# "transformationType": "NET_FRAMEWORK",
# "status": "IN_PROGRESS",
# "inputLocation": { ... },
# "outputLocation": { ... },
# "createdTime": 1694000000.0,
# "progressReport": {
# "filesAnalyzed": 542,
# "filesTransformed": 328,
# "filesWithIssues": 27
# }
# }
# }
フェーズ 3:ビルド・検証
# buildspec.yml(変換後のコード検証)
version: 0.2
phases:
install:
runtime-versions:
dotnet: 8.0
pre_build:
commands:
- echo "Restoring NuGet packages..."
- dotnet restore src/
build:
commands:
- echo "Building transformed code..."
- dotnet build src/ --configuration Release
- echo "Running unit tests..."
- dotnet test src/Tests/ --logger:"trx;LogFileName=test-results.trx"
post_build:
commands:
- echo "Creating artifact..."
- dotnet publish src/ -o ./publish -c Release
artifacts:
files:
- '**/*'
base-directory: publish/
name: dotnet-modernized-artifact
フェーズ 4:差分レポート生成
変換レポート(transformation-report.md):
## Transformation Summary
- Total Files Analyzed: 542
- Files Successfully Transformed: 515 (95%)
- Files Requiring Manual Review: 27 (5%)
- Estimated Effort (Manual): 40 hours
- Code Quality Score: 92/100
## Transformation Breakdown
### Automatic Changes
- Framework upgrade (.NET Framework 4.8 → .NET 8): ✅
- Package name updates (System.* → Microsoft.*): ✅
- Configuration migration (app.config → appsettings.json): ✅
- NuGet dependency updates: ✅ (14 packages updated)
### Manual Review Required
⚠️ Legacy WCF usage detected (3 services):
- OrderService.svc → Requires gRPC/ASP.NET Core migration
- PaymentService.svc → Consider moving to API Gateway
⚠️ Deprecated APIs (8 references):
- System.Net.ServicePoint → Use HttpClientHandler
- XmlDocument → Use XDocument (LINQ to XML)
### Performance Improvements
- Async/await support: Ready
- Dependency injection: Configured
- Entity Framework Core: Upgraded (EF 6 → EF Core 8)
4. Java アップグレード実装例
# Java 11 → Java 17 の変換ジョブ
aws transform start-job \
--job-name "springboot-2-to-3-upgrade" \
--transformation-type JAVA_UPGRADE \
--input-location '{
"s3Bucket": {
"s3BucketName": "legacy-java-apps",
"s3KeyPrefix": "springboot-2.x/"
}
}' \
--output-location '{
"s3Bucket": {
"s3BucketName": "modernized-java-apps",
"s3KeyPrefix": "springboot-3.x/"
}
}' \
--transformation-params '{
"targetJavaVersion": "17",
"targetSpringBootVersion": "3.0",
"upgradeStrategy": "FULL_MODERNIZATION"
}'
変換対象の例:
// 変換前(Spring Boot 2.x + Java 11)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
List<Order> findByCustomerId(Long customerId);
}
@Service
public class OrderService {
@Autowired
private OrderRepository orderRepository;
public List<Order> getCustomerOrders(Long customerId) {
return orderRepository.findByCustomerId(customerId);
}
}
// 変換後(Spring Boot 3.x + Java 17)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
List<Order> findByCustomerId(Long customerId);
}
@Service
public class OrderService {
private final OrderRepository orderRepository;
// Java 16+ Records との組み合わせ
public record CustomerOrdersResponse(
Long customerId,
List<Order> orders,
LocalDateTime retrievedAt
) {}
@Autowired
public OrderService(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
public CustomerOrdersResponse getCustomerOrders(Long customerId) {
var orders = orderRepository.findByCustomerId(customerId);
return new CustomerOrdersResponse(customerId, orders, LocalDateTime.now());
}
}
5. コンプライアンス・品質保証
5.1 変換品質の指標
| 品質指標 | 実測値 | 業界平均 |
|---|---|---|
| コード変換成功率 | 92~98% | 60~80% |
| 自動修正率(ビルドエラー) | 87% | 40% |
| セキュリティ問題検出 | 94% | 70% |
| テストケース通過率 | 96% | 75% |
| 手動レビュー必要率 | 3~8% | 20~40% |
5.2 セキュリティ検証
# 変換後のセキュリティスキャン実施
aws transform analyze-job \
--job-id job-0123456789abcdef0 \
--analysis-type SECURITY_SCAN
# 検出される脆弱性(例)
# ✅ SQL Injection リスク:なし
# ✅ Hardcoded credentials:検出 3件 → 手動対応必要
# ✅ OWASP Top 10:レベル軽微 2件
6. 料金と ROI シミュレーション
6.1 料金体系
| 課金項目 | 価格 |
|---|---|
| 変換行数(.NET / Java) | $0.0011/行 |
| 最小課金 | $25/変換ジョブ |
6.2 ROI シミュレーション
シナリオ: 100万行の .NET Framework 4.8 → .NET 8 アップグレード
AWS Transform 実行:
変換コスト: 100万行 × $0.0011 = $1,100
QA・テスト:1~2人月 = $8K~15K
総コスト:$10K~16K
従来の手動アップグレード:
開発チーム:10人 × 3ヶ月 = $60K
QA テスト:5人 × 2ヶ月 = $30K
プロジェクト管理:1人 × 3ヶ月 = $10K
総コスト:$100K~120K
削減効果:
コスト削減:$85K~110K(85~90%)
期間短縮:3ヶ月 → 2週間(93% 削減)
ROI:初期投資は即日回収
7. 比較:AWS Transform vs 代替ツール
| 比較項目 | AWS Transform | Microsoft Azure Migrate | GCP Migrate Center | Astadia | Cohesity |
|---|---|---|---|---|---|
| 対応言語 | COBOL / Java / .NET / PL/I | .NET / Java / SQL Server | Java / Python / Node.js | COBOL / Java / Python | Multi-cloud |
| AI 活用 | ✅ Amazon Q | △ 限定的 | △ 限定的 | △ 限定的 | ❌ |
| 全自動化率 | 92~98% | 65~75% | 70~85% | 70~85% | 60~70% |
| マネージド度 | ✅ フル(AWS) | ✅ フル(Azure) | ✅ フル(GCP) | ❌ 自管理 | △ ハイブリッド |
| 価格 | $0.0011/行 | 従量制 | 従量制 | $0.0008~0.0015/行 | 要見積 |
| AWS 統合 | ✅ 最高 | ❌ | ❌ | ○ 限定的 | ○ 限定的 |
| 推奨対象 | AWS への統合移行 | Azure への統合移行 | GCP への統合移行 | 複雑なメインフレーム | 複雑なマルチクラウド |
8. 実装チェックリスト
準備フェーズ
- [ ] ソースコード Git リポジトリで完全管理
- [ ] ビルドスクリプト(Maven / Gradle / MSBuild)確認
- [ ] 依存関係リスト作成(pom.xml / package.json / .csproj)
- [ ] AWS IAM ロール(Transform ジョブ実行)作成
- [ ] S3 バケット準備(ソースコード / 結果保存)
実行フェーズ
- [ ] 小規模モジュールで試験的に変換実施
- [ ] 変換レポート詳細確認(手動対応項目リストアップ)
- [ ] 自動ビルド・テスト成功確認
- [ ] セキュリティスキャン実施(hardcoded credentials 等)
- [ ] 変換後コードの業務ロジック検証
検証フェーズ
- [ ] 単体テスト追加実装(手動対応項目)
- [ ] 統合テスト実行(外部 API・DB 連携)
- [ ] パフォーマンステスト(変換前後の比較)
- [ ] セキュリティペネトレーションテスト
- [ ] ステージング環境での本番相当テスト
本番投入
- [ ] Blue/Green デプロイメント準備
- [ ] ロールバック計画策定
- [ ] 本番環境での動作確認
- [ ] 旧版システム監視継続(1~2週間)
9. まとめ
AWS Transform は 「生成 AI を活用した大規模レガシーコード変換サービス」 である。
主な価値
- コスト削減:85~90% の開発費削減
- 期間短縮:3年プロジェクト → 6ヶ月
- 品質向上:AI による意味的な変換(92~98% 成功率)
- AWS 統合:クラウドネイティブ移行への最短経路
- リスク軽減:自動テスト・セキュリティスキャン実施
使うべき場合
- 100 万行以上のレガシーコード(ROI 高い)
- .NET Framework / Java 8 / COBOL の大規模アップグレード
- AWS への完全統合・モダナイズが目標
- 開発リソース限定(AI で効率化)
参考資料
- AWS Transform for Mainframe
- Accelerate mainframe modernization with AWS Transform
- Mainframe modernization with AWS: A complete guide for 2026
AWS Transform は モダナイズの民主化 を実現し、大規模レガシーシステムの AWS への段階的移行を加速させるキーサービスである。