を使用して DNS クエリと API コールで AWS Cloud Map サービス検出を使用する方法について説明します。 AWS CLI - AWS Cloud Map

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して DNS クエリと API コールで AWS Cloud Map サービス検出を使用する方法について説明します。 AWS CLI

このチュートリアルでは、 AWS Command Line Interface (CLI) を使用して AWS Cloud Map サービス検出を使用する方法を示します。2 つのバックエンドサービスを使用してマイクロサービスアーキテクチャを作成します。1 つは DNS クエリを使用して検出可能、もう 1 つは AWS Cloud Map API のみを使用して検出可能です。

AWS Cloud Map コンソールの手順を含むチュートリアルについては、「」を参照してくださいDNS クエリと API コールで AWS Cloud Map サービス検出を使用する方法について説明します。

前提条件

チュートリアルを正常に完了するには、次の前提条件を満たす必要があります。

  • 開始する前に、「を使用するように をセットアップする AWS Cloud Map」のステップを完了します。

  • をまだインストールしていない場合は AWS Command Line Interface、「 の最新バージョンのインストールまたは更新 AWS CLI」の手順に従ってインストールします。

    このチュートリアルでは、コマンドを実行するためのコマンドラインターミナルまたはシェルが必要です。Linux および macOS では、任意のシェルとパッケージマネージャーを使用してください。

    注記

    Windows では、Lambda でよく使用される一部の Bash CLI コマンド (zip など) が、オペレーティングシステムの組み込みターミナルでサポートされていません。Ubuntu および Bash の Windows 統合バージョンを取得するには、Windows Subsystem for Linux をインストールします。

  • このチュートリアルでは、digDNS ルックアップユーティリティコマンドを使用するローカル環境が必要です。

AWS Cloud Map 名前空間を作成する

まず、パブリック AWS Cloud Map 名前空間を作成します。 AWS Cloud Map は、同じ名前の Route 53 ホストゾーンを作成し、DNS レコードと API コールの両方でサービス検出を有効にします。

  1. パブリック DNS 名前空間を作成します。

    aws servicediscovery create-public-dns-namespace \ --name cloudmap-tutorial.com \ --creator-request-id cloudmap-tutorial-request-1 \ --region us-east-2

    コマンドは、名前空間作成のステータスをチェックするために使用できるオペレーション ID を返します。

    { "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd" }
  2. オペレーションステータスをチェックして、名前空間が正常に作成されたことを確認します。

    aws servicediscovery get-operation \ --operation-id gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd \ --region us-east-2
  3. オペレーションが成功したら、名前空間 ID を取得します。

    aws servicediscovery list-namespaces \ --region us-east-2 \ --query "Namespaces[?Name=='cloudmap-tutorial.com'].Id" \ --output text

    このコマンドは、後続のステップに必要な名前空間 ID を返します。

    ns-abcd1234xmplefgh

AWS Cloud Map サービスを作成する

次に、名前空間内に 2 つのサービスを作成します。最初のサービスは DNS コールと API コールの両方を使用して検出でき、2 番目のサービスは API コールのみを使用して検出できます。

  1. DNS 検出を有効にして最初のサービスを作成します。

    aws servicediscovery create-service \ --name public-service \ --namespace-id ns-abcd1234xmplefgh \ --dns-config "RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=300}]" \ --region us-east-2

    コマンドは、作成されたサービスの詳細を返します。

    { "Service": { "Id": "srv-abcd1234xmplefgh", "Arn": "arn:aws:servicediscovery:us-east-2:123456789012:service/srv-abcd1234xmplefgh", "Name": "public-service", "NamespaceId": "ns-abcd1234xmplefgh", "DnsConfig": { "NamespaceId": "ns-abcd1234xmplefgh", "RoutingPolicy": "MULTIVALUE", "DnsRecords": [ { "Type": "A", "TTL": 300 } ] }, "CreateDate": 1673613600.000, "CreatorRequestId": "public-service-request" } }
  2. API のみの検出を使用して 2 番目のサービスを作成します。

    aws servicediscovery create-service \ --name backend-service \ --namespace-id ns-abcd1234xmplefgh \ --type HTTP \ --region us-east-2

    コマンドは、作成されたサービスの詳細を返します。

    { "Service": { "Id": "srv-ijkl5678xmplmnop", "Arn": "arn:aws:servicediscovery:us-east-2:123456789012:service/srv-ijkl5678xmplmnop", "Name": "backend-service", "NamespaceId": "ns-abcd1234xmplefgh", "Type": "HTTP", "CreateDate": 1673613600.000, "CreatorRequestId": "backend-service-request" } }

AWS Cloud Map サービスインスタンスを登録する

次に、各サービスのサービスインスタンスを登録します。これらのインスタンスは、検出される実際のリソースを表します。

  1. DNS 検出用の IPv4 アドレスに最初のインスタンスを登録します。

    aws servicediscovery register-instance \ --service-id srv-abcd1234xmplefgh \ --instance-id first \ --attributes AWS_INSTANCE_IPV4=192.168.2.1 \ --region us-east-2

    コマンドはオペレーション ID を返します。

    { "OperationId": "4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd" }
  2. オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。

    aws servicediscovery get-operation \ --operation-id 4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd \ --region us-east-2
  3. 2 番目のインスタンスを API 検出用のカスタム属性に登録します。

    aws servicediscovery register-instance \ --service-id srv-ijkl5678xmplmnop \ --instance-id second \ --attributes service-name=backend \ --region us-east-2

    コマンドはオペレーション ID を返します。

    { "OperationId": "7zxcvbnmasdfghjklqwertyuiop1234-k9xmplyzd" }
  4. オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。

    aws servicediscovery get-operation \ --operation-id 7zxcvbnmasdfghjklqwertyuiop1234-k9xmplyzd \ --region us-east-2

AWS Cloud Map サービスインスタンスを検出する

サービスインスタンスを作成して登録したので、DNS クエリと AWS Cloud Map API の両方を使用してそれらを検出することで、すべてが機能していることを確認できます。

  1. まず、Route 53 ホストゾーン ID を取得します。

    aws route53 list-hosted-zones-by-name \ --dns-name cloudmap-tutorial.com \ --query "HostedZones[0].Id" \ --output text

    これにより、ホストゾーン ID が返されます。

    /hostedzone/Z1234ABCDXMPLEFGH
  2. ホストゾーンのネームサーバーを取得します。

    aws route53 get-hosted-zone \ --id Z1234ABCDXMPLEFGH \ --query "DelegationSet.NameServers[0]" \ --output text

    これにより、ネームサーバーの 1 つが返されます。

    ns-1234.awsdns-12.org
  3. dig コマンドを使用して、パブリックサービスの DNS レコードをクエリします。

    dig @ns-1234.awsdns-12.org public-service.cloudmap-tutorial.com

    出力には、サービスに関連付けられた IPv4 アドレスが表示されます。

    ;; ANSWER SECTION: public-service.cloudmap-tutorial.com. 300 IN A 192.168.2.1
  4. を使用してバックエンドサービスインスタンス AWS CLI を検出します。

    aws servicediscovery discover-instances \ --namespace-name cloudmap-tutorial.com \ --service-name backend-service \ --region us-east-2

    出力には、サービスに関連付けられた属性が表示されます。

    { "Instances": [ { "InstanceId": "second", "NamespaceName": "cloudmap-tutorial.com", "ServiceName": "backend-service", "HealthStatus": "UNKNOWN", "Attributes": { "service-name": "backend" } } ], "InstancesRevision": 71462688285136850 }

リソースをクリーンアップする

チュートリアルを完了したら、料金が発生しないようにリソースをクリーンアップします。 AWS Cloud Map では、サービスインスタンスを最初に、次にサービス、最後に名前空間という逆の順序でクリーンアップする必要があります。

  1. 最初のサービスインスタンスの登録を解除します。

    aws servicediscovery deregister-instance \ --service-id srv-abcd1234xmplefgh \ --instance-id first \ --region us-east-2
  2. 2 番目のサービスインスタンスの登録を解除します。

    aws servicediscovery deregister-instance \ --service-id srv-ijkl5678xmplmnop \ --instance-id second \ --region us-east-2
  3. パブリックサービスを削除します。

    aws servicediscovery delete-service \ --id srv-abcd1234xmplefgh \ --region us-east-2
  4. バックエンドサービスを削除します。

    aws servicediscovery delete-service \ --id srv-ijkl5678xmplmnop \ --region us-east-2
  5. 名前空間を削除します。

    aws servicediscovery delete-namespace \ --id ns-abcd1234xmplefgh \ --region us-east-2
  6. Route 53 ホストゾーンが削除されていることを確認します。

    aws route53 list-hosted-zones-by-name \ --dns-name cloudmap-tutorial.com