了解如何使用 搭配 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 服務探索。您將建立具有兩個後端服務的微服務架構 – 一個可使用 DNS 查詢探索,另一個可使用 AWS Cloud Map API 探索。

如需包含 AWS Cloud Map 主控台步驟的教學課程,請參閱 了解如何搭配 DNS 查詢和 API 呼叫使用 AWS Cloud Map 服務探索

先決條件

必須符合下列先決條件,才能成功完成教學課程。

  • 開始之前,請完成 設定 以使用 AWS Cloud Map 中的步驟。

  • 如果您尚未安裝 AWS Command Line Interface,請依照安裝或更新最新版本的 AWS CLI中的步驟進行安裝。

    本教學課程需使用命令列終端機或 Shell 來執行命令。在 Linux 和 macOS 中,使用您偏好的 Shell 和套件管理工具。

    注意

    在 Windows 中,作業系統的內建終端不支援您常與 Lambda 搭配使用的某些 Bash CLI 命令 (例如 zip)。若要取得 Ubuntu 和 Bash 的 Windows 整合版本,請安裝適用於 Linux 的 Windows 子系統

  • 本教學課程需要具有 dig DNS 查詢公用程式命令的本機環境。

建立 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,您需要此 ID 才能進行後續步驟:

    ns-abcd1234xmplefgh

建立 AWS Cloud Map 服務

現在,在您的命名空間中建立兩項服務。第一個服務將可使用 DNS 和 API 呼叫來探索,而第二個服務將只能使用 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 探索建立第二個服務:

    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. 使用 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

    這會傳回其中一個名稱伺服器:

    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. 取消註冊第二個服務執行個體:

    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