You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pulumi为EKS集群添加Addons?报错求助

问题描述

我使用Pulumi Crosswalk创建EKS集群的代码可正常执行:

// vpc creation skipped
cluster, err := eks.NewCluster(ctx, ClusterName, &eks.ClusterArgs{
    Name:                         pulumi.String(ClusterName),
    VpcId:                        vpc.VpcId,
    PublicSubnetIds:              vpc.PublicSubnetIds,
    PrivateSubnetIds:             vpc.PrivateSubnetIds,
    NodeAssociatePublicIpAddress: pulumi.BoolRef(false),
    CreateOidcProvider:           pulumi.BoolPtr(true),
})
if err != nil {
    return err
}

但添加EKS Addons的代码无法运行:

_, err = peks.NewAddon(ctx, "csiEbsAddon", &peks.AddonArgs{
    ClusterName: cluster.Core.ApplyT(
        func(core eks.CoreData) pulumi.StringOutput {
            return core.Cluster.Name
        },
    ).(pulumi.StringOutput),
    AddonName: pulumi.String("aws-ebs-csi-driver"),
})

报错信息:

Diagnostics:
  pulumi:pulumi:Stack (infrastructure-dev):
    error: an unhandled error occurred: program failed:
    waiting for RPCs: marshaling properties: awaiting input property "clusterName": expected a eks.Cluster, got a resource of type eks.Cluster
问题分析与解决

这个报错的核心是你混淆了peks.AddonArgs中ClusterName参数的类型要求。看似矛盾的报错信息,实际是因为Pulumi Crosswalk的eks.Cluster与原生AWS EKS的Addon资源参数匹配逻辑问题:

  • 原生AWS EKS的Addon资源(即peks.NewAddon)的ClusterName参数,可直接接收Crosswalk集群对象的Name属性,无需通过Core.ApplyT嵌套获取,更不需要类型断言。
  • Crosswalk的eks.Cluster本身已暴露Name的StringOutput属性,直接引用即可。

修正后的代码:

_, err = peks.NewAddon(ctx, "csiEbsAddon", &peks.AddonArgs{
    ClusterName: cluster.Name, // 直接使用Crosswalk集群的Name属性
    AddonName:   pulumi.String("aws-ebs-csi-driver"),
})

如果需要指定Addon版本或冲突处理策略,可补充参数:

_, err = peks.NewAddon(ctx, "csiEbsAddon", &peks.AddonArgs{
    ClusterName:      cluster.Name,
    AddonName:        pulumi.String("aws-ebs-csi-driver"),
    AddonVersion:     pulumi.String("v1.23.0-eksbuild.1"), // 可选:指定Addon版本
    ResolveConflicts: pulumi.String("OVERWRITE"), // 可选:冲突时覆盖现有配置
})

另外建议调整包导入的别名,避免Crosswalk的eks包与原生AWS的eks包混淆:

import (
    "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/eks" // 原生AWS EKS包
    xeks "github.com/pulumi/pulumi-eks/sdk/go/eks" // Crosswalk EKS包,用别名区分
)

// 创建集群时使用Crosswalk的xeks
cluster, err := xeks.NewCluster(ctx, ClusterName, &xeks.ClusterArgs{...})

// 创建Addon时使用原生AWS的eks
_, err = eks.NewAddon(ctx, "csiEbsAddon", &eks.AddonArgs{
    ClusterName: cluster.Name,
    AddonName:   pulumi.String("aws-ebs-csi-driver"),
})

这样就能解决类型匹配问题,代码可正常运行。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:27