我需要为ElastiCache Cluster创建CNAME记录。但是,我构建了redis集群,只有一个节点。据我所知,没有 Redis集群的ConfigurationEndpoint.Address。是否有机会更改群集中节点的DNS名称以及如何操作?
目前模板如下:
"ElastiCahceDNSRecord" : {
"Type" : "AWS::Route53::RecordSetGroup",
"Properties" : {
"HostedZoneName" : "example.com.",
"Comment" : "Targered to ElastiCache",
"RecordSets" : [{
"Name" : "elche01.example.com.",
"Type" : "CNAME",
"TTL" : "300",
"ResourceRecords" : [
{
"Fn::GetAtt": [ "myelasticache", "ConfigurationEndpoint.Address" ]
}
]
}]
}
}
答案 0 :(得分:2)
有些人来到此页面寻求解决方案。现在有一种方法可以直接从CFN中获取Redis端点。
现在可以从RedisEndpoint.Address
获取AWS::ElastiCache::CacheCluster
或来自PrimaryEndPoint.Address
的{{1}}
RedisEndpoint.Address - Redis缓存群集的配置端点的DNS地址。
RedisEndpoint.Port - Redis缓存群集的配置终结点的端口号。
或
PrimaryEndPoint.Address - 主读写缓存节点的DNS地址。
PrimaryEndPoint.Port - 主读写缓存引擎正在侦听的端口号。
示例CFN(未包括其他位):
AWS::ElastiCache::ReplicationGroup
答案 1 :(得分:1)
看起来ConfigurationEndpoint.Address
仅支持Memcached群集,而不支持Redis。请参阅AWS论坛中的this relevant discussion。
此外,AWS Auto Discovery docs(静止)状态:
注意
自动发现仅适用于运行该缓存的缓存群集 Memcached引擎。因此,Redis缓存集群是单节点集群 无需识别和跟踪Redis中的所有节点 群集。
看起来您的“最佳”解决方案是查询我们中的各个端点,以便使用AWS论坛帖子中建议的AWS::CloudFormation::Init
来确定要连接的地址。
更新
正如@slimdrive所指出的那样,现在可以通过AWS::ElastiCache::CacheCluster
来实现这一点。请阅读下面的详细信息。
答案 2 :(得分:0)
您应该能够在提供的模板中使用PrimaryEndPoint.Address
而不是ConfigurationEndpoint.Address
来获取AWS::ElastiCache::ReplicationGroup
page中记录的主读写缓存节点的DNS地址。
答案 3 :(得分:0)
这可能会让您感到非常困惑 - 根据您尝试做的事情,您可以使用ConfigurationEndpoint
或PrimaryEndpoint
...我在这里添加我的发现,因为这个是我在尝试搜索时发现的第一个帖子之一。我还将详细介绍我使用CloudFormation进行ElastiCache redis引擎设置时遇到的其他一些问题。我试图设置CloudFormation类型AWS::ElastiCache::ReplicationGroup
让我先说明这一事实,我之前使用t2.micro构建类型设置了一个redis ElastiCache的集群实例,没有任何问题。事实上,我从node-redis
npm包中收到一条错误,指出群集不受支持,因此我还实现了redis-clustr
包装器。无论如何,一切正常。
然后我们尝试为此创建CloudFormation模板,我遇到了各种限制,aws控制台UI必须隐藏在人们面前。按照我如何遇到问题的时间顺序,这是我的挣扎:
t2.micro instances are not supported with auto-failover.
所以我将AutomaticFailoverEnabled
设置为false
。
修复:t2.micro实例实际上可以使用自动故障转移。使用已启用集群模式的参数组。我的默认值是
default.redis3.2.cluster.on
(我使用的是版本3.2.6,因为这是支持静止和传输加密的最新版本)。创建实例后无法更改参数组,因此请不要忘记此部分。
redis-clustr
/ node-redis
包裹中的错误:this instance has cluster support disabled
。
(这就是我发现参数组需要值的方法)
这就是让我尝试再次使用t2.micro实例的原因,因为我知道我在其他实例中启用了自动故障转移并使用了t2.micro实例。果然,这种组合确实可以合作。
x
属性/属性失败。
修复:事实证明,如果禁用群集模式(例如,使用参数组
default.redis3.2
),则必须使用PrimaryEndPoint.Address
和PrimaryEndPoint.Port
值。如果启用了群集模式,请使用ConfigurationEndPoint.Address
和ConfigurationEndPoint.Port
。我曾尝试使用RedisEndpoint.Address
和RedisEndpoint.Port
但没有运气,虽然这可能适用于没有副本的单个redis节点(我也可能有错误的外壳 - 请参阅下面的注释)。 / p>
注意强>
此外,影响我的一个主要问题是大写:P
中的EndPoint
必须在PrimaryEndPoint
和ConfigurationEndPoint
变体中大写,如果您要创建AWS::ElastiCache::ReplicationGroup
,但如果您要创建p
:AWS::ElastiCache::CacheCluster
,RedisEndpoint
,则ConfigurationEndpoint
为小写。我不确定为什么会出现这种差异,但这可能是造成某些问题的原因。
Link to AWS docs for GetAtt
, which lists available attributes for different CloudFormation resources