

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

# を使用して DNS クエリと API コールで AWS Cloud Map サービス検出を使用する方法について説明します。 AWS CLI
<a name="tutorial-private-namespace-cli"></a>

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

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

## 前提条件
<a name="prerequisites-private-namespace-cli"></a>

チュートリアルを正常に完了するには、次の前提条件を満たす必要があります。
+ 開始する前に、「[を使用するように をセットアップする AWS Cloud Map](setting-up-cloud-map.md)」のステップを完了します。
+ をまだインストールしていない場合は AWS Command Line Interface、[「 の最新バージョンのインストールまたは更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」の手順に従ってインストールします。

  このチュートリアルでは、コマンドを実行するためのコマンドラインターミナルまたはシェルが必要です。Linux および macOS では、任意のシェルとパッケージマネージャーを使用してください。
**注記**  
Windows では、Lambda でよく使用される一部の Bash CLI コマンド (`zip` など) が、オペレーティングシステムの組み込みターミナルでサポートされていません。Ubuntu および Bash の Windows 統合バージョンを取得するには、[Windows Subsystem for Linux をインストール](https://learn.microsoft.com/en-us/windows/wsl/install)します。
+ このチュートリアルでは、`dig`DNS ルックアップユーティリティコマンドを使用するローカル環境が必要です。

## AWS Cloud Map 名前空間を作成する
<a name="create-an-aws-cloud-map-private-namespace-cli"></a>

まず、パブリック 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"
   }
   ```

1. オペレーションステータスをチェックして、名前空間が正常に作成されたことを確認します。

   ```
   aws servicediscovery get-operation \
       --operation-id gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd \
       --region us-east-2
   ```

1. オペレーションが成功したら、名前空間 ID を取得します。

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

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

   ```
   ns-abcd1234xmplefgh
   ```

## AWS Cloud Map サービスを作成する
<a name="create-the-aws-cloud-map-services-private-namespace-cli"></a>

次に、名前空間内に 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"
       }
   }
   ```

1. 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 サービスインスタンスを登録する
<a name="register-the-aws-cloud-map-service-instances-private-namespace-cli"></a>

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

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

1. オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。

   ```
   aws servicediscovery get-operation \
       --operation-id 4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd \
       --region us-east-2
   ```

1. 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"
   }
   ```

1. オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。

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

## AWS Cloud Map サービスインスタンスを検出する
<a name="discover-the-aws-cloud-map-service-instances-private-namespace-cli"></a>

サービスインスタンスを作成して登録したので、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
   ```

1. ホストゾーンのネームサーバーを取得します。

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

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

   ```
   ns-1234.awsdns-12.org
   ```

1. `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
   ```

1. を使用してバックエンドサービスインスタンス 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
   }
   ```

## リソースをクリーンアップする
<a name="clean-up-the-resources-private-namespace-cli"></a>

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

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

   ```
   aws servicediscovery deregister-instance \
       --service-id srv-abcd1234xmplefgh \
       --instance-id first \
       --region us-east-2
   ```

1. 2 番目のサービスインスタンスの登録を解除します。

   ```
   aws servicediscovery deregister-instance \
       --service-id srv-ijkl5678xmplmnop \
       --instance-id second \
       --region us-east-2
   ```

1. パブリックサービスを削除します。

   ```
   aws servicediscovery delete-service \
       --id srv-abcd1234xmplefgh \
       --region us-east-2
   ```

1. バックエンドサービスを削除します。

   ```
   aws servicediscovery delete-service \
       --id srv-ijkl5678xmplmnop \
       --region us-east-2
   ```

1.  名前空間を削除します。

   ```
   aws servicediscovery delete-namespace \
       --id ns-abcd1234xmplefgh \
       --region us-east-2
   ```

1. Route 53 ホストゾーンが削除されていることを確認します。

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