조직, 프로젝트 및 클러스터는 Atlas 엔터프라이즈 환경의 기본 구성 요소입니다.
조직 수준에서 보안 제어를 구현 하고 하나 이상의 프로젝트에서 작업하는 사용자를 만들 수 있습니다.
프로젝트는 더 세분화된 보안 격리 및 권한 부여 경계를 제공합니다.
클러스터는 Atlas 의 cloud 데이터베이스입니다.
이 페이지의 기본 지침을 활용하여 회사의 계층 구조와 예상되는 클러스터 및 프로젝트 수에 따라 조직, 프로젝트 및 클러스터의 레이아웃을 설계합니다. 해당 지침은 보안 및 성능을 처음부터 최적화하면서 기업의 청구 및 접근 요구에 맞추는 데 도움이 됩니다.
Atlas 조직, 프로젝트 및 클러스터를 위한 기능
다음 계층 수준을 사용하여 Atlas 엔터프라이즈 자산에 대한 보안 설정 및 거버넌스 정의할 수 있습니다.
Atlas 계층 구조 수준 | 설명 |
|---|---|
(선택 사항) 결제 조직 | 하나의 조직 다른 조직 의 유료 조직 될 수 있습니다.지불 조직 사용하면 조직 간 청구를 설정하다 하여 여러 조직에서 청구 구독 주식 . Atlas 구독 설정할 때 지불 조직 설정하는 방법에 대해 자세히 학습 청구 관리를 참조하세요. 조직 간 청구를 활성화 하려면 조치 수행하는 사용자에게 연결하려는 두 조직의 조직 소유자 또는 청구 관리자 역할 있어야 합니다. 자세한 학습 은 사용자 역할을 참조하세요. 지불 조직 독립적으로 운영되는 BU또는 부서가 많은 대규모 엔터프라이즈 에 일반적으로 사용되지만 계약이나 청구서는 중앙 기관에서 소유합니다. |
조직 에는 많은 프로젝트가 포함될 수 있으며, 해당 프로젝트와 해당 프로젝트 내의 클러스터에 공유 통합 및 보안 설정을 적용 할 수 있는 컨테이너 제공합니다. 여러 Atlas 조직을 관리 경우, 조직 소유자 역할 있는 사용자는 Atlas Federation Management Console(페더레이션 관리 콘솔)을 통해 SSO용 IdP를 관리 다음 여러 조직에 연결할 수 있습니다. 조직 종종 회사 내의 BU 또는 부서에 매핑됩니다. 내장 Atlas Cost Explorer는 조직 수준에서 cloud 지출을 집계하고 프로젝트 수준 및 그 아래의 클러스터 수준에서 항목을 분류합니다. 청구 API 활용하여 추가로 사용자 지정할 수 있습니다. | |
데이터 플레인에 대한 보안 구성( 데이터베이스 클러스터, 네트워크 보안 및 기타 데이터 서비스 포함)은 프로젝트 수준에서 수행됩니다.프로젝트 종종 애플리케이션 및 환경에 매핑됩니다( 예시: 고객 포털 앱 - 프로덕션 환경). 각 프로젝트 에 대해 선택한 cloud 제공자 에 따라 AWS 및 Azure 의 리 리전 하나의 전용 VPC 또는 VNet이 있습니다. | |
Atlas 프로젝트 의 전용 VPC /VNet(s) 내에서 각 클러스터 프로비저닝합니다. 보안 구성은 프로젝트 의 클러스터 간에 공유되며, 단, 클러스터, 데이터베이스 및 컬렉션 수준의 작업에 적용 할 수 있는 데이터베이스 사용자 역할 및 권한 부여 예외입니다. |

Atlas 조직, 프로젝트 및 클러스터에 대한 권장 사항
멀티 리전 및 멀티 클라우드 배포서버 권장사항
멀티 리전 및 멀티 클라우드 배포 서버의 경우, 지리적 경계를 포괄해 성능, 보안 및 규컴플라이언스를 최적화하기 위해 다음과 같은 추가 권장 사항을 고려하세요.
네트워크 아키텍처 및 지연 시간
지연 시간을 최소화하기 위해 클러스터를 애플리케이션 사용자에게 가장 가까운 리전에 배포합니다.
각 프로젝트 내에서 리전별로 전용 VPC/VNet을 사용하여 네트워크 격리를 유지합니다.
클러스터를 배포하는 각 리전에서 비공개 엔드포인트를 구성하여 안전하고 지연 시간이 짧은 연결을 보장합니다.
데이터 지역성 및 컴플라이언스
서로 다른 규제 관할권에 대해 별도의 프로젝트를 생성하여(예시: GDPR 준수 EU 프로젝트, SOX 준수 미국 프로젝트) 데이터 거주 요건을 충족합니다.
구역 샤딩이 적용된 글로벌 클러스터를 사용하여 샤드 키 값에 따라 읽기 및 쓰기를 적절한 지리적 지역으로 자동 라우팅합니다.
감사 및 거버넌스 목적으로 프로젝트와 클러스터에 데이터 분류 및 지역 컴플라이언스 요구 사항을 태그를 지정합니다.
리전 간 재해 복구
여러 리전에 읽기 복제본이 있는 클러스터를 배포하여 페일오버 기능을 활성화합니다.
동일한 애플리케이션 환경 내 모든 리전에서 일관적인 백업 예정을 유지합니다.
여러 리전에서 재해 복구 절차를 정기적으로 테스트하여 비즈니스 연속성을 보장합니다.
멀티 클라우드 고려 사항
클라우드 공급자 전체에서 일관된 명명 규칙을 사용하여 관리 및 모니터링을 단순화합니다.
동일한 프로젝트 내 모든 클라우드 환경에서 보안 구성을 표준화합니다.
클라우드 간 데이터 복제 및 네트워크 연결을 계획할 때 클라우드 공급자별 기능과 제한 사항을 고려해야 합니다.
모든 배포서버 패러다임 권장사항
다음 권장사항은 모든 배포서버 패러다임에 적용됩니다.
개발, 테스트, 스테이징 및 프로덕션 환경
샌드박스 및 테스트 프로젝트와 클러스터를 애플리케이션 프로젝트 및 클러스터와 분리하기 위해 다음 네 가지 환경을 사용하는 것이 좋습니다.
환경 | 설명 |
|---|---|
개발(Dev) | 개발자가 안전한 샌드박스 환경에서 새로운 것을 자유롭게 시도할 수 있도록 허용합니다. |
테스트(Test) | 개발 환경에서 생성된 특정 구성 요소 또는 기능을 테스트합니다. |
스테이징 | 프로덕션에 배포하기 전에 모든 구성 요소와 기능을 함께 준비하여 전체 애플리케이션 예상대로 작동하는지 확인합니다. 스테이징은 테스트 환경과 유사하지만 새 구성 요소가 기존 구성 요소와 잘 작동하는지 확인합니다. |
프로덕션(Prod) | 최종 사용자에게 실시간으로 제공되는 애플리케이션의 백엔드 |
로컬 Atlas 배포
개발자는 개발 및 테스트 목적으로 Atlas CLI를 사용하여 로컬 Atlas 배포를 생성할 수 있습니다. 개발자는 자신의 컴퓨터에서 로컬로 작업함으로써 외부 개발 및 테스트 환경에 드는 비용을 절감할 수 있습니다.
또한 개발자는 Docker 와 함께 Atlas CLI 명령을 실행 하여 컨테이너를 사용하여 로컬 Atlas 배포서버를 빌드, 실행 및 관리 할 수 있습니다. 컨테이너는 애플리케이션 실행 데 필요한 모든 소프트웨어를 포함하는 표준화된 단위입니다. 컨테이너화를 통해 개발자는 안전하고 안정적이며 이식 가능한 테스트 환경에서 로컬 Atlas 배포서버를 빌드 할 수 있습니다. 자세한학습 은 Docker 사용하여 로컬 Atlas 배포서버 만들기를 참조하세요.
조직 및 프로젝트 계층 구조
일반적으로 중앙에서 관리되는 결제 조직과 결제 조직에 연결된 각 사업부(BU) 또는 부서별로 하나의 조직을 두는 것을 권장합니다. 그런 다음 하위(개발 또는 테스트) 및 상위 환경에 각각 하나의 클러스터가 있는 프로젝트를 생성합니다. 이러한 프로젝트에 클러스터를 생성할 수 있습니다. 자세한 내용은 권장 계층 구조에 대한 다음 정보를 참조하세요.
조직 당 250 프로젝트 제한에 쉽게 도달하는 경우, 하위 및 상위 환경에 각각 하나씩, 또는 개발, 테스트, 스테이징 및 프로덕션에 각각 하나씩 등 환경당 하나의 조직 만드는 것이 좋습니다. 이 설정 에는 추가 격리 의 이점이 있습니다. 한도를 늘릴 수도 있습니다. 자세한 학습 은 Atlas 서비스 제한을 참조하세요.
허용된 IP 및 API 키와 같은 네트워크 및 보안 구성은 프로젝트 수준에서 공유되므로 서로 다른 애플리케이션을 작업하는 팀에 대해 세분화된 액세스 제어가 필요한 경우 각 애플리케이션 에 대해 별도의 프로젝트를 만드는 것이 좋습니다.
권장 계층 구조
BU 전체에 공통의 팀과 권한이 있고 조직 당 올릴 수 있는 250 프로젝트 수 제한인 개 미만인 경우, 생성되는 Atlas 조직의 수가 더 적은 다음 계층 구조를 고려하세요.
권장 계층 구조 2: 분산형 사업부/부서
조직이 계약 및 청구 소유자 역할을 하는 중앙 집중식 기능 없이 고도로 분산된 경우 다음 계층 구조를 고려합니다. 이 계층 구조에서는 각 사업부(BU), 부서 또는 팀이 자체 Atlas 조직을 가집니다. 이러한 계층 구조는 각 팀이 상당히 독립적이며 회사 내에서 인력이나 권한을 공유하지 않거나, 클라우드 공급자 마켓플레이스 또는 자체 계약을 통해 직접 크레딧을 구매하려는 경우에 유용합니다. 해당 계층 구조에는 결제 조직이 없습니다.
Cluster Hierarchy
환경 간의 격리를 유지하려면 다음 다이어그램에 표시된 대로 각 클러스터를 자체 프로젝트 내에 배포하는 것이 좋습니다. 이를 통해 관리자는 환경 간에 서로 다른 프로젝트 구성을 유지하고 사용자에게 역할에 필요한 최소 수준의 액세스 권한만 부여해야 한다는 최소 권한 원칙을 준수할 수 있습니다.
특히 프로덕션 환경에서는 각 애플리케이션 및 환경 쌍에 대해 별도의 프로젝트를 만드는 것이 좋습니다. 이러한 구성은 프로젝트 수준에서 managed 되므로 특정 애플리케이션 에 대한 요구 사항이 변경되는 경우 프로덕션 환경 클러스터 간에 데이터를 수동으로 전송해야 할 가능성이 줄어듭니다.
클러스터 생성 시 Terraform과 같은 자동화 도구를 사용하여 클러스터 간에 비공개 엔드포인트 및 CMK와 같은 프로젝트 수준 구성을 공유할 수 있습니다. 또한 클러스터 생성을 자동화하면 프로덕션 환경과 개발 환경의 병렬 상위 및 하위 환경 생성을 각각 표준화하여 비용을 절감할 수 있습니다.
더 자세한 내용은 프로젝트당 여러 클러스터를 고려해야 할 때를 참조하세요.
한 프로젝트에 여러 클러스터를 고려해야 하는 경우
다음 다이어그램은 각 프로젝트에 여러 Atlas 클러스터가 포함된 조직 환경별로 그룹화한 조직을 보여줍니다. 하나의 애플리케이션 여러 백업 클러스터를 사용하거나 동일한 팀 여러 환경의 여러 애플리케이션을 담당하는 경우 동일한 프로젝트 내에 여러 클러스터를 배포하면 관리가 간소화됩니다. 이렇게 하면 동일한 프로젝트 의 모든 클러스터가 동일한 프로젝트 구성을 주식 비공개 엔드포인트 및 고객 관리형 키와 같은 기능에 대한 설정 비용 절감됩니다.
그러나 이 클러스터 계층 구조는 최소 권한 원칙을 위반할 수 있습니다.
다음 두 가지 모두에 해당하는 경우에만 동일한 프로젝트 내에 여러 클러스터를 배포하세요.
프로젝트 에 대한 액세스 있는 각 팀 은 프로젝트 의 다른 모든 애플리케이션 및 클러스터에서 작업하고 있습니다.
개발 및 테스트 환경을 위한 클러스터를 생성 중입니다. 스테이징 및 프로덕션 환경에서는 동일한 프로젝트 의 클러스터가 동일한 애플리케이션 에 속하고 동일한 팀 에서 관리하는 것이 좋습니다.
리소스 태그 지정
보고 및 통합을 위한 손쉬운 구문 분석을 가능하게 하기 위해 클러스터 또는 프로젝트에 다음의 세부 정보를 태그로 지정하는 것이 좋습니다.
BU 또는 부서
teamName
애플리케이션 이름
환경
버전
이메일 문의
중요도(클러스터에 저장된 데이터의 계층을 나타내며 PII 또는 PHI와 같은 민감한 분류 포함)
태그를 사용하여 청구 데이터를 파싱하는 방법에 대한 자세한 내용은 Atlas 청구 데이터 기능을 참조하세요.
Atlas 클러스터 크기 가이드
전용 배포(클러스터 크기 M10 이상)에서 Atlas는 리소스를 독점적으로 할당합니다. 전용 배포는 공유 클러스터보다 높은 보안성과 성능을 제공하므로 프로덕션 사용 사례에 권장됩니다.
다음 클러스터 크기 가이드 소프트웨어 개발 및 인프라에서 사용되는 일반적인 비유인 '티셔츠 크기 조정'을 사용하여 용량 계획을 간소화된 방식으로 설명합니다. 티셔츠 사이즈 권장 사항은 사이즈 분석 시 대략적인 시작점으로만 사용하세요. 클러스터 크기를 조정하는 것은 변화하는 리소스 요구 사항, 성능 요구 사항, 워크로드 특성 및 성장 기대치를 기반으로 하는 반복적인 프로세스 입니다.
중요
이 지침 미션 크리티컬 애플리케이션, 고용량 메모리 워크로드 및 고용량 CPU 워크로드는 제외됩니다. 이러한 사용 사례의 경우 MongoDB 지원팀 문의 사용자 지정 지침 확인하세요.
조직의 대략적인 데이터 크기와 워크로드 를 사용하여 배포서버 에 필요한 클러스터 리소스를 추정할 수 있습니다.
총 필요 저장소: 전체 원시 데이터 크기의 50%
총 필요 RAM: 전체 원시 데이터 크기의 10%
필요한 총 CPU 코어 수: 예상 최대 초당 데이터베이스 읽기/ 쓰기 (write) 작업 수 ~ 4000
필요한 총 스토리지 IOPS: 초당 예상 최대 데이터베이스 읽기/ 쓰기 (write) 작업(최소 IOPS = 5%, 최대 IOPS = 95%)
다음 클러스터 크기 가이드 사용하여 과도한 프로비저닝 없이 성능을 보장하는 클러스터 계층 선택하세요. 이 표에는 각 클러스터 계층 에 대한 기본값 저장 및 성능 기능과 클러스터 계층 스테이징 및 프로덕션 환경에 적합한지 여부가 표시됩니다.
클러스터 크기 가이드에는 클러스터의 총 데이터 크기와 기본값 IOPS에 대한 예상 값이 포함되어 있으며, 추가 구성을 통해 이를 확장할 수 있습니다. 다음 저장 권장 사항은 전체 클러스터가 아닌 샤드별 권장 사항입니다. 자세한 내용은 Atlas 확장성 지침을 참조하세요.
T-셔츠 사이즈 | 클러스터 계층 | 저장 범위: AWS, Google Cloud, Azure | CPUs (#) | 기본값 RAM | 기본 IOPS | 예상 중앙값 데이터 크기 | 예상 최대 읽기/쓰기 | 적합 대상 |
|---|---|---|---|---|---|---|---|---|
소형 |
| 2 GB에서 128 GB까지 | 2 | 2GB | 1000 | 1 GB에서 10 GB까지 | 200 | 개발/테스트 전용 |
Med |
| 8 GB에서 512 GB까지 | 2 | 8GB | 3000 | 20 GB에서 50 GB까지 | 3000 | Prod |
대형 |
| 8 GB ~ 4 TB | 16 | 32 GB | 3000 | 360 GB에서 420 GB까지 | 11000 | Prod |
X-Large |
| 8 GB ~ 4 TB | 32 | 128GB | 3000 | 1200 GB에서 1750 GB까지 | 39000 | Prod |
| [1] | M10 은(는) 공유 CPU 계층 입니다. 엄격하게 규제되는 산업 또는 민감한 데이터의 경우 최소 및 최소 시작 계층 M30이어야 합니다. |
MongoFinance라는 가상의 핀테크 회사가 처리된 데이터 400 GB를 저장해야 하는 상황을 예로 들어보겠습니다. 활동이 가장 많은 시점에 MongoFinance의 직원과 고객은 MongoFinance 데이터베이스에서 초당 최대 3000회의 읽기 또는 쓰기 작업을 수행합니다. MongoFinance의 저장 및 성능 요구 사항은 대형 클러스터 계층(M50)으로 가장 잘 충족됩니다.
클러스터 계층과 이를 지원하는 리전에 대해 자세히 알아보려면 각 클라우드 공급자에 대한 Atlas 문서를 참조하세요.
자동화 예시: Atlas 조직, 프로젝트 및 클러스터
팁
모든 필러에 권장 사항을 시행하다 하는 Terraform 예시는 Github 에서 다음 예시 중 하나를 참조하세요.
다음 예제에서는 자동화 위한 Atlas 도구를 사용하여 조직, 프로젝트, 클러스터를 만듭니다.
이러한 예시는 다음을 포함한 다른 권장 구성에도 적용됩니다.
개발/테스트 환경에 대해 클러스터 계층
M10(으)로 설정하다 . 클러스터 크기 가이드 사용하여 애플리케이션 크기에 권장되는 클러스터 계층 학습 .단일 리전, 3-노드 복제본 세트/샤드 배포 토폴로지
당사의 예시는 AWS, Azure 및 Google Cloud를 상호 교체하여 사용합니다. 세 곳의 클라우드 공급자 중 어느 곳이든 사용할 수 있지만 클라우드 공급자에 맞게 지역 이름을 변경해야 합니다. 클라우드 공급자와 그 지역에 대해 알아보려면 클라우드 공급자를 참조하세요.
중간 규모 애플리케이션의 경우 클러스터 계층을
M30으로 설정합니다. 애플리케이션 크기에 따른 권장 클러스터 계층을 알아보려면 클러스터 크기 가이드를 참조하세요.단일 리전, 3-노드 복제본 세트/샤드 배포 토폴로지
당사의 예시는 AWS, Azure 및 Google Cloud를 상호 교체하여 사용합니다. 세 곳의 클라우드 공급자 중 어느 곳이든 사용할 수 있지만 클라우드 공급자에 맞게 지역 이름을 변경해야 합니다. 클라우드 공급자와 그 지역에 대해 알아보려면 클라우드 공급자를 참조하세요.
참고
Atlas CLI로 리소스를 생성하기 전에 다음을 수행해야 합니다.
Programmatic Use의 단계에 따라 Atlas CLI에서 연결합니다.
조직 생성
각 BU에 대해 다음 명령을 실행합니다. 실제 값을 사용하도록 ID와 이름을 변경합니다.
atlas organizations create ConsumerProducts --ownerId 508bb8f5f11b8e3488a0e99e --apiKeyRole ORG_OWNER --apiKeyDescription consumer-products-key
이 예시에 대한 더 많은 구성 옵션과 정보는 Atlas 조직 생성을 참조하세요.
Atlas 관리 API를 사용하여 조직을 만들고 프로그래밍 방식으로 유료 조직에 연결할 수 있습니다. 이 작업을 수행하려면 https://cloud.mongodb.com/api/atlas/v2/orgs 엔드포인트에 POST 요청을 보내고 federationSettingsId 필드에 지불 조직 ID를 지정하세요. 요청하는 서비스 계정 또는 API 키에는 '조직 소유자' 역할이 있어야 하며, 요청하는 조직은 유료 조직이어야 합니다.
다음 예시에서는 cURL을 사용하여 요청을 보냅니다.
curl --location '/api/atlas/v2/orgs?envelope=false&pretty=false' \ --header 'Content-Type: application/vnd.atlas.2023-01-01+json' \ --header 'Accept: application/vnd.atlas.2023-01-01+json' \ --data '{ "name": "<organization name>", "apiKey": { "desc": "<organization description>", "roles": [ "ORG_MEMBER" ] }, "federationSettingsId": "<ID of org to link to>", "orgOwnerId": "<organization owners ID>", "skipDefaultAlertsSettings": false }'
이전 API 호출에 대한 자세한 내용은 atlas 조직 생성 API 문서를 참조하세요.
사용자 ID와 조직 ID를 얻으려면 다음 명령을 참조하세요.
프로젝트 생성
각 애플리케이션 및 환경 쌍에 대해 다음 명령을 실행합니다. 값을 사용하도록 ID와 이름을 변경합니다.
atlas projects create "Customer Portal - Prod" --tag environment=production --orgId 32b6e34b3d91647abb20e7b8
이 예시 에 대한 자세한 구성 옵션 및 정보는 Atlas 프로젝트 만들기를 참조하세요.
프로젝트 ID를 얻으려면 다음 명령어를 참조하세요.
고객 키 관리를 통한 암호화 구성
스테이징 및 프로덕션 환경의 경우 클러스터를 프로비저닝할 때 고객 키 관리를 통한 암호화를 활성화하는 것이 좋습니다. 개발 및 테스트의 경우 고도로 규제된 산업에 있거나 민감한 데이터를 저장하는 경우가 아니라면 비용 절감을 위해 고객 키 관리를 통한 암호화를 생략하는 것을 고려하세요. 자세한 내용은 Atlas 조직, 프로젝트 및 클러스터에 대한 권장 사항을 참조하세요.
Atlas CLI 사용하여 고객 키 관리 로 암호화 관리 할 수 없습니다. 대신 다음 방법을 사용하세요.
프로젝트당 하나의 클러스터 생성
개발 및 테스트 환경을 위한 단일 리전 클러스터를 만들려면 생성한 각 프로젝트에 대해 다음 명령을 실행합니다. ID와 이름을 사용자의 값으로 변경합니다.
atlas clusters create CustomerPortalDev \ --projectId 56fd11f25f23b33ef4c2a331 \ --region EASTERN_US \ --members 3 \ --tier M10 \ --provider GCP \ --mdbVersion 8.0 \ --diskSizeGB 30 \ --tag bu=ConsumerProducts \ --tag teamName=TeamA \ --tag appName=ProductManagementApp \ --tag env=Production \ --tag version=8.0 \ --tag email=marissa@acme.com \ --watch
멀티 리전 클러스터를 구성하려면 생성한 각 프로젝트에 대해 다음 cluster.json 파일을 만듭니다. ID와 이름을 사용자 값으로 변경합니다.
{ "name": "CustomerPortalDev", "projectId": "56fd11f25f23b33ef4c2a331", "clusterType": "REPLICASET", "diskSizeGB": 30, "mongoDBMajorVersion": "8.0", "backupEnabled": true, "replicationSpecs": [ { "numShards": 1, "regionConfigs": [ { "providerName": "GCP", "regionName": "EASTERN_US", "members": 3, "priority": 7 }, { "providerName": "GCP", "regionName": "CENTRAL_US", "members": 2, "priority": 5 }, { "providerName": "GCP", "regionName": "WESTERN_US", "members": 2, "priority": 4 } ] } ], "tags": [ { "key": "bu", "value": "ConsumerProducts" }, { "key": "teamName", "value": "TeamA" }, { "key": "appName", "value": "ProductManagementApp" }, { "key": "env", "value": "Production" }, { "key": "version", "value": "8.0" }, { "key": "email", "value": "marissa@acme.com" } ] }
이전 설정 파일을 생성한 후, 다음 명령을 실행하여 클러스터를 생성합니다.
atlas clusters create --file <path to your configuration file>
스테이징 및 프로덕션 환경을 위한 단일 리전 클러스터를 만들려면 생성한 각 프로젝트에 대해 다음 cluster.json 파일을 만듭니다. ID와 이름을 사용자의 값으로 변경합니다.
{ "clusterType": "REPLICASET", "links": [], "name": "CustomerPortalProd", "mongoDBMajorVersion": "8.0", "replicationSpecs": [ { "numShards": 1, "regionConfigs": [ { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 7, "providerName": "GCP", "regionName": "EASTERN_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } } ], "zoneName": "Zone 1" } ], "tag" : [{ "bu": "ConsumerProducts", "teamName": "TeamA", "appName": "ProductManagementApp", "env": "Production", "version": "8.0", "email": "marissa@acme.com" }] }
cluster.json 파일을 생성한 후 생성한 각 프로젝트에 대해 다음 명령을 실행하세요. 이 명령은 cluster.json 파일을 사용하여 클러스터를 생성합니다.
atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json
멀티 리전 클러스터를 구성하려면 다음 예시와 같이 이전 cluster.json 파일의 replicationSpecs 배열을 수정해 여러 리전을 지정합니다.
{ … "replicationSpecs": [ { "numShards": 1, "regionConfigs": [ { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 7, "providerName": "GCP", "regionName": "EASTERN_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } }, { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 5, "providerName": "GCP", "regionName": "CENTRAL_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } }, { "electableSpecs": { "instanceSize": "M30", "nodeCount": 3 }, "priority": 6, "providerName": "GCP", "regionName": "WESTERN_US", "analyticsSpecs": { "nodeCount": 0, "instanceSize": "M30" }, "autoScaling": { "compute": { "enabled": false, "scaleDownEnabled": false }, "diskGB": { "enabled": false } }, "readOnlySpecs": { "nodeCount": 0, "instanceSize": "M30" } } ], "zoneName": "Zone 1" } ], … }
이전 설정 파일을 생성한 후, 다음 명령을 실행하여 클러스터를 생성합니다.
atlas clusters create --file <path to your configuration file>
이러한 예시에 대한 추가 구성 옵션과 정보는 Atlas 클러스터 생성을 참조하세요.
참고
프로젝트 및 배포 생성
개발 및 테스트 환경의 경우 각 애플리케이션 및 환경 쌍에 대해 다음 파일을 생성합니다. 각 애플리케이션 및 환경 쌍에 대한 파일을 자체 디렉토리 에 배치합니다. 값을 사용하도록 ID와 이름을 변경합니다.
main.tf
# Create a Project resource "mongodbatlas_project" "atlas-project" { org_id = var.atlas_org_id name = var.atlas_project_name } # Create an Atlas Advanced Cluster resource "mongodbatlas_advanced_cluster" "atlas-cluster" { project_id = mongodbatlas_project.atlas-project.id name = "ClusterPortalDev" cluster_type = "REPLICASET" mongo_db_major_version = var.mongodb_version replication_specs { region_configs { electable_specs { instance_size = var.cluster_instance_size_name node_count = 3 } priority = 7 provider_name = var.cloud_provider region_name = var.atlas_region } } tags { key = "BU" value = "ConsumerProducts" } tags { key = "TeamName" value = "TeamA" } tags { key = "AppName" value = "ProductManagementApp" } tags { key = "Env" value = "Test" } tags { key = "Version" value = "8.0" } tags { key = "Email" value = "marissa@acme.com" } } # Outputs to Display output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv } output "project_name" { value = mongodbatlas_project.atlas-project.name }
참고
멀티 리전 클러스터를 생성하려면 각 리전을 자체 region_configs 객체로 지정하고 이를 replication_specs 객체에 중첩합니다. priority 필드는 내림차순으로 정의되어야 하며 다음 예시와 같이 7과 1 사이의 값으로 구성되어야 합니다.
replication_specs { region_configs { electable_specs { instance_size = "M10" node_count = 2 } provider_name = "GCP" priority = 7 region_name = "NORTH_AMERICA_NORTHEAST_1" } region_configs { electable_specs { instance_size = "M10" node_count = 3 } provider_name = "GCP" priority = 6 region_name = "WESTERN_US" } }
variables.tf
# Atlas Organization ID variable "atlas_org_id" { type = string description = "Atlas Organization ID" } # Atlas Project Name variable "atlas_project_name" { type = string description = "Atlas Project Name" } # Atlas Project Environment variable "environment" { type = string description = "The environment to be built" } # Cluster Instance Size Name variable "cluster_instance_size_name" { type = string description = "Cluster instance size name" } # Cloud Provider to Host Atlas Cluster variable "cloud_provider" { type = string description = "AWS or GCP or Azure" } # Atlas Region variable "atlas_region" { type = string description = "Atlas region where resources will be created" } # MongoDB Version variable "mongodb_version" { type = string description = "MongoDB Version" } # Atlas Group Name variable "atlas_group_name" { type = string description = "Atlas Group Name" }
terraform.tfvars
atlas_org_id = "32b6e34b3d91647abb20e7b8" atlas_project_name = "Customer Portal - Dev" environment = "dev" cluster_instance_size_name = "M10" cloud_provider = "AWS" atlas_region = "US_WEST_2" mongodb_version = "8.0"
provider.tf
# Define the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" } } required_version = ">= 0.13" }
스테이징 및 프로덕션 환경의 경우 각 애플리케이션과 환경 쌍에 대해 다음 파일을 생성하세요. 각 애플리케이션과 환경 쌍의 파일은 별도의 디렉토리에 배치하세요. ID와 이름을 사용자의 값으로 변경하세요.
main.tf
# Create a Group to Assign to Project resource "mongodbatlas_team" "project_group" { org_id = var.atlas_org_id name = var.atlas_group_name usernames = [ "user1@example.com", "user2@example.com" ] } # Create a Project resource "mongodbatlas_project" "atlas-project" { org_id = var.atlas_org_id name = var.atlas_project_name # Assign the Project the Group with Specific Roles teams { team_id = mongodbatlas_team.project_group.team_id role_names = ["GROUP_READ_ONLY", "GROUP_CLUSTER_MANAGER"] } } # Create an Atlas Advanced Cluster resource "mongodbatlas_advanced_cluster" "atlas-cluster" { project_id = mongodbatlas_project.atlas-project.id name = "ClusterPortalProd" cluster_type = "REPLICASET" mongo_db_major_version = var.mongodb_version replication_specs { region_configs { electable_specs { instance_size = var.cluster_instance_size_name node_count = 3 } priority = 7 provider_name = var.cloud_provider region_name = var.atlas_region } } tags { key = "BU" value = "ConsumerProducts" } tags { key = "TeamName" value = "TeamA" } tags { key = "AppName" value = "ProductManagementApp" } tags { key = "Env" value = "Production" } tags { key = "Version" value = "8.0" } tags { key = "Email" value = "marissa@acme.com" } } # Outputs to Display output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv } output "project_name" { value = mongodbatlas_project.atlas-project.name }
참고
멀티 리전 클러스터를 생성하려면 각 리전을 고유한 region_configs 객체에 지정하고, 이를 replication_specs 객체에 중첩시킵니다. 다음 예시를 참조하세요.
replication_specs { region_configs { electable_specs { instance_size = "M10" node_count = 2 } provider_name = "GCP" priority = 7 region_name = "NORTH_AMERICA_NORTHEAST_1" } region_configs { electable_specs { instance_size = "M10" node_count = 3 } provider_name = "GCP" priority = 6 region_name = "WESTERN_US" } }
variables.tf
# Atlas Organization ID variable "atlas_org_id" { type = string description = "Atlas Organization ID" } # Atlas Project Name variable "atlas_project_name" { type = string description = "Atlas Project Name" } # Atlas Project Environment variable "environment" { type = string description = "The environment to be built" } # Cluster Instance Size Name variable "cluster_instance_size_name" { type = string description = "Cluster instance size name" } # Cloud Provider to Host Atlas Cluster variable "cloud_provider" { type = string description = "AWS or GCP or Azure" } # Atlas Region variable "atlas_region" { type = string description = "Atlas region where resources will be created" } # MongoDB Version variable "mongodb_version" { type = string description = "MongoDB Version" } # Atlas Group Name variable "atlas_group_name" { type = string description = "Atlas Group Name" }
terraform.tfvars
atlas_org_id = "32b6e34b3d91647abb20e7b8" atlas_project_name = "Customer Portal - Prod" environment = "prod" cluster_instance_size_name = "M30" cloud_provider = "AWS" atlas_region = "US_WEST_2" mongodb_version = "8.0" atlas_group_name = "Atlas Group"
provider.tf
# Define the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" } } required_version = ">= 0.13" }
이 예제에 대한 추가 구성 옵션과 정보는 MongoDB & HashiCorp Terraform 및 MongoDB Terraform 블로그 게시물을 참조하세요.
파일을 생성한 후 각 애플리케이션과 환경 쌍의 디렉토리로 이동하여 다음 명령을 실행하여 Terraform을 초기화합니다.
terraform init
Terraform 계획을 보려면 다음 명령을 실행합니다.
terraform plan
애플리케이션 및 환경 쌍에 대해 하나의 프로젝트와 하나의 배포를 생성하려면 다음 명령을 실행합니다. 명령은 파일과 MongoDB & HashiCorp Terraform을 사용하여 프로젝트와 클러스터를 생성합니다.
terraform apply
메시지가 표시되면 yes를 입력하고 Enter 키를 눌러 구성을 적용합니다.
다음 단계
조직, 프로젝트 및 클러스터의 계층 구조와 규모를 계획한 후 다음 추천 리소스를 참조하거나 왼쪽 탐색을 사용하여 Well-Architected 프레임워크의 핵심 요소에 대한 기능 및 모범 사례를 찾아보세요.