마이크로서비스 - AWS에서 마이크로서비스 구현

마이크로서비스

API는 마이크로서비스의 프런트 도어입니다. 즉, API는 프로그래밍 방식 인터페이스 세트(일반적으로 RESTful 웹 서비스 API) 뒤에 있는 애플리케이션 로직의 진입점 역할을 합니다. 이 API는 클라이언트의 호출을 수락하고 처리하며 트래픽 관리, 요청 필터링, 라우팅, 캐싱, 인증 및 권한 부여와 같은 기능을 구현할 수 있습니다.

마이크로서비스 구현

AWS는 마이크로서비스의 개발을 지원하는 빌딩 블록을 통합했습니다. 인기 있는 두 가지의 접근 방식은 AWS Lambda를 사용하는 방식과 Docker 컨테이너를 AWS Fargate와 함께 사용하는 방식입니다.

AWS Lambda를 사용할 경우 코드를 업로드하기만 하면 뛰어난 가용성으로 실제 수요 변화에 맞춰 서비스를 실행하고 확장하는 데 필요한 모든 작업을 Lambda에서 자동으로 처리합니다. 인프라 관리가 필요하지 않습니다. Lambda는 여러 프로그래밍 언어를 지원하며 다른 AWS 서비스에서 호출되거나 웹 또는 모바일 애플리케이션에서 직접 호출될 수 있습니다. AWS Lambda의 가장 큰 장점 중 하나는 비즈니스 환경의 변화에 신속하게 대응할 수 있다는 점입니다. 즉, AWS에서 보안과 확장이 관리되므로 고객은 비즈니스 로직에 집중할 수 있습니다. Lambda만의 편향적 접근 방식 덕분에 확장성이 뛰어난 플랫폼이 실현됩니다.

배포와 관련한 운영 작업의 부담을 줄이는 일반적인 접근 방식은 컨테이너 기반 배포입니다. Docker와 같은 컨테이너 기술은 지난 몇 년 동안 이식성, 생산성 및 효율성과 같은 이점 때문에 인기를 끌었습니다. 컨테이너는 익히기가 어려울 수 있고 Docker 이미지와 모니터링의 보안 수정 사항도 고려해야 합니다. Amazon Elastic Container Service(Amazon ECS) 및 Amazon Elastic Kubernetes Service(Amazon EKS)로 인해 자체 클러스터 관리 인프라를 설치, 운영, 확장할 필요가 없습니다. API 호출을 통해 Docker를 사용하는 애플리케이션을 시작 및 중지하고, 클러스터의 전체 상태를 쿼리하며, 보안 그룹, 로드 밸런싱, Amazon Elastic Block Store(Amazon EBS) 볼륨, AWS Identity and Access Management(IAM) 역할 등 여러 가지 익숙한 기능에 액세스할 수 있습니다.

AWS Fargate는 Amazon ECS와 Amazon EKS 모두에서 작동하는 컨테이너용 서버리스 컴퓨팅 엔진입니다. Fargate를 사용하면 컨테이너 애플리케이션을 위한 충분한 컴퓨팅 리소스 프로비저닝에 대해 더 이상 걱정할 필요가 없습니다. Fargate는 수만 개의 컨테이너를 시작하고 사용자의 작업에 매우 중요한 애플리케이션의 실행을 위해 쉽게 확장할 수 있습니다.

Amazon ECS는 컨테이너 배치 전략과 작업 배치와 종료 방식을 사용자 지정 가능한 제약 조건을 지원합니다. 작업 배치 제약 조건은 작업 배치 시에 고려되는 규칙입니다. 기본적으로 키-값 페어인 속성을 컨테이너 인스턴스에 연결한 다음 제약 조건을 사용하여 이 같은 속성을 기준으로 작업을 배치할 수 있습니다. 예를 들어 제약 조건을 사용하여 GPU로 구동되는 인스턴스와 같은 인스턴스 유형 또는 인스턴스 기능을 기준으로 특정 마이크로서비스를 배치할 수 있습니다.

Amazon EKS는 오픈 소스 Kubernetes 소프트웨어의 최신 버전을 실행하므로 Kubernetes 커뮤니티의 모든 기존 플러그 인과 도구를 사용할 수 있습니다. Amazon EKS에서 실행되는 애플리케이션은 온프레미스 데이터 센터 혹은 공공 클라우드에서 실행되는 모든 표준 Kubernetes 환경에서 실행되는 애플리케이션과 완전하게 호환됩니다. Amazon EKS는 IAM을 Kubernetes와 통합하여 사용자가 Kubernetes의 기본 인증 시스템이 포함되어 있는 IAM 엔터티에 등록할 수 있도록 해줍니다. Kubernetes 제어 영역으로 인증하기 위해 수동으로 자격 증명을 설정할 필요가 없습니다. IAM 통합에서는 IAM을 사용하여 제어 영역 자체로 직접 인증하고 Kubernetes 제어 영역의 퍼블릭 엔드포인트를 세부적으로 제어할 수 있습니다.

Amazon ECS 및 Amazon EKS에서 사용하는 Docker 이미지는 Amazon Elastic Container Registry(Amazon ECR)에 저장할 수 있습니다. Amazon ECR을 사용하면 컨테이너 레지스트리를 지원하는 데 필요한 인프라를 운영 및 확장할 필요가 없습니다.

지속적 통합 및 지속적 전달(CI/CD)은 DevOps 이니셔티브의 모범 사례이자 가장 중요한 부분으로, 시스템 안전성과 보완성을 유지하면서 소프트웨어를 신속하게 변경할 수 있습니다. 그러나 이는 본 백서의 범위를 벗어납니다. 자세한 내용은 AWS에서의 지속적 통합 및 지속적 전달 적용 백서를 참조하세요.

AWS PrivateLink는 Virtual Private Cloud(VPC)를 지원되는 AWS 서비스, 다른 AWS 계정에서 호스팅되는 서비스(VPC 엔드포인트 서비스), 지원되는 AWS Marketplace 파트너 서비스에 프라이빗으로 연결할 수 있는 가용성과 확장성이 뛰어난 기술입니다. 인터넷 게이트웨이, NAT(Network Address Translation) 디바이스, 퍼블릭 IP 주소, AWS Direct Connect 연결 또는 VPN 연결 없이도 서비스와 통신할 수 있습니다. VPC와 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않습니다.

프라이빗 링크는 마이크로서비스 아키텍처의 격리 및 보안을 강화하는 좋은 방법입니다. 예를 들어 마이크로서비스는 완전히 분리된 VPC에 배포되고, 로드 밸런서가 앞에 배치되고, AWS PrivateLink 엔드포인트를 통해 다른 마이크로서비스에 노출될 수 있습니다. 이 설정에서는 AWS PrivateLink를 사용하여 마이크로서비스와 주고받는 네트워크 트래픽이 퍼블릭 인터넷을 통과하지 않습니다. 이러한 격리의 한 가지 사용 사례에는 PCI, HIPPA 및 EU/US US Privacy Shield와 같은 민감한 데이터를 처리하는 서비스에 대한 규정 준수가 포함됩니다. 또한 AWS PrivateLink에서는 방화벽 규칙, 경로 정의 또는 라우팅 테이블 없이도 여러 계정과 Amazon VPC에 걸쳐 서비스를 연결할 수 있으므로 네트워크 관리가 간소화됩니다. PrivateLink를 활용하여 서비스형 소프트웨어(SaaS) 제공업체 및 ISV는 완벽한 운영 격리 및 보안 액세스를 갖춘 마이크로서비스 기반 솔루션을 제공할 수 있습니다.