SuperAPI AI 工具集

cloudformation-to-pulumi

部署与运维

查看项目

更新于 10-15 15:00

技能介绍

用途

该技能用于把 AWS CloudFormation 堆栈或模板转换、迁移或导入为 Pulumi 程序。当用户希望从 CloudFormation 迁移到 Pulumi 时加载此技能。

主要能力

  • 从 AWS 获取 CloudFormation 模板并构建资源清单。
  • 将 CloudFormation 资源手动转换为 Pulumi 代码(资料明确说明没有自动化转换工具)。
  • 将 CloudFormation 内置函数、条件、参数、映射转换为 Pulumi 等价写法。
  • 使用 cdk-importer 自动导入资源,失败时使用 pulumi import 手动导入。
  • 导入后通过 pulumi preview 验证零差异。
  • 输出正式的迁移报告,适合用于 Pull Request。

使用方式

迁移工作流按以下顺序执行:

  1. 信息收集

    • 通过 Pulumi ESC 验证 AWS 凭据;若用户未指定 ESC 环境,需先询问。必须与用户确认 AWS 区域。
    • 若用户提供模板文件则直接读取;若只提供堆栈名称,则从 AWS 获取模板: aws cloudformation get-template --region <region> --stack-name <stack-name> --query 'TemplateBody' --output json > template.json
    • 列出堆栈资源: aws cloudformation list-stack-resources --region <region> --stack-name <stack-name> --output json
    • 分析模板结构:参数及默认值、映射、条件、输出、资源依赖(Ref、GetAtt、DependsOn)。
  2. 代码转换(CloudFormation → Pulumi)

    • 资源命名约定:每个 Pulumi 资源必须使用 CloudFormation 逻辑 ID 作为资源名称,不得重命名,否则自动导入会失败。
    • 提供程序策略:默认始终使用 aws-native,CloudFormation 类型与 aws-native 一一对应;仅当 aws-native 不支持所需功能时才使用 aws(经典)。
    • 内置函数映射:!Ref(资源)→ 资源输出;!Ref(参数)→ Pulumi 配置;!GetAtt → 资源属性输出;!Sub → pulumi.interpolate;!Join → pulumi.interpolate 或 .apply();!If → 三元运算符;!Equals → === 比较;!Select → 带 .apply() 的数组索引;!Split → .apply(v => v.split(...));Fn::ImportValue → 堆栈引用或配置。
    • 条件转换为 TypeScript 逻辑;参数转换为 Pulumi 配置;映射转换为 TypeScript 对象。
    • 自定义资源需识别用途、寻找原生替代,若无替代则在迁移报告中记录需手动实现。
    • TypeScript 输出处理:aws-native 输出常含 undefined,避免使用 ! 非空断言,应使用 .apply() 安全解包。
  3. 资源导入

    • 导入前验证:检查所有资源使用 aws-native;记录任何 aws(经典)提供程序的例外并说明理由;确认所有资源使用 CloudFormation 逻辑 ID 作为名称。
    • 使用 cdk-importer 自动导入,详细流程参考 cfn-importer.md。
    • 对自动导入失败的资源,参考 cloudformation-id-lookup.md 查找导入 ID 格式,并使用: pulumi import <pulumi-resource-type> <logical-id> <import-id>
    • 导入后运行 pulumi preview,必须没有更新、替换、创建或删除;若有变化需调查并更新程序直至预览干净。

输出格式

执行迁移时始终产出:概述、迁移计划摘要、Pulumi 代码输出(TypeScript,按文件组织)、资源映射表(CloudFormation 逻辑 ID、CFN 类型、Pulumi 类型、提供程序)、自定义资源摘要(如有)、最终迁移报告(可供 PR 使用)、后续步骤(导入说明)。

适用场景

  • 用户希望将现有 CloudFormation 堆栈迁移到 Pulumi 并纳入 Pulumi 管理。
  • 用户希望将 CloudFormation 模板转换为 Pulumi 程序。
  • 用户希望导入现有 AWS 资源并由 Pulumi 管理。

限制

  • 资料明确说明没有针对 CloudFormation 的自动化转换工具,必须手动转换每个资源。
  • 自动导入依赖资源名称与 CloudFormation 逻辑 ID 一致,重命名会导致导入失败。
  • 使用 aws(经典)提供程序可能导致 cdk-importer 导入失败。
  • 自定义资源若无原生替代,需要手动实现。
  • 运行 AWS 命令需要凭据通过 Pulumi ESC 加载。
  • 关于收费、价格、平台支持范围等事实,资料暂未提供。