SuperAPI AI 工具集

pulumi-cdk-to-pulumi

部署与运维

查看项目

更新于 10-15 16:35

技能介绍

该技能面向需要将 AWS CDK 应用迁移、转换、移植或移动到 Pulumi 的场景。其核心目标是让迁移结果满足关键成功要求:CDK 合成的每一个 CloudFormation 资源都必须在 Pulumi 程序中得到表示,或在最终报告中给出明确理由;生成的 Pulumi 程序必须结构有效,并在配置正确的前提下能够成功执行 pulumi up;同时始终输出适合 Pull Request 的正式迁移报告,报告需包含 CDK 到 Pulumi 的资源映射、Provider 决策(aws-native 与 aws)、行为差异、缺失或需手动完成的步骤以及验证说明。

使用方式遵循固定工作流。首先进行信息收集:通过 Pulumi ESC 验证 AWS 凭证,确认 AWS 区域;运行 npx cdk synth --quiet 合成 CDK,并始终使用 --quiet 防止模板输出到 stdout;读取 cdk.out/manifest.json 识别 CDK 栈与环境,并在 Pulumi 栈中同时设置 aws:region 和 aws-native:region 配置变量;使用 aws cloudformation list-stack-resources 构建资源清单;分析 CDK 结构,提取环境相关条件、栈依赖与跨栈引用、运行时配置以及构造类型(L1、L2、L3)。如果用户提供的 CDK 项目不完整、有歧义或缺少 cdk.out 等产物,应先提出针对性问题再生成 Pulumi 代码。

随后进行代码转换:使用 cdk2pulumi 工具执行初始转换,阅读转换报告并补齐缺口,必要时手动转换资源。对于自定义资源,技能按处理器类型给出迁移策略,例如将 aws-certificatemanager/dns-validated-certificate-handler 替换为 aws.acm.Certificate、aws.route53.Record 和 aws.acm.CertificateValidation;将 aws-s3/auto-delete-objects-handler 替换为 aws.s3.Bucket 并设置 forceDestroy: true;将 aws-logs/log-retention-handler 替换为 aws.cloudwatch.LogGroup 并显式设置 retentionInDays 等。对于未知处理器,保留 CustomResourceEmulator 默认行为,并在迁移报告中记录原始处理器名称与用途、说明其运行时使用 Lambda 调用,并建议用户评估是否可替换为原生资源。Provider 策略默认在资源类型可用时使用 aws-native,不支持等效功能时回退到 aws。

Assets 与 Bundling 方面,技能要求检查 cdk.out 中的 *.assets.json,按资产类型迁移:Docker 镜像使用 docker-build.Image 构建并推送,替换硬编码的 ECR URI;带构建命令的文件需提示用户构建命令需要在 Pulumi 中设置;静态文件使用 pulumi.FileArchive 或 pulumi.FileAsset;捆绑文件需提示用户捆绑步骤需要在 Pulumi 中设置。若检测到 CDK 源码使用 NodejsFunction、PythonFunction、GoFunction 或 bundling 选项,应告知用户构建步骤需要在 Pulumi 中复现,并给出 CI/CD 流水线、Pulumi Command Provider 或预构建脚本等选项及其权衡。

转换完成后可选进行资源导入,建议先使用 cdk-importer 自动导入,失败资源再手动导入;导入后运行 pulumi preview,确保没有更新、替换、创建或删除,如有变化需调查并更新程序直至无变化。最终输出必须包含概述、迁移计划摘要、按文件组织的 Pulumi TypeScript 代码、资源映射表、自定义资源摘要、Assets 与 Bundling 摘要、PR 就绪的最终迁移报告以及可选后续重构步骤。该技能适用于规划或执行 CDK 到 Pulumi 迁移的用户,限制在于需要 AWS 凭证与正确区域、依赖 cdk2pulumi 与 cdk-importer 等工具,且部分资源或构建步骤需要人工介入。