Amazon Web Services 한국 블로그

AWS Cloud Map 출시 – 클라우드 내 애플리케이션 자원 동적 구성 서비스 (서울 리전 포함)

많은 인터넷 서비스 회사들은 마이크로서비스(Microservices) 기반 애플리케이션, 즉 단일 작업을 수행하는 수많은 개별 서비스 형태로 구축하고 있습니다. 마이크로서비스를 사용하는 회사는 작업을 빠르게 반복하고 배포하기를 원하기 때문에 다양한 유형의 클라우드 리소스를 사용하여 구축되고 유동적인 인프라 환경에 배포됩니다.

이전에는 애플리케이션의 위치를 관리하려면 구성 파일을 사용해야 했습니다. 그러나, 마이크로서비스 기반의 애플리케이션이 가지는 종속성은 구성 파일을 통해 쉽게 관리할 수 없을 정도로 순식간에 복잡해 질 수 있습니다. 그 뿐 아니라 많은 애플리케이션이 동적으로 조정되는 컨테이너를 사용하여 트래픽 로드의 변화에 대응합니다.

이 방식은 애플리케이션의 응답성을 높여주지만 새로운 유형의 문제를 유발합니다. 이제는 애플리케이션 구성 요소가 런타임 시 업스트림 서비스를 검색하고 이에 연결해야 하는 것입니다. 동적으로 변화하는 인프라와 마이크로서비스의 이 연결성 문제는 일반적으로 서비스 검색을 통해 해결됩니다.

AWS Cloud Map 소개

AWS Cloud Map은 모든 애플리케이션 구성 요소, 해당 위치, 특성 및 상태 정보를 추적 및 유지해 줍니다. 이제 애플리케이션은 AWS SDK, API 또는 DNS를 사용하여 간단히 Cloud Map에 질의하면 종속성을 검색할 수 있습니다. 이 기능을 사용하면 애플리케이션이 동적으로 조정되고 업스트림 서비스에 직접 연결할 수 있으므로 애플리케이션의 응답성이 향상됩니다.

Cloud Map에 웹 서비스 및 클라우드 리소스를 등록할 때에는 배포 단계 및 버전과 같은 사용자 정의 특성을 입력할 수 있습니다. 그러면 애플리케이션은 필요한 배포 단계 및 버전을 지정하면서 검색 호출을 제출할 수 있으며 AWS Cloud Map은 제공된 파라미터에 일치하는 리소스의 위치를 반환하게 됩니다. 이 방식은 애플리케이션의 배포 과정을 간소화하고 운용 복잡성을 줄여 줍니다.

또한 AWS Cloud Map에 등록된 IP 기반 리소스의 상태를 확인하는 기능이 통합되어 비정상적인 엔드포인트로 트래픽이 라우팅되는 것이 자동으로 차단됩니다. 그 뿐 아니라 서비스 상태 정보를 설명하는 API를 사용하여 인프라의 잠재적 문제를 발견할 수 있습니다. 이 기능은 애플리케이션의 복원력을 향상해 줍니다.

AWS Cloud Map의 작동 방식
AWS Cloud Map은 쉽게 시작할 수 있습니다. 먼저 AWS 콘솔 또는 CLI를 사용하여 myapp.com과 같은 네임스페이스를 생성합니다. 이 예에서는 CLI를 사용해 보겠습니다. 다음과 같이 네임스페이스를 생성합니다.

aws servicediscovery create-public-dns-namespace --name myapp.com (http://myapp.com/)

이 시점에서 애플리케이션이 AWS SDK 및 API 호출만 사용하여 리소스를 검색할 것인지 DNS를 통한 검색 옵션도 필요한 지를 결정해야 합니다. 네임스페이스에 대한 DNS 검색을 활성화할 때에는 등록할 모든 리소스에 대해 IP 주소를 제공해야 합니다. ARN을 사용하는 DynamoDB 테이블 또는 Amazon API Gateway에 배포된 API의 URL과 같은 다른 클라우드 서비스를 등록할 계획이라면 API 검색 모드를 선택해야 합니다.

네임스페이스가 생성되었으면 서비스를 생성할 차례입니다. 서비스는 users , auth 또는 payment와 같은 애플리케이션 구성 요소를 나타내며 동적으로 변화하는 수많은 리소스로 구성될 수 있습니다. 서비스에 대해 친숙한 이름을 지정할 수 있으며 그런 다음 DNS 검색 및 상태 확인 옵션을 선택합니다. 다음과 같이 서비스를 생성할 수 잇습니다.

aws servicediscovery create-service --name frontend --namespace-id %namespace_id%”

서비스를 생성한 후에는 사용자 정의 특성과 함께 서비스 인스턴스를 등록할 수 있습니다.

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.1,stage=beta,version=1.0,active=yes

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.2,stage=beta,version=2.0,active=no

이제 애플리케이션은 API 호출을 통해 서비스 인스턴스를 검색할 수 있으며 선택적으로 결과를 필터링할 수 있는 쿼리 파라미터가 제공됩니다.

aws servicediscovery discover-instances --namespace-name myapp.com --service-name frontend --query-parameters version=1.0,active=yes
-->
{
"Instances": [
{
"InstanceId": "1",
"NamespaceName": "myapp.com",
"ServiceName": "users",
"HealthStatus": "HEALTHY",
"Attributes": {
"version":"1.0",
"active":"yes",
"stage":"beta",
"AWS_INSTANCE_IPV4": "54.20.10.2" }
}
]
}

이것으로 설정이 완료되었습니다! 현재 Amazon Elastic Container Service(ECS)AWS Fargate는 AWS Cloud Map과 긴밀하게 통합되어 있습니다. 서비스를 생성하고 서비스 검색을 활성화하면 확장 시 모든 작업 인스턴스가 자동으로 AWS Cloud Map에 등록되고 축소 시에는 모두 등록 해제됩니다. 또한, ECS는 항상 최신 상태 정보를 AWS Cloud Map에 게시하여 검색 호출을 수행했을 때 정상 상태의 작업 인스턴스만 반환되도록 보장해 줍니다.

Amazon Elastic Container Service for Kubernetes(EKS)의 경우, EKS에서 실행 중인 서비스의 외부 IP를 AWS Cloud Map에 자동으로 게시할 수 있습니다. 이 기능을 지원하기 위해 AWS에서는 AWS Cloud Map를 통해 Kubernetes 리소스를 검색할 수 있도록 오픈 소스 프로젝트 ExternalDNS에 대한 업데이트를 출시했습니다. Kubernetes 외부l DNS에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

지금 이용 가능

지금 바로 AWS Cloud Map과 함께 애플리케이션을 구축하고, Amazon ECS 및 EKS와의 통합, 보안이 적용된 다양한 기능의 API 쿼리 인터페이스, 범용 DNS 이름 해석 및 통합된 상태 확인 지원 기능 등을 이용할 수 있습니다. 직접 경험해 보려면 https://console.aws.amazon.com/cloudmap/home을 방문하시기 바랍니다.  ECS와의 통합을 테스트하려면 https://console.aws.amazon.com/ecs/home을 방문하여 서비스 검색을 활성화한 다음 시작하십시오.

– Abby Fuller;