本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解如何使用 搭配 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 呼叫啟用服務探索。
-
建立公有 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,您需要此 ID 才能進行後續步驟:
ns-abcd1234xmplefgh
建立 AWS Cloud Map 服務
現在,在您的命名空間中建立兩項服務。第一個服務將可使用 DNS 和 API 呼叫來探索,而第二個服務將只能使用 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 探索建立第二個服務:
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
-
使用 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
這會傳回其中一個名稱伺服器:
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
-
取消註冊第二個服務執行個體:
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