예시: Atlas 클러스터의 비공개 연결

이 페이지에서는 Integration Connectors에서 Google Cloud 내부의 비공개 네트워크에서 실행되는 MongoDB Atlas 클러스터로 연결을 사용 설정하는 방법을 설명합니다.

Atlas 클러스터의 비공개 연결 구성

Atlas 클러스터의 비공개 연결을 구성하려면 다음을 수행합니다.

  1. Atlas 관리 콘솔에 로그인합니다.
  2. 네트워크 연결을 설정해야 하는 Atlas 프로젝트를 엽니다.
  3. 프로젝트의 네트워크 액세스 페이지를 연 후 비공개 엔드포인트를 선택합니다.
  4. 전용 클러스터를 선택한 후 비공개 엔드포인트 추가를 클릭합니다.

    그러면 클라우드 제공업체를 선택하는 대화상자가 열립니다.

  5. Google Cloud를 선택한 후 다음을 클릭합니다.
  6. Atlas 리전을 선택한 후 다음을 클릭합니다.

    이것은 Atlas 클러스터가 생성된 Google Cloud 리전이며, 연결을 만드는 Google Cloud 프로젝트의 리전과 동일해야 합니다. 지원되는 모든 Integration Connectors 리전 목록은 위치를 참조하세요.

  7. Google Cloud 프로젝트 ID를 입력합니다. 이것은 Integration Connectors 런타임에서 가져온 서비스 디렉터리의 프로젝트 ID입니다. 자세한 내용은 서비스 디렉터리의 프로젝트 ID 가져오기를 참조하세요.
  8. VPC 이름 필드에 default를 입력합니다.
  9. 서브넷 이름 필드에 default를 입력합니다.
  10. 비공개 서비스 연결 엔드포인트 프리픽스 필드에 프리픽스를 입력합니다.

    이 텍스트는 모든 엔드포인트 이름에 프리픽스로 추가되며 생성된 비공개 엔드포인트를 식별하는 데 사용될 수 있습니다.

  11. gcloud CLI(명령줄 인터페이스)를 설치합니다. 자세한 내용은 gcloud CLI 설치를 참조하세요.
  12. 다음 셸 스크립트를 복사하여 로컬 시스템에 setup_psc.sh로 저장합니다.

    스크립트에서 다음 변수에 적절한 값을 설정합니다.

    • PROJECT_ID
    • REGION
    • PREFIX
    • SERVICE_ATTACHMENT_ID_PREFIX
    #!/bin/bash
    
    alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)"'
    
    # Set PROJECT_ID to the ID of the Google Cloud project where you create your connections.
    export PROJECT_ID=PROJECT_ID
    
    # Set REGION to the Google Cloud region where Atlas cluster is installed.
    export REGION=REGION
    
    export HOSTNAME=https://connectors.googleapis.com/v1
    
    # Set ENDPOINT_PREFIX to the prefix value that you entered for the
    # "Private service connect endpoint prefix" field (in step 10).
    export PREFIX=ENDPOINT_PREFIX
    
    # Set SERVICE_ATTACHMENT_ID_PREFIX to the prefix of the service attachments
    # created by Atlas. The service attachments are present in the script
    # displayed on the Atlas UI and have the following naming format:
    # projects/{google-cloud-project-id-of-atlas-cluster}/regions/{region}/serviceAttachment/{prefix}-{index}
    # For example, if the service attachment is
    # "projects/p-ditnerelrvndieqhe3kh9pop/regions/us-west1/serviceAttachments/sa-us-west1-37204mg5wr0j6-$i",
    # you must set the value of SERVICE_ATTACHMENT_ID_PREFIX to
    # "projects/p-ditnerelrvndieqhe3kh9pop/regions/us-west1/serviceAttachments/sa-us-west1-37204mg5wr0j6"
    export SERVICE_ATTACHMENT_ID_PREFIX=SERVICE_ATTACHMENT_ID_PREFIX
    
    # Set ENDPOINT_GLOBAL_ACCESS to true if you want to enable global access for the endpoint, else false.
    export ENDPOINT_GLOBAL_ACCESS=ENDPOINT_GLOBAL_ACCESS
    
    if [ "$ENDPOINT_GLOBAL_ACCESS" != "true" ] && [ "$ENDPOINT_GLOBAL_ACCESS" != "false" ]; then
        echo "Error: Variable ENDPOINT_GLOBAL_ACCESS must be either 'true' or 'false'."
        exit 1
    fi
    
    function poll_operation() {
      OPERATION_ID="$1"
      INDEX="$2"
      RESULT=''
    
      while [[ "$RESULT" != *"true"* ]];
      do
        RESULT=$(gcurl -s -X GET "${HOSTNAME}/${OPERATION_ID}" | grep '"done"')
        sleep 5
      done
    
      echo "${PREFIX}-${INDEX} created"
    }
    
    echo "Creating Endpoint Attachments..."
    for i in {0..49}
    do
      export ENDPOINT=${HOSTNAME}/projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments?endpointAttachmentId=${PREFIX}-$i
      OPERATION_ID=$(gcurl -s -X POST -H "Content-Type: application/json" -d '{"name": "'"projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments/${PREFIX}-$i"'","serviceAttachment": "'"${SERVICE_ATTACHMENT_ID_PREFIX}-$i"'", "endpointGlobalAccess":'${ENDPOINT_GLOBAL_ACCESS}'}' "${ENDPOINT}" | sed 's/  //' | grep -E '"name"' | sed -E 's/"name": "//' | sed 's/",//')
      poll_operation "$OPERATION_ID" "$i" &
    done
    
    wait
    echo "All endpoint attachments created."
    
    echo "[" > atlasEndpoints-${PREFIX}.json
    
    echo "Fetching IP Addresses..."
    for i in {0..49}
    do
      ENDPOINT=${HOSTNAME}/projects/${PROJECT_ID}/locations/${REGION}/endpointAttachments/${PREFIX}-$i
      response=$(gcurl -s -X GET "${ENDPOINT}" | sed 's/  //g' | grep -E 'name|endpointIp' | sed 's/"endpointIp"/"IPAddress"/g' | sed -E 's/"name": "projects\/.+\/locations\/.+\/endpointAttachments\//"name": "/g' | sed '1 s/"/{"/1')
      if [ "$ENDPOINT_GLOBAL_ACCESS" = "true" ]; then
        echo "${response}" | sed '2 s/"/"}/4' >> atlasEndpoints-${PREFIX}.json
      else
        echo "${response}" | sed '2 s/"/"},/4' >> atlasEndpoints-${PREFIX}.json
      fi
    done
    
    sed -i '$s/,/]/' atlasEndpoints-${PREFIX}.json
    
    echo "Created atlasEndpoints-${PREFIX}.json"
  13. 셸 스크립트를 실행합니다. 셸 스크립트를 실행하려면 스크립트를 저장한 디렉터리로 이동한 후 다음 명령어를 실행합니다.
    sh setup_psc.sh

    이 스크립트는 IP 주소 목록과 해당 PSC 엔드포인트 이름이 포함된 JSON 파일을 생성합니다. JSON 파일은 셸 스크립트가 실행되는 디렉터리에 저장됩니다.

  14. Atlas 관리 콘솔에서 다음을 클릭합니다.
  15. JSON 파일 업로드를 클릭한 후 13단계에서 만든 JSON 파일을 업로드합니다.
  16. 만들기를 클릭합니다.

    엔드포인트 설정 프로세스를 완료하는 데 최대 25분이 걸릴 수 있으며 설정이 성공하면 엔드포인트가 Available 상태가 됩니다.

  17. 비공개 연결을 확인합니다. 자세한 내용은 비공개 연결 확인을 참조하세요.

서비스 디렉터리의 프로젝트 ID 가져오기

서비스 디렉터리의 프로젝트 ID를 가져오려면 다음 예시와 같이 List Connections API를 사용할 수 있습니다.

구문

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

다음을 바꿉니다.

  • CONNECTORS_PROJECT_ID: 연결을 만든 Google Cloud 프로젝트의 ID

이 예시에서는 connectors-test Google Cloud 프로젝트에 대한 서비스 디렉터리의 프로젝트 ID를 가져옵니다.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

터미널에서 이 명령어를 실행하면 다음과 비슷한 출력이 표시됩니다.

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

샘플 출력에서 connectors-test Google Cloud 프로젝트의 서비스 디렉터리 프로젝트 ID는 abcdefghijk-tp입니다.

비공개 연결 확인

Atlas 클러스터에 대한 비공개 연결을 확인하려면 다음을 수행합니다.

  1. Atlas 관리 콘솔에서 데이터베이스 배포 페이지를 엽니다.
  2. 필요한 클러스터로 스크롤한 후 연결을 클릭합니다. 그러면 <CLUSTER_NAME>에 연결 대화상자가 열립니다.
  3. 연결 유형으로 비공개 엔드포인트를 클릭합니다.
  4. 비공개 엔드포인트 선택 드롭다운에서 Atlas UI에 입력한 비공개 엔드포인트 프리픽스를 선택합니다.
  5. 연결 방법 선택을 클릭합니다.
  6. 애플리케이션에 연결 섹션에서 드라이버를 클릭합니다. 이 단계에서는 srv 연결 문자열을 가져옵니다.
  7. 연결 문자열을 애플리케이션 코드에 추가 섹션에서 srv 연결 문자열을 복사합니다.

    srv 문자열 형식은 mongodb+srv://{cluster-name}-pl-{index}.{unique-pin}.mongodb.net입니다.

  8. srv 문자열을 호스트 이름으로 사용하여 MongoDB 연결을 만듭니다. 자세한 내용은 MongoDB 커넥터 구성을 참조하세요.

    연결이 성공적으로 생성됩니다.