将子域名别名到弹性Beanstalk环境ELBs的正确路由配置是什么?
我已将Amazon Route 53托管区域ID表中的HostedZoneId
s复制到映射:
"Beanstalk2Route53HostedZoneId" : {
"us-east-1" : { "HostedZoneId": "Z117KPS5GTRQ2G" },
"us-west-1" : { "HostedZoneId": "Z1LQECGX5PH1X" },
"us-west-2" : { "HostedZoneId": "Z38NKT9BP95V3O" },
"eu-west-1" : { "HostedZoneId": "Z2NYPWQ7DFZAZH" },
"eu-central-1" : { "HostedZoneId": "Z1FRNW7UH4DEZJ" },
"ap-northeast-1" : { "HostedZoneId": "Z1R25G3KIG2GBW" },
"ap-northeast-2" : { "HostedZoneId": "Z3JE5OI70TWKCP" },
"ap-southeast-1" : { "HostedZoneId": "Z16FZ9L249IFLT" },
"ap-southeast-2" : { "HostedZoneId": "Z2PCDNR3VC2G1N" },
"sa-east-1" : { "HostedZoneId": "Z10X7K2B4QSOFV" }
}
我的资源有两个豆茎环境:
"MyBeanstalkConfig": {
"Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
"Properties": {
"OptionSettings": {
{ "Namespace": "aws:elb:listener:80", "OptionName": "ListenerEnabled", "Value" : "false" },
{ "Namespace": "aws:elb:listener:443", "OptionName": "ListenerEnabled", "Value" : "true" },
{ "Namespace": "aws:elb:listener:443", "OptionName": "InstancePort", "Value" : "8081" },
{ "Namespace": "aws:elb:listener:443", "OptionName": "ListenerProtocol", "Value" : "HTTPS" },
{ "Namespace": "aws:elb:listener:443", "OptionName": "SSLCertificateId", "Value" : "arn:aws:iam::[accountNbr]:server-certificate/example-cert-name" },
[...]
}
}
},
"MyStageBeanstalkEnv": {
"Type": "AWS::ElasticBeanstalk::Environment",
"Properties": {
"Description": "Stage Environment",
"TemplateName": { "Ref": "MyBeanstalkConfig" },
[...]
}
},
"MyProdBeanstalkEnv": {
"Type": "AWS::ElasticBeanstalk::Environment",
"Properties": {
"Description": "Production Environment",
"TemplateName": { "Ref": "MyBeanstalkConfig" },
[...]
}
},
输出:
"StageEndpoint" : {
"Description" : "endpoint of the stage environment",
"Value" : { "Fn::GetAtt" : [ "MyStageBeanstalkEnv", "EndpointURL" ] }
},
"ProdEndpoint" : {
"Description" : "endpoint of the production environment",
"Value" : { "Fn::GetAtt" : [ "MyProdBeanstalkEnv", "EndpointURL" ] }
}
阶段和prod Beanstrk环境都在工作,即它们响应对MyStageBeanstalgEnv.eu-west-1.elasticbeanstalk.com
的调用,以及由{"Fn::GetAtt"返回的endpoint:["MyStageBeanstalgEnv","Endpoint URL"]}
(看起来像awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com
)。毫不奇怪,证书是无效的,因为它期望域名是stage.example.com
或prod.example.com
。
现在我尝试添加Route 53配置:
"ExampleDomainHostedZone": {
"Type" : "AWS::Route53::HostedZone",
"Properties" : {
"Name" : "example.com"
}
},
"ExampleDomainRecordSetGroup" : {
"Type" : "AWS::Route53::RecordSetGroup",
"Properties" : {
"HostedZoneId" : { "Ref": "ExampleDomainHostedZone" },
"RecordSets" : [{
"AliasTarget" : {
"DNSName" : { "Fn::GetAtt" : ["MyStageBeanstalkEnv", "EndpointURL"] },
"EvaluateTargetHealth" : false,
"HostedZoneId" : { "Fn::FindInMap" : [ "Beanstalk2Route53HostedZoneId", {"Ref" : "AWS::Region"}, "HostedZoneId" ]}
},
"Name" : "stage.example.com",
"Type": "A"
},
{
"AliasTarget" : {
"DNSName" : { "Fn::GetAtt" : ["MyProdBeanstalkEnv", "EndpointURL"] },
"EvaluateTargetHealth" : false,
"HostedZoneId" : { "Fn::FindInMap" : [ "Beanstalk2Route53HostedZoneId", {"Ref" : "AWS::Region"}, "HostedZoneId" ]}
},
"Name" : "prod.example.com",
"Type": "A"
}]
}
},
当我尝试更新云形成堆栈时,我在AWS控制台中得到以下错误:
16:12:00 UTC 0200CREATE_FAILEDAWS::Route53::RecordSetGroup示例DomainRecordSetGroup尝试创建目标awseb-[abc-123-xyz]的别名。eu-west-1.elb.amazonaws.com.,Z2NYPWQ7DFZAZH区域中的类型A,但别名目标名称不位于目标区域
评论:
有2种方法可以通过别名从Route53连接到弹性豆茎:
foobar.u8k2abcm4.eu-central-1.ElasticBeanstalk.com/
从“Fn::GetAtt”:[“BeanstalkEnvironment”,“EndpointURL”]
返回的值是LoadBalancerendpoint(docs),因此必须使用LoadBalancer映射表,请参见此处(而不是ElasticBeanstalk的映射表)。
不确定它是否/如何在ElasticBeanstrok Env负载不平衡的情况下工作。
我对CloudFront的Route53别名也有同样的问题。我构建了HostedZOneId映射,但它从未对我起作用,通过搜索AWS文档,我发现:
托管区域ID。
对于负载均衡器,请使用负载均衡器的规范托管区域ID。
对于Amazon S3,请使用存储桶的网站终结点的托管区域ID。
对于CloudFront,请使用Z2FDTNDAQYW2。
有关其他服务的托管区域ID的列表,请参阅AWS区域和endpoint中的相关服务。
所以我就硬编码了:
"AliasTarget": {
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": {
"Fn::GetAtt": ["MyCloudFrontDistribution", "DomainName"]
}
}
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
一些谷歌用户暗示(1,2)在配置别名时不能使用Amazon Route 53托管的区域ID。声明eu-west-1
具有elasticbeanstalk.eu-west-1.amazonaws.com
endpoint的托管区域IDZ2NYPWQ7DFZAZH
。但是,当使用AWS CLI仔细检查Beanstalk实际生成的ELB配置时,我发现:
$ aws elb describe-load-balancers --region eu-west-1
{
"LoadBalancerDescriptions": [
{
[...]
"CanonicalHostedZoneNameID": "Z3NF1Z3NOM5OY2",
"CanonicalHostedZoneName": "awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com",
}
]
}
换句话说,托管区域名称id不同。此外,CanonicalHostedZoneName
等于AliasTarget
中的DNSName
,即awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com
,它与亚马逊53号干线托管区ID中使用的elasticbeanstalk.eu-west-1.amazonaws.com
endpoint不同。因此,我更改了映射以包括CLI输出提供的CanonicalHostedZoneNameID
:
"Beanstalk2Route53HostedZoneId" : {
"eu-west-1" : { "HostedZoneId": "Z3NF1Z3NOM5OY2" }
}
现在堆栈可以成功更新了。遗憾的是,仅适用于eu-West-1
,但是如果/当我将堆栈部署到其他区域时,该过程可以更新。
更新堆栈后,仍然没有DNS名称(stable.example.com
和unstable.example.com
)的响应。更新注册商的名称服务器解决了这个问题。
在/var/log/eb-activity.log文件中,我发现了以下错误- tasks:TOP=>db:migrate=>environment(通过运行任务查看完整跟踪)(executor::nonzeroexitstatus) AppDeploystage0/AppDeployPrehook/12_db_migration.sh]:活动失败。
有没有人可以为至少有一个使用KMS密钥加密的环境变量的Lambda发布一个基本的CloudFormation JSON对象,以及创建该密钥的JSON?
是否可以使用CloudFormation使用别名获得KMS密钥ARN?我想对我的AWS帐户中的一个密钥赋予特定的权限。 像下面这样的?
我正在尝试开发一个Spring Cloud微服务,并使用Elastic Beanstalk部署到AWS cloud中。当我搜索部署选项时,我发现了Beanstalk的部署环境。我有一点困惑。我可以在不启动EC2机器的情况下使用Elastic Beanstalk部署我的微服务吗? 在这里,我只接近弹性豆茎服务。使用弹性Beanstalk部署微服务而不启动EC2是可能的吗? 我是AWS世界的初学者。
问题内容: 我建立一个网站,并不会像从指向重新配置的网站来。此外,我使用的证书当然是使用的正确域名制作的,但是我的测试环境进行了调用,从而使安全性无法正常工作。 我目前要做的是配置开发环境,以将域名分配给,以便所有路由到并路由到。 我 没有 使用Apache。我目前正在使用node.js作为我的Web服务器,并且我的开发环境在Mac OS X Lion中。 问题答案: 如果您编辑etc / hos
我在尝试将我的Godaddy域与AWS Elastic Beanstalk实例链接时遇到了这个问题。我发现了很多关于如何将EC2实例与Godaddy上的域链接的文档,但对于Elastic Beanstalk实例却没有。所以我最终得到了这个网址: