5

Elastic Beanstalk Environment ELBにサブドメイン名をエイリアスする正しいRoute 53 CloudFormation設定は何ですか?CloudFormationを使用してElastic Beanstalk環境にドメイン名をエイリアスする方法は?

私はマッピングにAmazon Route 53 Hosted Zone IDテーブルからHostedZoneId Sをコピーした:

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

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

私のリソースは2つのBeanstalkの環境を持っていますprod Beanstalk環境が動作しています。つまり、 MyStageBeanstalkEnv.eu-west-1.elasticbeanstalk.comへのコールに応答し、{ "Fn::GetAtt" : [ "MyStageBeanstalkEnv", "EndpointURL" ] }awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.comのように見える)によって返されたエンドポイントも応答します。 ドメイン名がstage.example.comまたはprod.example.comのいずれかであることが予想されるため、証明書は無効です。私はCloudFormationスタックを更新しようとすると

"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


今、私はルート53の構成を追加しよう:00 UTC + 0200 CREATE_FAILED AWS :: Route53 :: RecordSetGroup ExampleDomainRecordSetGroup awseb- [abc-123-xyz] .eu-west-1.elb.amazonaws.com。をターゲットとするエイリアスを作成しようとしましたが、ゾーンZ2NYPWQ7DFZAZHにAと入力し、エイリアスのターゲット名は気が付いていません目標ゾーン内にある

ここで、awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.comは、Beanstalk ELBが提供するのと同じURLです。


コメント:

  • 私が正常に説明To add an alias resource record set in Amazon Route 53以下AWSコンソールで同じ豆の木環境にセットアップルート53のエイリアスリソースレコードを管理しているので、それは転送について「単なる」質問ですこれらの設定手順はCloudFormationテンプレートに適用されます。
  • スタックはeu-west-1に配置されています。
  • AWS::Route53::RecordSetGroupリソースを使用する代わりに、2つの別々のAWS::Route53::RecordSetリソースを作成しようとしましたが、同じエラーでスタックの更新に失敗しました。

答えて

5

いくつかのグーグルは、別名を設定するとき(12)​​が使用できないことを示唆しました。 eu-west-1には、elasticbeanstalk.eu-west-1.amazonaws.comエンドポイントのホストゾーンID Z2NYPWQ7DFZAZHが含まれています。言い換えれば

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

は、ホストされたゾーン名のIDが異なります。しかし、豆の木が実際にAWS CLIを使用して生成されたもののELBの設定をダブルチェックするときに私がいることを発見しました。さらに、CanonicalHostedZoneNameは、AliasTargetDNSNameと等しく、awseb-[abc-123-xyz].eu-west-1.elb.amazonaws.comであり、​​で使用されるelasticbeanstalk.eu-west-1.amazonaws.comと同じエンドポイントではありません。したがって、私は、CLI出力から提供CanonicalHostedZoneNameIDが含まれるようにマッピングを変更:

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

今、スタックが正常に更新することができます。残念ながらeu-west-1の場合のみですが、他の領域にスタックをデプロイする場合は、手順を更新することができます。

スタックが更新された後も、DNS名(stable.example.comおよびunstable.example.com)からの応答はありませんでした。 Updating Your Registrar's Name Serversはその問題を解決しました。

+0

私は同じ問題に遭遇しました。あなたの答えを理解してから、すでに存在していないEB環境用のホストゾーンIDをマップする方法はないようですね。つまり、代わりにELBを指すCNAMEを作成する必要があります(これはCFNテンプレートから取得できる唯一の出力です) または、CononicalHostedZoneNameIDを取得してエイリアスレコードとマップを作成する方法はありますか恒久的な方法で、私のテンプレートのための領域ごとに? あなたがCLIで引っ張ったZ3NF1Z3NOM5OY2は、amazonドキュメントの標準Route53エンドポイントではないようです。 – Marty

+0

同じ問題があります。 CanonicalHostedZoneNameIdをCFNテンプレートで取得できないと信じられないほどです!環境ごとにハードコーディングを除いて他の解決策が見つかった場合は、更新してください。 –

1

CloudFrontのRoute53エイリアスと同じ問題がありました。 私はこれを見つける私はHostedZOneIdマッピングを構築するが、それは私のために働いたことはない、AWSのドキュメントを検索して :

ホストされているゾーンIDを。

ロードバランサの場合、ロードバランサの正規のホストゾーンIDを使用します。

Amazon S3では、バケットのWebサイトエンドポイントにホストゾーンIDを使用します。

CloudFrontには、Z2FDTNDATAQYW2を使用してください。

他のサービスのホストゾーンIDのリストについては、「AWSリージョンとエンドポイント」の関連サービスを参照してください。

だから私はちょうどそれをハードコーディングされた:

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

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

関連する問題