5

Cấu hình CloudFormation Tuyến đường 53 chính xác là gì để đặt bí danh tên miền phụ cho các ELB của Môi trường Đàn hồi?Làm thế nào để bí danh một tên miền cho một môi trường cây đậu đàn hồi bằng cách sử dụng CloudFormation?

Tôi đã copy HostedZoneId s từ bảng Amazon Route 53 Hosted Zone ID để ánh xạ:

"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" } 
} 

nguồn lực của tôi có hai cây đậu môi trường:

"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" }, 
    [...] 
    } 
}, 

Đầu ra:

"StageEndpoint" : { 
    "Description" : "endpoint of the stage environment", 
    "Value" : { "Fn::GetAtt" : [ "MyStageBeanstalkEnv", "EndpointURL" ] } 
}, 
"ProdEndpoint" : { 
    "Description" : "endpoint of the production environment", 
    "Value" : { "Fn::GetAtt" : [ "MyProdBeanstalkEnv", "EndpointURL" ] } 
} 

Cả hai giai đoạn và các môi trường beanstalk prod đang hoạt động, tức là chúng trả lời các cuộc gọi đến MyStageBeanstalkEnv.eu-west-1.elasticbeanstalk.com cũng như các điểm cuối được trả về bởi { "Fn::GetAtt" : [ "MyStageBeanstalkEnv", "EndpointURL" ] } (trông giống như awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com). Không có gì đáng ngạc nhiên, chứng chỉ không hợp lệ vì tên miền dự kiến ​​là stage.example.com hoặc prod.example.com.


Bây giờ tôi cố gắng để thêm Route 53 cấu hình:

"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" 
    }] 
    } 
}, 

Khi tôi cố gắng cập nhật các CloudFormation chồng tôi nhận được lỗi sau trong AWS console:

16:12 : 00 UTC + 0200 CREATE_FAILED AWS :: Route53 :: RecordSetGroup ExampleDomainRecordSetGroup Đã cố gắng tạo một bí danh nhắm vào awseb- [abc-123-xyz] .eu-west-1.elb.amazonaws.com., Gõ A trong vùng Z2NYPWQ7DFZAZH, nhưng tên mục tiêu bí danh không nói dối hin khu vực mục tiêu

Trong ngữ cảnh này, awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com là cùng một url được cung cấp bởi cây đậu ELB.


Bình luận:

  • tôi đã thành công trong việc thiết lập Route bản ghi tài nguyên 53 bí danh cho cây đậu môi trường tương tự trong AWS console sau mô tả To add an alias resource record set in Amazon Route 53, vì vậy nó là "chỉ là" một câu hỏi về việc chuyển các bước cấu hình này cho mẫu CloudFormation.
  • Ngăn xếp được triển khai trong eu-west-1.
  • Thay vì sử dụng tài nguyên AWS::Route53::RecordSetGroup Tôi cũng đã cố gắng tạo hai tài nguyên riêng biệt AWS::Route53::RecordSet, nhưng cập nhật ngăn xếp không thành công với cùng một lỗi.

Trả lời

5

Một số Googling gợi ý rằng (1, 2) không thể sử dụng Amazon Route 53 Hosted Zone ID khi định cấu hình bí danh. Được nêu rằng eu-west-1 có ID vùng được lưu trữ Z2NYPWQ7DFZAZH cho điểm cuối elasticbeanstalk.eu-west-1.amazonaws.com. Tuy nhiên, khi kiểm tra lại cấu hình ELB của những gì Beanstalk thực sự được tạo ra bằng cách sử dụng AWS CLI, tôi thấy rằng:

$ aws elb describe-load-balancers --region eu-west-1 
{ 
    "LoadBalancerDescriptions": [ 
     { 
      [...] 
      "CanonicalHostedZoneNameID": "Z3NF1Z3NOM5OY2", 
      "CanonicalHostedZoneName": "awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com", 
     } 
    ] 
} 

Nói cách khác, tên vùng lưu trữ khác nhau.Hơn nữa, CanonicalHostedZoneName bằng DNSName trong AliasTarget, tức là awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.com, không phải là điểm cuối giống như elasticbeanstalk.eu-west-1.amazonaws.com được sử dụng trong Amazon Route 53 Hosted Zone ID. Do đó, tôi đã thay đổi ánh xạ để bao gồm CanonicalHostedZoneNameID được cung cấp từ đầu ra CLI:

"Beanstalk2Route53HostedZoneId" : { 
    "eu-west-1" : { "HostedZoneId": "Z3NF1Z3NOM5OY2" } 
} 

Bây giờ ngăn xếp có thể được cập nhật thành công. Đáng tiếc là chỉ cho eu-west-1, nhưng thủ tục có thể được cập nhật nếu/khi tôi triển khai ngăn xếp đến các khu vực khác.

Sau khi ngăn xếp được cập nhật, vẫn không có phản hồi từ tên DNS (stable.example.comunstable.example.com). Updating Your Registrar's Name Servers đã giải quyết được sự cố đó.

+0

tôi đã chạy vào cùng một vấn đề. Có vẻ như, từ sự hiểu biết của tôi về câu trả lời của bạn, rằng không có cách nào để ánh xạ ID vùng được lưu trữ cho một môi trường EB chưa tồn tại? tức là tôi sẽ phải tạo một CNAME trỏ tới ELB thay vì (vì đó là đầu ra duy nhất tôi có thể lấy từ bên trong mẫu CFN?) Hoặc có cách nào để có được CononicalHostedZoneNameID để tạo ra một bản ghi Alias ​​và bản đồ nó một cách vĩnh viễn, mỗi khu vực cho, các mẫu của tôi? Tôi hỏi, vì Z3NF1Z3NOM5OY2 mà bạn đã kéo bằng CLI dường như không phải là bất kỳ điểm cuối Route53 chuẩn nào mà tài liệu amazon. – Marty

+0

Có cùng một vấn đề. Không thể tin được rằng bạn không thể lấy CanonicalHostedZoneNameId trong mẫu CFN! Vui lòng cập nhật nếu bạn tìm thấy bất kỳ giải pháp nào khác ngoài mã hóa cứng cho mỗi môi trường. –

1

Tôi có cùng sự cố với Route53 Alias ​​cho CloudFront. tôi xây dựng bản đồ HostedZOneId nhưng nó không bao giờ làm việc cho tôi, bằng cách tìm kiếm tài liệu AWS Tôi tìm thấy điều này:

Các tổ chức ID khu vực.

Đối với cân bằng tải, hãy sử dụng ID vùng được lưu trữ chuẩn của trình cân bằng tải.

Đối với Amazon S3, hãy sử dụng ID vùng được lưu trữ cho điểm cuối trang web của nhóm của bạn.

Đối với CloudFront, sử dụng Z2FDTNDATAQYW2.

Để biết danh sách ID khu vực được lưu trữ của các dịch vụ khác, hãy xem dịch vụ có liên quan trong Khu vực và Điểm cuối AWS.

Vì vậy, tôi chỉ mã hóa cứng nó:

"AliasTarget": { 
    "HostedZoneId": "Z2FDTNDATAQYW2", 
    "DNSName": { 
     "Fn::GetAtt": ["MyCloudFrontDistribution", "DomainName"] 
    } 
} 

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html

Các vấn đề liên quan