본문 바로가기

Cloud Service 비교

#3 Resource를 관리하는 자

안녕하십니까, 빅두 입니다.

 

제가 글을 읽으면서도 "이게 무슨 말이야?"라는 생각이 정도의 글을 보고 쑥쓰러웠습니다. 심려를 끼쳐 드려(?) 즐겁습니다(??).

생각을 보니 기준이 있지 않고, 해야 내용이 너무 많은데, 길게 쓰려니 지루해지는 경향이 있어서 그런 같습니다.

그래서 갈치 뜨듯이 얇은 주제로 깊게 파보는 그림을 그려볼까 합니다.

 

하지만… 오늘도 주제는 무거운데요. 우선 시작은 미약하게 보겠습니다!

그리고 AWS 설명하고 Azure 설명하는 이유는.. 그냥 제가 AWS 익숙해서 그렇습니다. 아마 Azure 익숙해지면 순서는 바뀌지 않을까? 싶습니다.

 

 

AWS 살펴 보겠습니다.

녀석에 대해서 Resource 함은 고객이 사용하는 무언가 입니다. 무언가는 EC2라는 VM 수도 있고, RDS라는 데이터베이스가 수도 있고, S3라는 Object Storage 수도 있습니다. 한마디로 정의하자면 "고객이 만든 모든 "이라고 있겠네요.

 

그렇다면, 오늘의 주제인 Resource 관리하는 자는 AWS 무엇일까요?

아쉽게도 AWS에서는 모든 Resource 관리하는 그런 녀석이 없습니다.

하지만 비슷한 녀석이 있는데요. 그것이 바로 VPC라는 녀석입니다.

실제로 VPC 관리라는 측면보다는 Resource 부사장 정도가 같은데요. AWS 일부 Resource들은 VPC 종속관계를 가지기 때문에 이렇게 표현할 있을 같습니다.

 

기본적으로 AWS 모든 Service들은 Endpoint 가지고 있으며, Service 생성되는 Resource들은 Endpoint 가지게 됩니다. 왜냐고요? Amazon Web Service 잖아요.

하지만, 몇몇 Resource들은 설정에 따라 VPC 통해서만 Resource 접근이 가능하도록 설계되었습니다. 몇몇 Resource들이 바로 단일 EC2 구성이 가능한 Service 입니다.

단일 EC2 구성이 가능하다는 의미는 Network와의 종속관계를 말할 있겠는데요. 대표적으로 EC2라든지, RDS, ElastiCache 등이 있겠습니다. AWS 개념으로 말씀 드리면 Multi-AZ(HA) 고객이 구현해야 하는 서비스들이 여기에 속한다고 있겠네요.

 

Resource들은 VPC 종속되기 때문에 다음과 같은 특징을 갖습니다.

  - 사용자가 정의한 Subnet 구성할 있다.

  - Security Group으로 Network 제어가 가능하다.

  - 사설 네트워크 통신이 가능하다.

  - 사설 네트워크로 정의된 Resource On-Premise 통신하기 위해선 VPN 또는 Direct Connect 구성해야 한다.

 

그렇다면, 이외의 Service들은 어떻게 접근하고 활용할 있을까?

가지의 방안이 있습니다.

  1. Public Network Service 접근한다.
  2. VPC EndPoint 연동시킨다.

 

번째 방안인 "Public Network Service 접근한다." 말은 그대로 Private Network에서는 VPC 종속되지 않은 서비스들에 접근이 불가능 하다는 의미 입니다.

AWS Service EndPoint Public Network 존재합니다. EndPoint 접근하여 API Call 하여 Service 제어하도록 되어있기 때문에 Private Subnet 존재하는 EC2 Public Network 통신이 되지 않으면 AWS Service 접근할 없다는 의미 입니다.

 

이쯤에서 위에서 말한 내용을 그림으로 한번 그려 보죠

 


 

생각보다 많은 Service들이 VPC 외부에 존재하는 것을 있습니다. 위에서 보면 Private Network 위치한 EC2 VPC 외부의 Service 통신하려면 NAT 같은 Public Network와의 통신이 되어야 한다고 하였는데, S3 같은 자주 사용하는 저장소가 VPC 외부에 존재하는 것을 보실 있습니다.

이렇게 되면 Private Network 존재하는 WAS S3 접근할 없는 어이없는 일이 발생합니다.

그렇다고 백도어를 만들 수도 없고...

 

그래서 번째 방안인 "VPC EndPoint 연동시킨다." 방법이 생겼습니다. EC2에서 S3 업로드 Internet 구간으로 트래픽이 흘러야 하냐는 불편함의 피드백을 받고 AWS에서 만들어준 Service Gateway같은 녀석 입니다.

이것을 통해서 다음 그림과 같은 아키텍처를 그릴 있게 되었습니다.

 


 

, AWS Resource VPC 연결해주는 연결고리를 만들어 줌으로써 EC2 Instance Public Network 통신이 되지 않더라도 AWS Service 접근하여 Resource 통신할 있게 되었습니다.

물론, 모든 Service 되지는 않습니다.

 

AWS에는 Resource들을 JSON설정에 의해 제작해주는 CloudFormation이라는 서비스가 있습니다.

종속관계와 Resource 대한 정의가 되어있는 JSON 파일을 CloudFormation 업로드 하게 되면 정의한 설정대로 Resource들이 ! 하고 제작되어 집니다.

문제는 Resource 수정에 있습니다.

CloudFormation Resource 생성할 때에 한꺼번에 생성해주긴 하지만, CloudFormation 의해 생성된 Resource들은 각각 Service에서 개별적으로 조작이 가능하며, Resource 수정된 정보는 CloudFormation Stack 반영되지 않습니다. 그렇기 때문에 수정된 Resource들의 조직을 CloudFormation Stack으로 새로 제작해야 하는 작업이 발생하며, 기존 CloudFormation Stack 수정된 Resource들을 추적하지 못해 삭제 또는 수정 어떤 Resource 영향을 받는지에 대한 부분도 전부 추적해야 하는 어려움이 있습니다.

따라서, 재활용성이 높고 수정이 적으며, 도장처럼 한번 파고 수정하지 않는 Resource들을 제작할 CloudFormation 사용하는 것이 좋을 같습니다. 아니면 복잡한 구성을 배포할 때에도 배포시에는 유용하게 사용할 있을 같네요.

 

 

다음으로 Azure 살펴 보겠습니다.

사실 블로깅을 Azure Resource Group 찬양하기 위해 만들어 졌다고 해도 과언이 아닙니다.

그래서... Azure 대한 내용은 아주 짧게 끝날 같습니다. 왜냐하면? 되는 기능이니까요.

 

Azure에는 Resource 관리하는 자가 존재합니다. 이름 바로 Resource Manager(Group) 되겠습니다.

Azure에서 말하는 Resource AWS 별반 다를 것이 없습니다. 마찬가지로 "고객이 만든 모든 " 이라 지칭할 있겠는데요. Azure Resource Group이라는 녀석을 생성하고 Azure에서 생성하는 모든 Resource들은 Resource Group이라는 것에 배치하도록 되어 있습니다.

 

별거 아닌 같지만, 산재되어 있는 Resource들을 곳에 모아서 Grouping 있다는 것은 매우 가치있는 같습니다. AWS 1:1 비교를 하자면, AWS 경우 Resource들이 어디에 존재하는지 알려면, 모든 Service들을 모든 Region 대상으로 전부 찾아봐야 확인이 가능합니다. AWS 활용하시는 같은 경우 TrustAdvisor Billing Page 등을 이용하긴 합니다만, 일부 리소스만 확인할 있거나, 접근 권한 제어를 설정하는 페이지이기 때문에 접근이 쉽지 않습니다. (고로 나는 찬양한다 Resource Group)

 

Azure에서 권장하는 Resource Group 사용 방법은 Life Cycle 같은 Resource 끼리 모으라는 이야기를 많이 합니다. 이유는, Resource Group 삭제하는 것으로 하위 Resource들을 한꺼번에 지워버릴 있기 때문입니다. 삭제도 쉽구나~

 

Resource 제작도 AWS CloudFormation처럼 생성하는 Stack Import함으로써 누군가가 제작한 JSON 파일과 동일한 구성을 있으며, Export 기능으로 Resource Group 상태를 JSON파일로 꺼내볼 수도 있으니 얼마나 편한지 모르겠습니다.

 

 

실제로 개의 서비스를 써보시면 아시겠지만, Resource관리에 대해서는 Azure 훨씬 편한 것을 느끼실 있습니다.

제가 Azure에 대해서는 아직 다 공부를 하지 않아서 한가지 빠진 부분이 있습니다. 바로 Service EndPoint에 대해 Private Network에 있는 VM이 Azure Service EndPoint에 접근이 되는가? 에 대한 내용입니다만, 해당 내용은 공부 하면서 수정 업데이트 하도록 하겠습니다.

테클로 댓글 달아 주시면 좀 더 좋은 컨텐츠를 만드는 데에 도움이 될 것 같습니다!


긴 글 읽어주셔서 감사합니다.