Docs Menu
Docs Home
/

Terraform 모듈로 MongoDB Atlas 배포하기

이 가이드 Terraform을 사용하여 제로 배포에서 전체 Atlas 배포서버 로 쉽게 이동할 수 있는 공식 Terraform MongoDB Atlas 모듈을 사용하여 엔터프라이즈급 MongoDBAtlas 환경을 배포하는 방법을 안내합니다.

각 모듈은 cloud 제공자와의 안전한 비공개 연결에 필요한 종속성과 함께 Atlas 리소스를 프로비저닝하는 재사용 가능한 빌딩 차단 입니다.

이 가이드 AWS, Azure 또는 Google Cloud에 다음 리소스를 배포 위한 예제를 제공합니다.

  • Atlas 프로젝트 및 샤딩된 클러스터.

  • PrivateLink 연결을 통한 클라우드 제공자 네트워킹.

  • cloud 저장 로 백업 내보내기 .

  • 엔드 투 엔드 연결을 확인하기 위한 선택적 유효성 검사 가상 머신(현재 Google Cloud에서는 사용할 수 없음. 가상 머신은 향후 업데이트 에서 사용할 수 있음).

참고

이 가이드 의 예제에서는 기본값 으로 필요한 모든 cloud 제공자 리소스를 생성합니다. 기존 리소스를 사용해야 하는 경우 cloud 제공자 에 해당하는 자체 리소스 가져오기 섹션을 참조하세요.

이 튜토리얼을 시작하기 전에 다음 전제 조건이 있는지 확인하세요.

이 가이드 에 설명된 프로세스 진행하려면 다음 도구가 필요합니다.

  • Terraform(V 부터.1 9 이후)

  • mongosh ( 유효성 검사 단계에만 필요합니다. 유효성 검사 VM을 배포할 때mongosh 가 기본값 으로 설치됩니다)

이 가이드 인증 에 Atlas 서비스 계정을 사용합니다. 서비스 계정은 프로그래밍 방식 액세스 에 권장되는 인증 방법입니다.

  1. MongoDB Atlas 계정에 로그인하거나 계정을 만듭니다.

  2. 서비스 계정 자격 증명 환경 변수로 설정합니다.

    export MONGODB_ATLAS_CLIENT_ID="<your-client-id>"
    export MONGODB_ATLAS_CLIENT_SECRET="<your-client-secret>"

    참고

    서비스 계정은 Terraform을 사용한 프로그래밍 방식의 액세스 에 권장되는 인증 방법입니다. 서비스 계정 설정에 대한 자세한 내용은 조직에 프로그래밍 방식 액세스 권한 부여를 참조하세요.

다음 방법 중 하나를 사용하여 AWS 자격 증명 구성합니다.

  • 환경 변수:

    export AWS_ACCESS_KEY_ID="<your-access-key-id>"
    export AWS_SECRET_ACCESS_KEY="<your-secret-access-key>"
  • AWS CLI 프로필: 를 실행하여 aws configure AWS CLI 에 대한 자격 증명 저장 .

  • IAM 역할:AWS에서 실행 때 적절한 권한을 사용하여 인스턴스 또는 작업 에 IAM 역할 연결합니다.

    참고

다음 방법 중 하나를 사용하여 Azure 자격 증명 구성합니다.

  • Azure CLI:

    az login
  • 서비스 주체 환경 변수:

    export ARM_CLIENT_ID="<your-client-id>"
    export ARM_CLIENT_SECRET="<your-client-secret>"
    export ARM_SUBSCRIPTION_ID="<your-subscription-id>"
    export ARM_TENANT_ID="<your-tenant-id>"

다음 방법 중 하나를 사용하여 Google Cloud 자격 증명 구성합니다.

  • 애플리케이션 기본 자격 증명:

    gcloud auth application-default login
  • 서비스 계정 키 파일:

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
  • 서비스 계정 가장:service_account_email 의 변수를 terraform.tfvars 가장할 서비스 계정의 이메일 로 설정합니다.

1

Atlas 예시 리포지토리 에서 cloud 제공자 에 대한 전체 예시 다운로드하고 예시 디렉토리 로 이동합니다.

git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/aws/atlas-aws-module-complete
git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/azure/atlas-azure-module-complete
git clone https://github.com/terraform-mongodbatlas-modules/atlas-examples.git
cd atlas-examples/gcp/atlas-gcp-module-complete
2

예시 terraform.tfvars 파일 복사하고 값을 입력합니다.

cp terraform.tfvars.example terraform.tfvars

다음 표에서는 필수 변수에 대해 설명합니다. 사용 가능한 변수의 전체 목록은 cloud 제공자 에 해당하는 예시 디렉토리 의 variables.tf 파일 참조하세요.

공통 변수

변수
설명

atlas_org_id

MongoDB Atlas 조직 ID. 이를 찾으려면 Atlas UI 에서 Organization > Settings (으)로 이동하세요.

atlas_project_name

새 Atlas 프로젝트 의 이름입니다.

atlas_cluster_name

Atlas cluster 의 이름입니다.

regions

클러스터 및 PrivateLink 엔드포인트가 배포된 리전 목록입니다. 아래에서 클라우드 제공자별 세부 정보를 참조하세요.

클라우드 제공자별 변수

변수
설명

aws_region

제공자 작업을 위한 프라이머리 AWS 리전 ( us-east-1 예시:).

regions[].name

클러스터 샤드 의 Atlas 리전 이름( US_EAST_1 예시:)입니다. 지원되는 모든 값은 클라우드 제공자 및 리전을 참조하세요.

regions[].vpc_id

이 리전 에 있는 기존 VPC 의 ID . DNS 호스트 이름 및 DNS 확인이 VPC 에서 활성화되어 있어야 합니다.

regions[].subnet_ids

PrivateLink 엔드포인트 배치에 사용되는 VPC 내의 서로 다른 가용영역에 있는 2개 이상의 비공개 서브넷 ID를 나열합니다.

다음 예시 terraform.tfvars AWS에 대한 최소 를 보여줍니다.

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
aws_region = "us-east-1"
regions = [
{
name = "US_EAST_1"
vpc_id = "<YOUR_VPC_ID>"
subnet_ids = ["<YOUR_SUBNET_ID_1>", "<YOUR_SUBNET_ID_2>"]
}
]
변수
설명

azure_resource_group_name

비공개 엔드포인트, 백업 저장 및 선택적 유효성 검사 VM이 생성되는Azure 리소스 그룹입니다. 리소스 그룹이 이미 존재해야 합니다.

azure_subscription_id

Azure 구독 ID 입니다. 생략하면 모듈은 Azure 자격 증명 의 기본값 구독 사용합니다.

regions[].name

클러스터 샤드 의 Atlas 리전 이름( US_EAST_2 예시:)입니다. 지원되는 모든 값은 클라우드 제공자 및 리전을 참조하세요.

regions[].azure_location

이 리전 의 Azure 위치 ( eastus2 예시:). 첫 번째 리전 항목에만 필요합니다.

regions[].subnet_id

비공개 엔드포인트 및 유효성 검사 VM이 생성되는 Azure 서브넷 ID .

다음 예시 terraform.tfvars Azure 에 대한 최소 를 보여줍니다.

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
azure_resource_group_name = "<YOUR_RESOURCE_GROUP>"
regions = [
{
name = "US_EAST_2"
azure_location = "eastus2"
subnet_id = "<YOUR_SUBNET_ID>"
}
]
변수
설명

gcp_project_id

Google Cloud 프로젝트 ID.

regions[].name

Atlas 형식( US_EAST_4 예시:) 또는 Google Cloud 형식( 예시 :)의 리전us-east4 이름입니다. 이 모듈은 두 형식을 모두 내부적으로 정규화합니다. 지원되는 모든 값은 클라우드 제공자 및 리전을 참조하세요.

regions[].subnetwork

PSC 전달 규칙이 생성되는 하위 네트워크 self_link ( 예시: https://www.googleapis.com/compute/v1/projects/<PROJECT>/regions/<REGION>/subnetworks/<NAME>)입니다. VPC 네트워크는 하위 네트워크에서 자동으로 파생됩니다.

다음 예시 Google Cloud에 대한 최소한의 terraform.tfvars 를 보여줍니다.

atlas_org_id = "<YOUR_ATLAS_ORG_ID>"
atlas_project_name = "my-atlas-project"
atlas_cluster_name = "my-atlas-cluster"
gcp_project_id = "<YOUR_GCP_PROJECT_ID>"
regions = [
{
name = "US_EAST_4"
subnetwork = "<YOUR_SUBNETWORK_SELF_LINK>"
}
]
3

다음 Terraform 명령을 실행하여 작업 디렉토리 초기화하고 인프라를 배포 .

terraform init
terraform plan -var-file terraform.tfvars
terraform apply -var-file terraform.tfvars

terraform init 필요한 제공자 및 모듈 플러그인을 다운로드합니다. terraform plan 은 생성될 리소스를 미리 봅니다. 신청하기 전에 계획을 주의 깊게 검토하세요.

terraform apply 가 완료되면 계정에 다음 리소스가 프로비저닝됩니다.

  • MongoDB Atlas: 조직 액세스, 새 프로젝트 및 멀티 리전 샤딩된 클러스터.

  • AWS IAM 역할: Atlas 클라우드 제공자 액세스를 위해 사용자의 AWS 계정과 상호 작용 하기 위해 맡는 역할 입니다.

  • AWS VPC 엔드포인트: 리전 하나의 VPC 엔드포인트로, 비공개의 안전한 연결을 위해 Atlas PrivateLink 서비스에 연결됩니다.

  • AWS S3 버킷: Atlas 백업 내보내기용 버킷입니다.

  • 유효성 검사 VM(선택 사항, 기본값 으로 활성화됨):2 PrivateLink를 통한 Atlas 연결을 확인하기 위한 첫 번째 리전의 서브넷에 있는 EC 인스턴스 .

  • MongoDB Atlas: 조직 액세스, 새 프로젝트 및 멀티 리전 샤딩된 클러스터.

  • Azure 서비스 주체: Atlas Azure 구독 과 상호 작용 데 사용하는 Azure AD 서비스 주체입니다.

  • Azure 비공개 엔드포인트: 리 리전 1개의 비공개 엔드포인트로, 비공개의 안전한 연결을 위해 Atlas PrivateLink 서비스에 연결됩니다.

  • Azure Storage 계정: Atlas 백업 내보내기를 위한 저장 계정 및 Blob 컨테이너 .

  • 유효성 검사 VM(선택 사항, 기본값 으로 활성화됨): PrivateLink를 통한 Atlas 연결을 확인하기 위한 첫 번째 리전의 서브넷에 있는 Linux VM입니다.

  • MongoDB Atlas: 조직 액세스, 새 프로젝트 및 멀티 리전 샤딩된 클러스터.

  • GCP 액세스: Google Cloud 프로젝트 와 상호 작용 수 있는 권한이 부여된 Atlas 서비스 계정입니다.

  • PSC 전달 규칙: 리 리전 하나의 Google Cloud 전달 규칙 및 컴퓨팅 주소 , 비공개의 안전한 연결을 위해 PSC(Private Service Connect)를 통해 Atlas PrivateLink 서비스에 연결됩니다.

  • GCP Storage Bucket: Atlas 백업 내보내기를 위한 Google Cloud Storage 버킷입니다.

4

예시 에서 생성하는 가상 머신(VM)을 사용하거나 PrivateLink 연결 문자열 사용하여 mongosh 에 직접 연결하여 배포서버 의 유효성을 검사할 수 있습니다.

가상 머신으로 연결 및 테스트

유효성 검사 VM을 배포한 경우( 기본값 으로 활성화되어 있음), 이를 사용하여 비공개 네트워크 내에서 Atlas 연결을 확인할 수 있습니다. VM에는 mongosh 이(가) 사전 설치되어 있고 연결 문자열 사전 구성되어 있습니다.

  1. 인스턴스 ID 및 액세스 명령에 대한 validation_vm 출력을 확인합니다.

    terraform output validation_vm
  2. AWS 시스템 관리자 (SSM) 세션 관리자 통해 연결합니다(기본값, SSH 필요 없음):

    aws ssm start-session --target <instance-id>

    또는 를 설정하다 validation_vm_create_ec2_instance_connect_endpoint = true 경우 EC2 인스턴스 연결을 통해 연결합니다.

    aws ec2-instance-connect ssh --instance-id <instance-id> --os-user ubuntu
  3. VM에서 유효성 검사 스크립트 실행하여 연결을 테스트합니다.

    ./validate-atlas

    스크립트 mongosh 가 연결할 수 있는지 확인하고 클러스터 에 대해 CRUD 작업을 실행합니다.

  1. VM 이름 및 사용자 이름 에 대한 validation_vm 출력을 확인합니다.

    terraform output validation_vm
  2. Retrieve the VM password:

    terraform output -raw validation_vm_password
  3. Azure Portal의 Azure 직렬 콘솔을 통해 연결하거나, 로 SSH 키를 제공한 경우 Azure Bastion을 통해 validation_vm_ssh_key 연결합니다.

  4. VM에서 유효성 검사 스크립트 실행하여 연결을 테스트합니다.

    ./validate-atlas

    스크립트 mongosh 가 연결할 수 있는지 확인하고 클러스터 에 대해 CRUD 작업을 실행합니다.

현재 Google Cloud 예시 유효성 검사 VM이 포함되어 있지 않습니다. 아래의 mongosh 연결 메서드를 사용하여 배포서버 확인합니다. 이 메서드가 성공적인 하려면 Google Cloud 하위 네트워크 중 하나에서 mongosh 를 실행 해야 합니다.

연결 및 테스트 mongosh

비공개 네트워크에 액세스 할 수 있는 모든 호스팅하다 에서 연결을 테스트할 수도 있습니다.

  1. 연결 문자열 조회합니다.

    배포서버 완료되면 Terraform 출력에서 PrivateLink 연결 문자열 조회 .

    terraform output connection_string

    연결 문자열 비공개 엔드포인트 SRV 형식을 사용하고 PrivateLink 연결을 통해 트래픽을 라우팅합니다.

  2. 다음 명령을 실행하여 <connection-string>terraform output connection_string 명령의 값으로 바꿉니다.

    mongosh "<connection-string>"
  3. 연결 후 다음 명령을 실행 테스트 문서 쓰기 (write) 하고 조회 .

    db.test.insertOne({ msg: "Hello Atlas" })
    db.test.findOne()

성공적인 응답은 클러스터 에 연결할 수 있고 읽기 및 쓰기 (write) 작업을 허용한다는 의미입니다.

5

이 배포서버 에서 프로비저닝된 모든 리소스를 해제하고 원치 않는 요금이 청구되지 않도록 하려면 실행.

terraform destroy -var-file terraform.tfvars

경고

terraform destroy Atlas cluster 및 해당 데이터를 포함하여 이 구성에서 managed 모든 리소스를 영구적으로 삭제합니다. 이 명령을 실행 전에 보관하려는 데이터를 백업합니다.

돌아가기

Terraform 시작하기

이 페이지의 내용