用途:将 Pulumi Cloud Discovery 已扫描并通过 discovered-stacks API 暴露的 CloudFormation 或 ARM 栈迁移为 Pulumi 栈。不适用于 Discovery 尚未扫描的任意模板或账号;若源没有已发现栈,本技能无内容可读,不适用。不要与 cloudformation-to-pulumi 或 pulumi-arm-to-pulumi 同时加载,那两个技能是模板优先流程并强制 aws-native,本技能是云状态优先(从已发现状态导入,之后可选按模板重构),默认 aws classic / azure-native。
主要能力:通过 GET /api/preview/insights/{orgName}/discovered-stacks/{projectName}/{stackName}/resources?compareTo={targetProject}/{targetStack} 获取资源列表,字段包括 name、originType、providerType、resource.inputs.providerId、resource.urn、migrationStatus、annotation。迁移状态为 Migrated、Ready、NotFound、NotApplicable、NoMatch、PulumiOnly。可用 PUT/DELETE .../migration 写入或清除注解,支持 note、statusOverride、linkedResourceUrn。
使用方式:先确认源组织、项目、栈、区域,目标仓库、子文件夹、项目与栈名、语言(默认 TypeScript)、重构偏好与 ESC 凭据。随后获取资源并保存为 .migration/resources-baseline.json,运行 triage.py 分类,向用户确认计划。创建或选择目标栈后,用 build_import.py 生成 import.json,分批执行 pulumi import --file import.json --generate-code --out batch.<ext>,每批导入后运行 pulumi preview 要求零差异,提交并写注解。NotFound 与 NoMatch 先尝试导入再注解;映射错误可覆盖 providerType 重试,并用 linkedResourceUrn 桥接 PulumiOnly。
成功标准:所有已发现资源被导入或有注解说明原因;pulumi preview 零差异;通过 API 的 compareTo 与注解跟踪进度;以包含迁移代码和报告的 PR 作为产出。
限制:仅处理 Discovery 已扫描的栈;容器或包装类型(如 AWS::CloudFormation::Stack、Microsoft.Resources/deployments、Microsoft.Resources/resourceGroups、pulumi:providers:*)不可单独迁移;NoMatch 类型需查文档或询问用户;注解中 note 与 statusOverride 至少一项非空,仅更新 note 时不要发送 null;linkedResourceUrn 仅用于 1:1 配对。具体命令与云厂商细节见技能内 cloudformation.md 与 arm.md。