翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用して 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 をインストールします。 このチュートリアルでは、
dig
DNS ルックアップユーティリティコマンドを使用するローカル環境が必要です。
AWS Cloud Map 名前空間を作成する
まず、パブリック AWS Cloud Map 名前空間を作成します。 AWS Cloud Map は、同じ名前の Route 53 ホストゾーンを作成し、DNS レコードと API コールの両方でサービス検出を有効にします。
-
パブリック 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" }
-
オペレーションステータスをチェックして、名前空間が正常に作成されたことを確認します。
aws servicediscovery get-operation \ --operation-id gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd \ --region us-east-2
-
オペレーションが成功したら、名前空間 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 コールのみを使用して検出できます。
-
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" } }
-
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 サービスインスタンスを登録する
次に、各サービスのサービスインスタンスを登録します。これらのインスタンスは、検出される実際のリソースを表します。
-
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" }
-
オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。
aws servicediscovery get-operation \ --operation-id 4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd \ --region us-east-2
-
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" }
-
オペレーションステータスをチェックして、インスタンスが正常に登録されたことを確認します。
aws servicediscovery get-operation \ --operation-id 7zxcvbnmasdfghjklqwertyuiop1234-k9xmplyzd \ --region us-east-2
AWS Cloud Map サービスインスタンスを検出する
サービスインスタンスを作成して登録したので、DNS クエリと AWS Cloud Map API の両方を使用してそれらを検出することで、すべてが機能していることを確認できます。
-
まず、Route 53 ホストゾーン ID を取得します。
aws route53 list-hosted-zones-by-name \ --dns-name cloudmap-tutorial.com \ --query "HostedZones[0].Id" \ --output text
これにより、ホストゾーン ID が返されます。
/hostedzone/Z1234ABCDXMPLEFGH
-
ホストゾーンのネームサーバーを取得します。
aws route53 get-hosted-zone \ --id Z1234ABCDXMPLEFGH \ --query "DelegationSet.NameServers[0]" \ --output text
これにより、ネームサーバーの 1 つが返されます。
ns-1234.awsdns-12.org
-
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
-
を使用してバックエンドサービスインスタンス 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 では、サービスインスタンスを最初に、次にサービス、最後に名前空間という逆の順序でクリーンアップする必要があります。
-
最初のサービスインスタンスの登録を解除します。
aws servicediscovery deregister-instance \ --service-id srv-abcd1234xmplefgh \ --instance-id first \ --region us-east-2
-
2 番目のサービスインスタンスの登録を解除します。
aws servicediscovery deregister-instance \ --service-id srv-ijkl5678xmplmnop \ --instance-id second \ --region us-east-2
-
パブリックサービスを削除します。
aws servicediscovery delete-service \ --id srv-abcd1234xmplefgh \ --region us-east-2
-
バックエンドサービスを削除します。
aws servicediscovery delete-service \ --id srv-ijkl5678xmplmnop \ --region us-east-2
-
名前空間を削除します。
aws servicediscovery delete-namespace \ --id ns-abcd1234xmplefgh \ --region us-east-2
-
Route 53 ホストゾーンが削除されていることを確認します。
aws route53 list-hosted-zones-by-name \ --dns-name cloudmap-tutorial.com