使用Pulumi CLI导入AWS ALB TargetGroup时遇类型错误的解决方法
Pulumi导入ALB目标组时的内部错误及代码生成方案
操作与错误详情
执行以下命令导入AWS ALB目标组至Pulumi:
$ pulumi import aws:alb/targetGroup:TargetGroup target-group-name target-group-arn
触发内部错误,报错信息如下:
error: internal error: Error: cannot assign expression of type tuple(cty.NullVal(cty.DynamicPseudoType)) to location of type union(list(union(object({onDeregistration = union(output(string), string, annotated(0x14001d12b40)), onUnhealthy = union(output(string), string, annotated(0x14001d12b80))}, annotated(0x14001d12b00)), output(object({onDeregistration = string, onUnhealthy = string}, annotated(0x14001d12bc0))), annotated(0x14001d12c00))), none, output(list(object({onDeregistration = string, onUnhealthy = string}, annotated(0x14001d12bc0)))), annotated(0x14001d12cc0)): on anonymous.pp line 22: 23: targetFailovers =[ 24: null]
环境信息
- OS:macOS Monterey v12.5
- 架构:M2
- Pulumi版本:v3.51.1
- Pulumi路径:
/opt/homebrew/bin/pulumi - 运行时:Node.js(TypeScript)
解决方法
一、修复导入错误
错误根源是targetFailovers字段类型不匹配:该字段接受的有效值为对象列表或none,但导入生成的临时文件中写了[null]。处理步骤:
- 打开报错提示的
anonymous.pp文件 - 将
targetFailovers = [null]修改为targetFailovers = none(如果目标组未配置故障转移规则),或替换为符合结构的对象列表(例如:[{ onDeregistration: "xxx", onUnhealthy: "xxx" }]) - 重新执行导入命令,或运行
pulumi up完成资源同步
另外,该问题可能是旧版本Pulumi的bug,建议升级至最新稳定版后重试:
$ brew upgrade pulumi
二、从Pulumi状态生成TypeScript代码
若资源已成功导入至Pulumi状态(可通过pulumi state list确认),可按以下步骤生成TypeScript代码:
- 导出状态详情:执行命令查看目标组的完整属性:
$ pulumi state show aws:alb/targetGroup:TargetGroup::target-group-name
- 手动编写TypeScript代码:根据输出的属性,创建对应的资源定义文件(例如
targetGroup.ts):
import * as aws from "@pulumi/aws"; // 导入已存在的目标组 const targetGroup = new aws.alb.TargetGroup("target-group-name", { // 填充state中输出的属性,示例: targetType: "instance", port: 80, protocol: "HTTP", vpcId: "vpc-xxxxxx", // 若未配置故障转移,可省略targetFailovers字段,或设为undefined }, { // 指定导入的ARN,确保与状态中的资源匹配 import: "target-group-arn", }); // 导出必要的属性 export const targetGroupArn = targetGroup.arn;
- 验证同步:运行
pulumi preview确认代码与状态一致,无变更后即可正常管理该资源
内容的提问来源于stack exchange,提问作者Kohei Yasan
相关产品推荐
相关产品推荐

