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

如何在CDK脚本中获取MemoryDB集群的端点/端口/凭证?

问题:CDK中正确获取MemoryDB集群端点、端口作为环境变量的方法

我通过如下代码定义了一个MemoryDB集群:

const memorydb_cluster = new CfnCluster(this, 'memorydb', {
      aclName: 'open-access',
      clusterName: 'redis-cluster',
      nodeType: 'db.t4g.medium',
      autoMinorVersionUpgrade: false,
      engineVersion: '7.0',
      numShards: 1,
      numReplicasPerShard: 0,
      securityGroupIds: [ecSecurityGroup.securityGroupId],
      subnetGroupName: groupName,
      tlsEnabled: true,
    });

我希望将该集群的端点、端口及凭证作为环境变量用于其他依赖构造中。目前尝试了两种方式获取端点和端口:

方式一:

const redisUrl = memorydb_cluster.attrClusterEndpointAddress;
const redisPort = memorydb_cluster.attrClusterEndpointPort;

方式二:

const redisUrl = cdk.Stack.of(memorydb_cluster).resolve(memorydb_cluster.attrClusterEndpointAddress);
const redisPort = cdk.Stack.of(memorydb_cluster).resolve(memorydb_cluster.attrClusterEndpointPort);

但得到的结果分别为类似${Token[TOKEN.694]}(端点)和-1.8881545897089002e+289(端口)的Token值,请问如何在CDK脚本中正确获取这些值?


解答

这是CDK的Token机制导致的正常现象:attrClusterEndpointAddress和attrClusterEndpointPort本质是CloudFormation的动态引用,这些值只有在部署阶段由AWS CloudFormation生成,合成阶段(编写CDK代码时)无法拿到具体的字符串/数值。

不需要手动调用resolve处理,直接将这些属性值赋值给环境变量即可,CDK会在生成CloudFormation模板时保留这些引用,部署时自动替换为实际的端点和端口值。

正确示例(以Lambda函数为例)

// 假设你要给Lambda函数设置环境变量
const myLambda = new lambda.Function(this, 'MyDependentLambda', {
  runtime: lambda.Runtime.NODEJS_18_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
  // 直接将Token属性赋值给环境变量
  environment: {
    REDIS_ENDPOINT: memorydb_cluster.attrClusterEndpointAddress,
    REDIS_PORT: memorydb_cluster.attrClusterEndpointPort,
  },
});

关于凭证的处理

如果你的MemoryDB集群使用了需要凭证的ACL(非open-access),可以通过以下方式传递凭证:

  • 创建CfnUser并关联到ACL,将用户的密码存储在Secrets Manager中
  • 将Secrets Manager的ARN或引用作为环境变量传递给依赖构造,在运行时从Secrets Manager获取凭证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:10