

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 DNS 쿼리 및 API 호출과 함께 AWS Cloud Map 서비스 검색을 사용하는 방법을 알아봅니다. AWS CLI
<a name="tutorial-private-namespace-cli"></a>

이 자습서에서는 AWS Command Line Interface (CLI)를 사용하여 AWS Cloud Map 서비스 검색을 사용하는 방법을 보여줍니다. 두 개의 백엔드 서비스로 마이크로서비스 아키텍처를 생성합니다. 하나는 DNS 쿼리를 사용하여 검색할 수 있고 다른 하나는 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 CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 단계에 AWS Command Line Interface따라 설치합니다.

  이 자습서에서는 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. Linux 및 macOS에서는 선호하는 셸과 패키지 관리자를 사용합니다.
**참고**  
Windows에서는 Lambda와 함께 일반적으로 사용하는 일부 Bash CLI 명령(예:`zip`)은 운영 체제의 기본 제공 터미널에서 지원되지 않습니다. Ubuntu와 Bash의 Windows 통합 버전을 가져오려면 [Linux용 Windows Subsystem을 설치](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>

이제 네임스페이스 내에 두 개의 서비스를 생성합니다. 첫 번째 서비스는 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"
       }
   }
   ```

1. 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 서비스 인스턴스 등록
<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. 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
   ```

   그러면 이름 서버 중 하나가 반환됩니다.

   ```
   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. 두 번째 서비스 인스턴스 등록을 취소합니다.

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