AWS 계정 간 환경 구조화
AWS 계정 간 환경 구조화
팀에게 일반적으로 권장되는 방식은 각 환경을 별도의 AWS 계정에 배포하는 것입니다. 하지만 이 방식은 대부분의 팀에게 과도한 작업이 될 수 있습니다. 우리의 경험상, 많은 팀에게 효과적인 방식은 다음과 같습니다.
- 프로덕션 환경을 위한 하나의 계정. 이 계정에는 매우 엄격한 IAM 접근 권한을 적용해야 합니다.
- 각 스테이징 환경을 위한 별도의 계정.
preprod
,qa
,uat
등 여러 스테이징 환경이 있다면 각각 별도의 AWS 계정을 사용합니다. 여러 스테이징 환경이 동일한 계정을 공유하면 안 됩니다. 각 스테이징 환경은 프로덕션 환경과 최대한 유사하게 유지되어야 하기 때문입니다. - 모든 개발 환경을 위한 하나의 계정. 모든 기능 및 핫픽스 환경은 동일한 AWS 계정을 공유합니다. 개발 환경은 많고 대부분 매우 짧은 수명을 가집니다. 각 환경에 대해 임시 AWS 계정을 생성하고 변경 사항이 마스터에 병합된 후 삭제하는 것은 지나치게 과도한 작업입니다. 특히 빠른 핫픽스를 푸시해야 할 때 더욱 그렇습니다. 또한, 서비스 조직화 방법 챕터에서 언급했듯이, 인프라와 코드를 위한 별도의 리포지토리가 있습니다. 각 개발 환경은 대부분 자체 인프라 버전이 필요하지 않습니다. 핫픽스를 푸시하는 시나리오를 생각해 보세요. 여러 API 환경이 하나의 인프라 환경과 통신할 수 있습니다. 그리고 이 모든 환경이 동일한 AWS 계정 내에 있으면 크로스 계정 IAM 권한을 구성하지 않고도 서로 쉽게 통신할 수 있습니다. 물론 이는 절대적인 규칙은 아닙니다. 주요 기능 릴리스가 있는 경우, 해당 릴리스는 자체 인프라 환경을 가질 수 있으며 전체 설정은 별도의 AWS 계정에 배포될 수 있습니다.
- 각 개발자 환경을 위한 별도의 계정. 팀의 각 개발자는 자신만의 플레이그라운드 계정을 가집니다.
언뜻 보면 이는 단순히 추가 작업처럼 보일 수 있으며, 추가된 복잡성이 가치가 있는지 의문이 들 수 있습니다. 그러나 이 방식은 팀이 프로덕션 환경을 보호하는 데 큰 도움이 됩니다. 그리고 이 방식이 어떻게 이를 달성하는지 다양한 방법을 살펴보겠습니다.
환경 분리
여러분(혹은 팀원 중 누군가)이 serverless.yml
정의에서 DynamoDB 테이블이나 Lambda 함수를 삭제한다고 상상해 보세요. 이제 이를 개발 환경에 배포하는 대신, 실수로 프로덕션 환경에 배포하게 됩니다. 이런 일은 생각보다 자주 발생합니다!
이런 실수를 방지하기 위해, 팀의 모든 개발자가 터미널을 통해 프로덕션 환경에 쓰기 권한을 가져서는 안 됩니다. 하지만 모든 환경이 동일한 AWS 계정에 있다면, 특정 리소스에 대한 접근을 제한하거나 허용하기 위해 상세한 IAM 정책을 신중하게 작성해야 합니다. 이는 어려운 작업이며 실수하기 쉽습니다.
각 환경을 별도의 계정으로 분리하면, 계정별로 사용자 접근을 관리할 수 있습니다. 그리고 개발 환경의 경우, 개발자들에게 _AdministratorAccess_를 부여해도 특정 리소스에 대해 걱정할 필요가 없습니다.
리소스 제한
여러 AWS 계정으로 환경을 분리하면 AWS 서비스 제한을 관리하는 데 도움이 됩니다. 여러분이 사용하는 AWS 서비스에는 다양한 하드 제한과 소프트 제한이 있습니다. 예를 들어 Lambda의 75GB 코드 저장 공간 제한이나 계정당 S3 버킷 총 수 제한이 있습니다. 이러한 제한은 계정별로 적용됩니다. 따라서 모든 환경을 단일 AWS 계정에서 운영할 경우, 이러한 제한에 도달하면 프로덕션 환경에 영향을 미칠 수 있습니다. 결국 사용자에게도 영향을 줄 수 있습니다!
예를 들어, 개발 환경에 배포하는 빈도가 프로덕션 환경보다 훨씬 더 많을 가능성이 높습니다. 이는 개발 환경에서 Lambda 코드 저장 공간 제한에 더 빨리 도달할 수 있다는 것을 의미합니다. 모든 환경을 단일 계정에서 운영한다면, 이 제한에 도달하면 프로덕션 빌드가 실패하는 심각한 문제가 발생할 수 있습니다.
여러 AWS 계정을 사용하면 서비스 제한이 환경 간에 영향을 미치지 않도록 할 수 있습니다.
통합 결제
마지막으로, 여러분의 환경을 위해 별도의 계정을 만드는 것이 AWS에서 권장하는 방법입니다. AWS는 이를 위한 훌륭한 지원도 제공합니다. AWS Organizations 콘솔에서 마스터 계정 내의 모든 AWS 계정을 확인하고 관리할 수 있습니다.
각 계정마다 결제 정보를 설정할 필요가 없습니다. 결제는 마스터 계정으로 통합됩니다. 또한 각 계정의 서비스별 사용량과 비용을 세부적으로 확인할 수 있습니다.
다음 장에서는 AWS Organizations를 사용해 이러한 AWS 계정을 설정하는 방법을 살펴보겠습니다.
For help and discussion
Comments on this chapter