기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
를 사용하여 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 CLI 단계에 AWS Command Line Interface따라 설치합니다.
이 자습서에서는 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. Linux 및 macOS에서는 선호하는 셸과 패키지 관리자를 사용합니다.
참고
Windows에서는 Lambda와 함께 일반적으로 사용하는 일부 Bash CLI 명령(예:
zip
)은 운영 체제의 기본 제공 터미널에서 지원되지 않습니다. Ubuntu와 Bash의 Windows 통합 버전을 가져오려면 Linux용 Windows Subsystem을 설치합니다. 자습서에는
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 서비스 생성
이제 네임스페이스 내에 두 개의 서비스를 생성합니다. 첫 번째 서비스는 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