我正在使用Amazon Web Services CloudFormation解决方案来创建数据库(RDS),一些服务器(ElasticBeanstalk),并添加一些DNS条目(Route 53)。
我用于此的模板运行正常,除了DNS(CNAME)记录外,所有服务都是根据需要创建的。
要获取要添加的CNAME记录的值,我正在使用Fn::GetAtt
,并抓取ElasticBeanstalk对象的EndpointURL
。 Amazon docs表明这个骗局 -
此环境的LoadBalancer的URL。
示例:awseb-myst-myen-132MQC4KRLAMD-1371280482.us-east-1.elb.amazonaws.com
然而,问题在于它取而代之的是获取IP地址。因此,CNAME失败了。
之前有没有人遇到过这个问题,如果是的话,有什么工作?
以下是我的模板的相关摘录 -
"RecordSetObject": {
"Type": "AWS::Route53::RecordSet",
"Properties": {
"HostedZoneId": "Q1W2E3R4T5Y6U7",
"Name": {
"Fn::Join": [
"",
[
{ "Ref": "EnvironmentName" },
"-",
{ "Ref": "ApplicationName" },
".",
"super.secret.url",
"."
]
]
},
"ResourceRecords": [
{
"Fn::GetAtt": [
"EBObjectName",
"EndpointURL"
]
}
],
"Type": "CNAME",
"TTL": "300"
}
}
答案 0 :(得分:0)
据我所知,这只发生在Beanstalk环境类型为' single instance'时,即CloudFormation模板中存在以下内容时:
var socket = io.connect();
socket.on('mySocket', function (data) {
console.log(data);
});
AWS docs州:
在单实例环境中,elasticbeanstalk.com子域解析为附加到运行应用程序的实例的弹性IP地址。
似乎很奇怪router.post('/updatePage', function (req, res, next){
//send to the view
res.io.emit("mySocket", {
device: device
});
});
并不会返回elasticbeanstalk.com子域,这可能是CloudFormation问题。