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

AWS CDK中EKS Secret无法解析DB端点Token的解决方法

解决CDK中EKS Secret无法解析DB端点Token的问题

问题出在add_manifest方法的工作机制上:它直接将传入的字典转换为Kubernetes YAML清单,不会自动解析CDK生成的${Token[...]}占位符。而SSM参数的构造函数内置了Token处理逻辑,所以能正常渲染实际值。

解决方案1:使用CDK官方Kubernetes Secret构造器

替换add_manifest为aws_kubernetes.Secret,该构造器会自动处理Token解析:

from aws_cdk import aws_kubernetes as k8s

k8s.Secret(self, "my-secret-env",
    metadata=k8s.ObjectMeta(
        name="my-secret-env",
        namespace="default"
    ),
    data={
        "DATA_HOST": self._base64encode(self.db.db_instance_endpoint_address)
    }
)

解决方案2:手动解析Token后传入add_manifest

如果必须使用add_manifest,可以通过Token.as_string()显式解析Token,或用Fn.sub替换占位符:

方式A:用Token.as_string()解析

from aws_cdk import Token

self.cluster.add_manifest('my-secret-env', {
    "kind": "Secret",
    "apiVersion": "v1",
    "metadata": {
        "name": "my-secret-env",
        'namespace': 'default'
    },
    "data": {
        "DATA_HOST": self._base64encode(Token.as_string(self.db.db_instance_endpoint_address)),
    }
})

方式B:用Fn.sub替换占位符

from aws_cdk import Fn

self.cluster.add_manifest('my-secret-env', {
    "kind": "Secret",
    "apiVersion": "v1",
    "metadata": {
        "name": "my-secret-env",
        'namespace': 'default'
    },
    "data": {
        "DATA_HOST": Fn.sub(self._base64encode(self.db.db_instance_endpoint_address)),
    }
})

关键原因说明

CDK中的Token是部署阶段才会被替换的占位符,add_manifest属于“原始清单”注入,不会触发CDK的Token解析流程;而SSM参数和官方K8s资源构造器都集成了CDK的合成逻辑,能正确将Token替换为实际值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:35