View a markdown version of this page

自定义 - AWS 转换

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自定义

什么是 AWS 改造自定义?

AWS Transform custom 使用代理人工智能对软件、代码、库和框架进行大规模现代化改造,以减少技术债务。它可以处理各种场景,包括语言版本升级、API 和服务迁移、框架升级和迁移、代码重构以及特定于组织的转换。

通过持续学习,代理可以根据每次执行和开发人员反馈进行改进,无需专业的自动化专业知识即可提供高质量、可重复的转换。

关键功能

AWS 自定义转换提供以下功能:

  • 自然语言驱动的转换定义-使用自然语言、文档和代码示例创建自定义转换

  • 转换执行-在多个代码库中一致可靠地应用转换

  • 持续学习-自动提高每次执行的转换质量

  • AWS-托管转换 AWS-在常见场景中使用现成的、经过审查的转换

变换模式

AWS Transform custom 支持多种转型模式,以满足您的现代化需求。根据所需更改的范围和性质,每种模式都有不同的复杂性特征。

模式 说明 复杂度 示例
API 和服务迁移 在 API 版本或同等服务之间迁移,同时保持功能 中 AWS SDK v1→v2(Java、Python、 JavaScript)、Boto2→Boto3、junit 4→5、javax→雅加达
语言版本升级 升级到同一编程语言的较新版本,采用新功能并替换已弃用的功能 Low-Medium Java 8→17、Python 3.9→3.13、12→22、版本升级 Node.js TypeScript
框架升级 升级到同一框架的较新版本,解决重大变化 中 Spring Boot 2.x→3.x、React 17→18、Angular 升级、Django 升级
框架迁移 迁移到用途相似的完全不同的框架 高 Angular→React,Redux→Zustand,→React Vue.js
库和依赖项升级 将第三方库升级到新版本,同时保持相同的语言和框架 Low-Medium Pandas 1.x→2.x、 NumPy 升级、库升级、 Hadoop/HBase/Hive Lodash 升级
代码重构和模式现代化 在不更改外部功能的情况下实现代码模式现代化并采用最佳实践 Low-Medium 打印→日志框架、字符串连接→f-strings、类型提示采用、可观察性工具
脚本和 File-by-File 翻译 翻译独立脚本或配置文件,其中文件大多是独立的 Low-Medium AWS CDK→TerraForm、Terraform →、Excel→Python 笔记本、Bas CloudFormation h→ PowerShell
架构迁移 只需最少的代码更改即可在硬件架构或运行时环境之间迁移 Medium-High x86→AWS Graviton (ARM),本地部署→Lambda,传统服务器→容器
Language-to-Language 迁移 将代码库从一种编程语言翻译成另一种编程语言 非常高 Java→Python, JavaScript→,C→Rust,Python→ TypeScript Go
自定义和 Organization-Specific 转换 独特的组织要求和专业的现代化需求 变化 自定义内部库迁移、组织特定的编码标准、专有框架迁移
注意

对于 COBOL/mainframe 语言,请使用大型机 AWS 转换。要将.NET 框架升级到.NET Core,请考虑使用 Windows 版 AWS 转换。要将 VMware 迁移到 AWS,请考虑为 VMware 进行 AWS 转换。

操作方法 AWS 改造自定义作品

AWS Transform custom 通常用于转换多个代码库或模块的大型项目。团队通常遵循四个阶段的工作流程:

定义转换-向生成初始转换定义的代理提供自然语言提示、文档和代码示例。可以通过聊天或直接编辑来迭代完善此定义。使用 AWS管理的转换时,可以跳过此阶段。

P@@ ilot or Proof-of-Concept-在示例代码库上测试转换,并根据结果进行优化。此验证阶段有助于估算全面转型的成本和工作量。在此阶段,持续学习可以提高质量。

扩展执行-使用 CLI 设置自动批量执行,由开发人员查看和验证结果。使用 Web 应用程序监控进度并跟踪多个存储库之间的转换。

监控和审查-持续学习可自动提高转换质量。查看从前几次运行中提取的经验教训,确保它们符合质量标准,并将任何无用的内容存档。

了解主要 概念

本节介绍使用自定义 AWS 转换的关键概念。

转换定义

转换定义包含执行特定代码转换所需的指令和知识。它被表示为一项技能,包括:

  • SKILL.md(必填)-Markdown 中带有 YAML 前缀(name和description字段)的指令,其中包含核心转换逻辑和执行指令

  • references/文件夹(可选)-在转换执行期间根据需要加载文档

  • scripts/folder(可选)-转换在执行期间下载并运行的脚本

AWS 在执行、检查或修改需要时,Transform CLI 会自动将转换定义下载到当前目录。

重要

发布转换时,该目录必须仅SKILL.md包含references/文件夹、文件scripts/夹,或两者兼而有之。不允许使用其他文件或子目录。

注意

CLI 版本 2.0 及更高版本使用技能格式。现有的转换定义由 CLI 自动处理。

转换定义类别

转换定义可以有一个类别,说明它是如何使用的:

  • analysis— 读取代码并报告调查结果。持续现代化将这些转换定义作为自定义分析运行。

  • remediation— 更改代码。持续现代化使用这些变换定义来修复发现。

使用atx custom def publish或--category选项设置类别atx custom def save-draft:

atx custom def publish -n <transformation-name> --description "Description" --sd <directory> --category analysis atx custom def publish -n <transformation-name> --description "Description" --sd <directory> --category remediation atx custom def list # The Category column shows each transformation definition's category

AWS 变换使用类别来决定可以在何处使用转换定义。

使用 允许的转换定义
自定义分析 (--type custom) 你自己对analysis类别的变换定义
补救方法 --transformation-name 您自己对remediation类别的转换定义或 AWS 托管转换

在提交自定义分析、计划或修正之前,Trans AWS form 会检查转换定义的类别。

要更改转换定义的类别,请使用不同的--category值重新发布它。如果您发布不带新版本的新版本--category,则新版本将保留先前版本的类别。

有关如何运行analysis转换定义,请参阅自定义分析。

注意

类别不同于资源标签。要管理资源标签,请参阅标记命令。

编写用于分析的变换定义

要获得有用的发现,请编写转换定义,使其描述要查找的内容、如何对每个问题进行分类以及不该做什么。我们建议在中使用以下章节SKILL.md。

Section 要包括什么
简介 一两个句子说明了分析的结果。声明它是只读的,不得修改任何文件。
参赛标准 分析适用时,例如 “存储库包含pom.xml或build.gradle文件”。
Scope 要检查的文件和目录以及要跳过的文件和目录,例如构建输出和供应商依赖项。
要举报什么 算作问题的特定模式或条件。每个问题都要求一个查找结果,并附上文件路径和行号。
类别 一组固定的类别值,以及每个类别值中属于哪些问题。
严重性条件 是什么造成了问题 highmedium,或low。
退出标准 代理如何知道已完成:检查了范围内的每个文件,每个发现都有文件、类别和严重性,并且没有更改任何文件。还要说明什么也没发现时要报告什么。

以下示例查找仍以 17 之前的 Java 版本为目标的 Java 项目。

--- name: java-version-detector description: Report where a repository still targets a Java version earlier than 17, in build files, Dockerfiles, toolchain files, and CI workflows. Analysis only - no code is modified. --- # Java Version Detector Find where the repository targets a Java version earlier than Java 17. This is a read-only analysis: report findings, and do not modify any files. ## Entry Criteria The repository contains a Java build file (`pom.xml`, `build.gradle`, `build.gradle.kts`, or `gradle.properties`), or a file that selects a JDK (`.java-version`, `.tool-versions`, `.sdkmanrc`, a `Dockerfile`, or a file under `.github/workflows/`). ## Scope - Inspect build files, toolchain files, Dockerfiles, and CI workflow files. - Skip build output (`build/`, `target/`) and vendored dependencies. ## What to Report Report one finding for each place that selects a Java version earlier than 17: 1. A compile target, such as `maven.compiler.source`, `maven.compiler.release`, `java.version`, `sourceCompatibility`, or a Gradle toolchain `languageVersion`. 2. A Dockerfile base image that ships a JDK or JRE earlier than 17, such as `openjdk:8` or `amazoncorretto:11`. 3. A CI job or toolchain file that selects a JDK earlier than 17. For each finding, include the file path, the line number, and the version you found. ## Categories - `outdated-compile-target` - a build file compiles for an old Java version - `outdated-runtime-image` - a Dockerfile uses an old JDK or JRE image - `outdated-ci-jdk` - a CI workflow or toolchain file selects an old JDK ## Severity Criteria - **high** - the project compiles for Java 8 or earlier - **medium** - the project compiles for Java 9 through 16 - **low** - only the runtime image or CI uses an old JDK, and the compile target is 17 or later ## Exit Criteria 1. Every in-scope file has been inspected. 2. Every finding has a file path, line number, category, and severity from the lists above. 3. No file in the repository has been modified. 4. If nothing is found, state that the repository targets Java 17 or later.

当此转换定义针对其pom.xml集合的项目运行时<source>1.8</source>,它会在该outdated-compile-target类别中生成high严重性发现,并以此AWS/java-version-upgrade作为修复方法。

编写分析变换定义的技巧

  • 将其保持为只读。明确说明分析不得修改文件。修复问题是补救工作。

  • 具体说明什么才算作问题。命名要查找的文件、设置和模式。模糊的说明会产生不一致的结果。

  • 每期要求一个调查结果。每项发现都应指向特定的文件和行,以便可以单独对其进行审查和修正。

  • 在转换定义中定义严重性和类别。代理使用您的标准对每项发现进行分类。

  • 保持瞄准镜的焦点。自定义分析仅报告其转换定义所描述的内容。要查找多种问题,请编写单独的转换定义或使用内置的分析类型。

  • 说一无所获时该怎么做。没有问题的存储库会正确生成零结果。

  • 在转换定义中包含查找指令。如果您使用-g或--configuration在运行分析时传递配置,Trans AWS form 将使用您的配置而不是其默认指令。保留 “报告内容” 部分SKILL.md会使转换定义以任何一种方式生成结果。

在发布转换定义之前,在已知包含问题的存储库上对其进行测试。将其另存为草稿atx custom def save-draft,或使用在本地运行atx ct analysis run(参见自定义分析)。

转换注册表

转换注册表是您 AWS 账户的集中存储库,用于存储和管理转换定义。注册表中的转换可以是:

  • 使用列出 atx custom def list

  • 跨多个代码库执行

  • 与您 AWS 账户中的其他用户共享

  • Version-controlled

重要

转换定义是特定于账户的。如果您想在其他 AWS 账户中使用转换,则必须在该账户中单独发布转换。

草稿与已发布的转换

AWS 自定义转换支持注册表中的两种转换状态:

草稿转换是正在进行或未经测试的转换定义。它们另存为特定版本,引用该特定版本的用户可以检索、更新和执行。在转换准备好与团队共享之前,草稿对于迭代开发、测试和完善非常有用。草稿还与特定的对话相关联。如果重新启动 CLI,则可以使用atx --conversation-id {id}恢复之前的 CLI。

已发布的转换可在您账户的转换注册表中找到,供具有所需 IAM 权限的其他用户执行。可以使用atx custom def list发现已发布的转换。

典型的工作流程是:

  1. 在本地创建转换

  2. 另存为草稿以供测试 (atx custom def save-draft)

  3. 完善和验证

  4. 发布以与您的团队共享 (atx custom def publish)

您也可以直接发布转换,而不必将其另存为草稿。

参考文献与教训

AWS 自定义转换使用两种类型的知识来提高转换质量:

参考文献是用户提供的文档,存储在转换定义的references/文件夹中。参考文献仅支持文本文件(所有文件的最大总容量为 10MB),通常包含文档、API 规范、迁移指南和代码示例。在转换执行期间,会根据需要加载引用。在交互模式下创建或更新转换定义时,可以添加引用。

课程是从之前的转换运行中自动提取的。持续学习系统根据执行轨迹、开发者反馈以及转换过程中遇到的代码修复生成它们。它将相关的课程分为几类,以便您可以一起复习。与您预先提供的参考不同,当您在不同的代码库中运行转换时,经验会随着时间的推移而累积,系统会自动应用这些经验来改进 future 的运行。您可以通过交互方式复习和管理课程。atx custom def learnings

生成和验证命令

生成或验证命令是一个可选参数,用于指定在转换过程中如何验证代码。为了确保代码的完整性,此命令在转换过程中的不同时刻执行。

提供一个命令来验证结果并在验证失败时返回问题,对于通过持续学习提高转换质量非常重要。如果不需要构建或验证,请在输入中省略。

有关示例和详细指导,请参阅 “工作流程” 部分中的生成和验证命令。

持续学习

持续学习是一种自动捕获每次转换执行中的反馈并随着时间的推移提高转换质量的系统。系统通过以下方式收集信息:

  • 明确的反馈-在交互模式下提供的评论和代码修复

  • 隐式观察-代理在转换和调试代码时遇到的问题

持续学习系统处理这些信息以创建经验教训,将其添加到转型定义中,从而改进 future 的转型。转换完成后,系统会自动运行学习过程,无需您额外输入。

重要

课程是针对变革的,不会在不同的转型或不同的客户账户之间共享。

管理课程

系统会自动生成课程,但您可以控制将哪些课程应用于 future 的运行。该atx custom def learnings命令会打开一个交互式终端会话,用于查看和整理转换所积累的经验教训。

在此会话中,您可以:

  • 浏览按类别分组的课程,查看每个类别包含多少活跃课程。

  • 打开一节课以阅读其全部细节,包括课程正文、其影响以及之前有多少次跑步参考了它。

  • 将课程存档以防止系统将其应用到 future 的运行中,如果需要,可以稍后将其恢复。

  • 永久删除已不再有用的已存档课程。

如需分步指导,请参阅 持续学习。

Client-Side 技能

Client-side 技能是在转换执行期间扩展代理的附加能力。与定义要执行什么转换的转换定义不同,客户端技能提供了辅助工具、脚本和指令,代理可以在任何转换过程中与其内置功能一起使用这些工具、脚本和指令。

Client-side 技能是从项目级和用户级目录中发现的。当技能强制执行特定于存储库的标准时,将技能放在项目级别,当这些标准适用于您的所有项目时,则将其置于用户级别。 Project-level 只有在提供了代码存储库路径时,技能才可用。有关详细的配置和用法,请参阅Client-Side 技能。

自定义转换命令简介

以下是一些可用于自定义转换的命令。命令的完整列表位于AWS 转换自定义转换命令参考中。

  • atx custom

    • 执行自定义转换交互式体验,允许创建、发现、执行和完善转换。

    • 这是的默认命令atx。

    • --trust-all-tools(-t) 是可选的,隐式允许代理请求的所有工具请求。请谨慎使用,尤其是在生产环境中。您可以使用信任设置文件为特定工具和命令配置工具信任。

  • atx custom --help | atx custom -h

    • 显示帮助菜单。

    • 例如,每个命令还包括一个帮助菜单atx custom def exec --help。

  • atx --version | atx -v

    • 显示版本。

    • 版本号随每个版本而变化。

  • atx custom def list

    • 打印转换注册表中可用的转换列表。

  • atx custom def exec

    • 执行转换

  • atx custom def learnings

    • 打开交互式会话以查看和管理转型从之前的运行中吸取的经验教训

  • atx mcp

    • 用于管理 MCP 服务器配置