AWS CloudFormation を使用して Route 53 レコードセットを作成するときに発生するエラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

AWS CloudFormation を使用して Amazon Route 53 リソースレコードセットを作成したときに発生するエラーを解決したいです。

解決策

AWS CloudFormation テンプレートを使用して Route 53 レコードセットを作成しようとしたときに発生する可能性のある一般的なエラーを次に示します。問題を解決するには、各エラーに記載されているガイドラインに従ってください。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

エラー: 「domain.com という名前のホストゾーンが見つかりません」

このエラーは、CloudFormation が HostedZoneName プロパティに定義されているホストゾーン名を識別できない場合に発生します。このエラーを解決するには、次の手順をチェックします。

  • **HostedZoneName ** プロパティに渡された値を確認し、末尾にピリオド (.) が含まれていることを確認します。ホストゾーン名 (domain.com など) は、末尾にピリオドがないと無効です。
    例:

     SampleRecordSet:
        Type: AWS::Route53::RecordSet
        Properties:
          HostedZoneName: "domain.com."  #note trailing dot
          Name: image1.domain.com
          Type: CNAME
          TTL: '60'
          ResourceRecords:
           - new.example

    ホストゾーン名の末尾に既にピリオドが含まれている場合は、その名前のホストゾーンが AWS アカウントに既に存在するかどうかを確認してください。レコードセットを作成する前に、次の AWS CLI コマンドを使用して、ホストゾーン名が使用可能であることを確認します。

    aws route53 list-hosted-zones \                                                   
     --query 'HostedZones[?Name==`YOUR-HOSTED-ZONE-NAME`]'

    注: 上記のコマンドの 「YOUR-HOSTED-ZONE-NAME」 は、実際の CloudFormation スタックの HostedZoneName プロパティに渡された値に置き換えてください。

  • 上記のコマンドでレコードが返されない場合、そのホストゾーンはアカウントで使用可能となっていません。このエラーを解決するには、RecordSet を作成する前にホストゾーンを作成します。

エラー: 「DNS 名 a.domain.com の RRSet は、ゾーン domain-test.com では許可されません。」

このエラーは、AWS::Route53::RecordSet リソースの Name プロパティに渡された DNS 値がホストゾーンと一致しない場合に表示されます。問題を解決するには、次のオプションを確認してください。

  • AWS::Route53::RecordSet リソースの Name プロパティに渡される値は、完全修飾ドメイン名である必要があります。DNS レコードセットに完全修飾名を渡していることを確認してください。たとえば、ドメインが domain.com の場合は、名前は a.domain.com のような形式である必要があります。「a」だけを渡した場合、完全修飾ドメイン名ではないことから、エラーが発生して失敗することがあります。
  • DNS 名はホストゾーンのサブドメインである必要があります。たとえば、ホストゾーンの名前が domain-test.com. の場合、レコードセットの Name プロパティは、xxxxx.domain-test.com のような形式である必要があります。

エラー: 「次の ID を持つホストゾーンが見つかりません。 Z1234567XXXXXXXXXX」

このエラーメッセージは、HostedZoneID プロパティに渡された値が、アカウントに関連付けられていると確認できない場合に発生します。このエラーを解決するには、次のオプションをチェックしてください。

  • AWS::Route53::RecordSet リソースのためにスタックに指定したホストゾーン ID の値が正しいことと、お使いの AWS アカウントにあることを確認してください。

  • 次の AWS CLI コマンドを使用して、ホストゾーン ID がアカウントで使用可能となっているかどうかを確認します。

     aws route53 get-hosted-zone --id Z1234567XXXXXXXXXX
  • 上記のコマンドでエラーが返された場合、ホストゾーン ID は AWS アカウントで使用可能になっていません。AWS::Route53::RecordSet リソースの HostedZoneID プロパティに有効なホストゾーン ID 値を渡し、スタックを再度作成してください。こうすることで、レコードセットが Route 53 内の実際のホストゾーンに関連付けられます。

エラー: 「ホストゾーン名 domain.com のホストゾーンが重複しています。」

Route 53 には同じ名前で複数のホストゾーンを作成できます。HostedZoneName プロパティを渡して AWS::Route53::RecordSet リソースの作成を試行します。ただし、同じ名前のホストゾーンが複数ある場合は、エラーメッセージが表示されます。

このエラーを修正するには、AWS::Route53::RecordSet リソースで HostedZoneName プロパティを定義しないでください。代わりに、HostedZoneID プロパティを定義します。次に、レコードセットを作成するゾーン ID を渡します。例:

 SampleRecordSet:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: "Z1234567XXXXXXXXXX"
      Name: image1.domain.com
      Type: CNAME
      TTL: '60'
      ResourceRecords:
       - new.example

エラー: 「[Action=CREATE, Name=a.domain.com., Type=A, SetIdentifier=null] の変更においては、[AliasTarget、すべての [TTL および ResourceRecords]、または TrafficPolicyInstanceId] のいずれかを想定していますが、どれも見つかりませんでした」

このエラーは、テンプレートで AWS::Route53::RecordSet リソースの必須プロパティをすべて定義していない場合に発生します。すべての Route 53 レコードセットリソースで、特定の設定プロパティを設定する必要があります。これらの必須プロパティがテンプレートにない場合、エラーが発生します。このエラーを解決するには、次のオプションをチェックしてください。

  • AWS::Route53::RecordSet リソースで、AliasTarget プロパティ、または、TTL および ResourceRecords の両プロパティを定義します。

  • AWS::Route53::RecordSetAliasTarget プロパティを定義した場合は、同一リソース内で TTL または ResourceRecords プロパティを定義しないでください。

    AliasTarget プロパティのみを定義し、TTL および ResourceRecords プロパティは定義しない方法については、次の例を参照してください。

    SampleR53AliasRecord:
        Type: AWS::Route53::RecordSet
        Properties:
          Name: 'abc.domain.com'
          Type: A
          AliasTarget:
            DNSName: !GetAtt MyELB.DNSName
            HostedZoneId: !GetAtt MyELB.CanonicalHostedZoneNameID
          HostedZoneId: "Z1234567XXXXXXXXXX"
  • AliasTarget プロパティを定義していない場合は、TTL プロパティと ResourceRecords プロパティの両方が定義済みかどうかを確認してください。

  • これらのプロパティの片方だけを定義した場合も、エラーになります。**ResourceRecords ** プロパティを定義する場合、テンプレートで TTL プロパティも定義する必要があります。同様に、TTL を定義する場合は、ResourceRecords も定義する必要があります。

    次の例は、TTL プロパティと ResourceRecords プロパティのみを定義する方法を示しています。

    SampleRecordSet:
        Type: AWS::Route53::RecordSet
        Properties:
          HostedZoneId: "Z1234567XXXXXXXXXX"
          Name: image1.domain.com
          Type: CNAME
          TTL: '60'
          ResourceRecords:
           - new.example

エラー: 「リソースレコードセット [name='a.domain.com.', type='A', set-identifier='null'] を作成しようとしましたが、既に存在しています」

同じ名前のエイリアスレコードセットが既に含まれているホストゾーンにエイリアスレコードセットを作成しようとしました。このエラーを解決するには、次のオプションをチェックしてください。

  • 正しいホストゾーン内でエイリアスレコードセットを作成しようとしていることを確認します。ホストゾーン ID または名前が、エイリアスレコードセットを作成するゾーンと一致することを確認します。
  • CloudFormation を使用して作成しようとしている A または CNAME レコードタイプがホストゾーンに既にあるかどうかを確認します。次の AWS CLI コマンドを使用して、リソースレコードがホストゾーンで既に使用可能となっているかどうかを確認できます。
    aws route53 list-resource-record-sets \
    --hosted-zone-id YOUR-HOSTED-ZONE-NAME \
    --query 'ResourceRecordSets[?(Name==`YOUR-RESOURCE-RECORD-NAME` && Type==`YOUR-TYPE-OF-RECORD`)]
    注: 上記のコマンドの YOUR-HOSTED-ZONE-NAME、YOUR-RESOURCE-RECORD-NAME、YOUR-TYPE-OF-RECORD は、エラーメッセージに記載された正確な値で置き換えてください。
  • 上記のコマンドで値が返される場合は、CloudFormation を使用してこのレコードをホストゾーンから削除してから作成してください。このレコードをホストゾーンから手動で削除する前に、アプリケーションの影響評価を実施してください。その手順を実行する前に、このレコードを削除するとアプリケーションにどのような影響があるかを慎重に検討してください。

関連情報

エラー

AWS::Route53::RecordSet

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ