示例:MongoDB Atlas 集群的专用连接

本页介绍了如何实现 Integration Connectors 与在 Google Cloud 私有网络上运行的 MongoDB Atlas 集群之间的连接。

为 Atlas 集群配置专用连接

如需为 Atlas 集群配置专用连接,请执行以下操作:

  1. 登录 Atlas 管理控制台。
  2. 打开您需要建立网络连接的 Atlas 项目。
  3. 打开项目的网络访问页面,然后选择专用端点
  4. 选择专用集群,然后点击添加专用端点

    系统随即会打开用于选择云服务提供商的对话框。

  5. 选择 Google Cloud,然后点击 Next
  6. 选择一个 Atlas 区域,然后点击下一步

    这是创建 Atlas 集群的 Google Cloud 区域,应与您创建关联的 Google Cloud 项目所在的区域相同。如需查看所有受支持的集成连接器区域的列表,请参阅位置

  7. 输入 Google Cloud 项目 ID。这是 Integration Connectors 运行时中的服务目录的项目 ID。如需了解详情,请参阅获取 Service Directory 的项目 ID
  8. VPC 名称字段中,输入 default
  9. 子网名称字段中,输入 default
  10. Private Service Connect 端点前缀字段中,输入前缀。

    此文本会附加到所有端点名称的前面,可用于标识您创建的专用端点。

  11. 安装 gcloud CLI(命令行界面)。如需了解详情,请参阅安装 gcloud CLI
  12. 在本地系统上复制以下 Shell 脚本并将其保存为 setup_psc.sh

    在脚本中为以下变量设置适当的值:

    • PROJECT_ID
    • 地区
    • 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. 运行 Shell 脚本。如需运行 shell 脚本,请前往保存脚本的目录,然后运行以下命令:
    sh setup_psc.sh

    此脚本会生成一个 JSON 文件,其中包含 IP 地址及其对应的 PSC 端点名称列表。JSON 文件会保存在运行 shell 脚本的目录中。

  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. 滚动到所需的集群,然后点击连接。此操作会打开 Connect to <CLUSTER_NAME>(连接到 <CLUSTER_NAME>)对话框。
  3. 点击专用端点以选择连接类型。
  4. 选择专用端点下拉菜单中选择您在 Atlas 界面中输入的专用端点前缀。
  5. 点击选择连接方法
  6. 点击连接到您的应用部分中的驱动程序。此步骤用于获取 srv 连接字符串。
  7. 将连接字符串添加到应用代码部分复制 srv 连接字符串。

    srv 字符串的格式:mongodb+srv://{cluster-name}-pl-{index}.{unique-pin}.mongodb.net

  8. 使用此 srv 字符串作为主机名创建 MongoDB 连接。如需了解详情,请参阅配置 MongoDB 连接器

    连接应该会成功创建。