[Документация Yandex Cloud](../../../index.md) > [Yandex StoreDoc](../../index.md) > [Пошаговые инструкции](../index.md) > [Подключение](index.md) > Подключение из приложений

# Подключение к кластеру Yandex StoreDoc из приложений

К кластеру Yandex StoreDoc можно подключиться с помощью [инструментов командной строки](#command-line-tools), из [графических IDE](#connection-ide) и [Docker-контейнера](#connection-docker). О подключении из кода вашего приложения смотрите [Примеры кода](code-examples.md).

В примерах ниже предполагается, что [SSL-сертификат](index.md#get-ssl-cert) `root.crt` расположен в директории:

* `~/.mongodb/` для Ubuntu;
* `$HOME\.mongodb` для Windows.

При успешном подключении к кластеру и выполнении тестового запроса будет выведено имя БД, к которой было выполнено подключение.

{% note warning %}

Запросы с настройкой `writeConcern: 1` могут приводить к отставанию данных на вторичных репликах. Это повышает риск таймаутов при операциях записи и потери данных при выходе из строя хоста-мастера, поэтому для таких кластеров не гарантируются [SLA](https://yandex.ru/legal/cloud_sla_mdb/) и [высокая доступность](../../concepts/high-availability.md). Подробнее о [влиянии настройки](../../concepts/high-availability.md#connect) `writeConcern` на высокую доступность.

{% endnote %}

## Инструменты командной строки {#command-line-tools}

Примеры кода с заполненным FQDN хоста доступны в [консоли управления](https://console.yandex.cloud) по нажатию кнопки **Подключиться** на странице кластера.

Способ настройки зависит от того, включено ли в кластере [шардирование](../../concepts/sharding.md).


### Linux (Bash) {#bash}

Перед подключением [установите утилиту MongoDB Shell](index.md#install-mongosh).

{% list tabs group=connection %}

- Подключение с SSL {#with-ssl}

    Для нешардированного кластера:

    ```bash
    mongosh --norc \
            --tls \
            --tlsCAFile ~/.mongodb/root.crt \
            --host '<FQDN_хоста_1_Yandex_StoreDoc>:27018,...,<FQDN_хоста_N_Yandex_StoreDoc>:27018' \
            --username <имя_пользователя_БД> \
            --password <пароль_пользователя_БД> \
            <имя_БД>
    ```

    Для шардированного кластера:

    ```bash
    mongosh --norc \
            --tls \
            --tlsCAFile ~/.mongodb/root.crt \
            --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017' \
            --username <имя_пользователя_БД> \
            --password <пароль_пользователя_БД> \
            <имя_БД>
    ```

    О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

    После подключения выполните команду `db`.

- Подключение без SSL {#without-ssl}

    Для нешардированного кластера:

    ```bash
    mongosh --norc \
            --host '<FQDN_хоста_1_Yandex_StoreDoc>:27018,...,<FQDN_хоста_N_Yandex_StoreDoc>:27018' \
            --username <имя_пользователя_БД> \
            --password <пароль_пользователя_БД> \
            <имя_БД>
    ```

    Для шардированного кластера:

    ```bash
    mongosh --norc \
            --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017' \
            --username <имя_пользователя_БД> \
            --password <пароль_пользователя_БД> \
            <имя_БД>
    ```

    О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

    После подключения выполните команду `db`.

- SRV-подключение {#srv}

    ```bash
    mongosh "mongodb+srv://<имя_пользователя_БД>:<пароль_пользователя_БД>\
    @<идентификатор_кластера>.mdb.yandexcloud.kz/<имя_БД>"
    ```

  Идентификатор кластера можно запросить со [списком кластеров в каталоге](../cluster-list.md#list-clusters).

  После подключения выполните команду `db`.

  При необходимости вы можете добавить к команде параметры подключения, например:
  * `tls` — включение TLS-шифрования соединения: `true` или `false`. По умолчанию шифрование включено.
  * `tlsCAFile` — путь к файлу `.pem`, содержащему корневые сертификаты центра сертификации.
  * `readPreference` — с каких хостов выполнять чтение:
    * `primary` — только с первичной реплики (мастера);
    * `primaryPreferred` — с мастера, а если он недоступен — с вторичных реплик;
    * `secondary` — только с вторичных реплик;
    * `secondaryPreferred` — с вторичных реплик, а если они отсутствуют, то с мастера;
    * `nearest` — с хоста с наименьшей задержкой.
  * `authSource` — имя базы данных, в которой хранятся учетные данные пользователя. По умолчанию совпадает со значением параметра `<имя_БД>`.
  * `appName` — имя приложения, отображаемое в логах.
  
  Описание других доступных параметров подключения приведено в [официальной документации](https://mongodb.prakticum-team.ru/docs/manual/reference/connection-string-options/).
  
  Строка параметров начинается со знака `?`, разделителем является знак `&`.

  Пример команды с параметрами подключения:

    ```bash
    mongosh "mongodb+srv://user********:qwe********@c9qng7jhsgtg********.mdb.yandexcloud.kz\
    /db********?authSource=admin&appName=debug"
    ```

{% endlist %}

### Windows (PowerShell) {#powershell}

Перед подключением [установите утилиту MongoDB Shell](index.md#install-mongosh).

{% list tabs group=connection %}

- Подключение с SSL {#with-ssl}

    Для нешардированного кластера:

    ```powershell
    mongosh.exe --norc `
                --host '<FQDN_хоста_1_Yandex_StoreDoc>:27018,...,<FQDN_хоста_N_Yandex_StoreDoc>:27018' `
                --tls `
                --tlsCAFile $HOME\.mongodb\root.crt `
                --username <имя_пользователя_БД> `
                --password <пароль_пользователя_БД> `
                <имя_БД>
    ```

    Для шардированного кластера:

    ```powershell
    mongosh.exe --norc `
                --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017' `
                --tls `
                --tlsCAFile $HOME\.mongodb\root.crt `
                --username <имя_пользователя_БД> `
                --password <пароль_пользователя_БД> `
                <имя_БД>
    ```

    О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

    После подключения выполните команду `db`.

- Подключение без SSL {#without-ssl}

    Для нешардированного кластера:

    ```powershell
    mongosh.exe --norc `
                --host '<FQDN_хоста_1_Yandex_StoreDoc>:27018,...,<FQDN_хоста_N_Yandex_StoreDoc>:27018' `
                --username <имя_пользователя_БД> `
                --password <пароль_пользователя_БД> `
                <имя_БД>
    ```

    Для шардированного кластера:

    ```powershell
    mongosh.exe --norc `
                --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017' `
                --username <имя_пользователя_БД> `
                --password <пароль_пользователя_БД> `
                <имя_БД>
    ```

    О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

    После подключения выполните команду `db`.

- SRV-подключение {#srv}

    ```powershell
    mongosh.exe "mongodb+srv://<имя_пользователя_БД>:<пароль_пользователя_БД>`
    @<идентификатор_кластера>.mdb.yandexcloud.kz/<имя_БД>"
    ```

  Идентификатор кластера можно запросить со [списком кластеров в каталоге](../cluster-list.md#list-clusters).

  После подключения выполните команду `db`.

  При необходимости вы можете добавить к команде параметры подключения, например:
  * `tls` — включение TLS-шифрования соединения: `true` или `false`. По умолчанию шифрование включено.
  * `tlsCAFile` — путь к файлу `.pem`, содержащему корневые сертификаты центра сертификации.
  * `readPreference` — с каких хостов выполнять чтение:
    * `primary` — только с первичной реплики (мастера);
    * `primaryPreferred` — с мастера, а если он недоступен — с вторичных реплик;
    * `secondary` — только с вторичных реплик;
    * `secondaryPreferred` — с вторичных реплик, а если они отсутствуют, то с мастера;
    * `nearest` — с хоста с наименьшей задержкой.
  * `authSource` — имя базы данных, в которой хранятся учетные данные пользователя. По умолчанию совпадает со значением параметра `<имя_БД>`.
  * `appName` — имя приложения, отображаемое в логах.
  
  Описание других доступных параметров подключения приведено в [официальной документации](https://mongodb.prakticum-team.ru/docs/manual/reference/connection-string-options/).
  
  Строка параметров начинается со знака `?`, разделителем является знак `&`.

  Пример команды с параметрами подключения:

    ```powershell
    mongosh.exe "mongodb+srv://user********:qwe********@c9qng7jhsgtg********.mdb.yandexcloud.kz`
    /db********?authSource=admin&appName=debug"
    ```

{% endlist %}



### Подключение с аутентификацией через IAM {#iam}

Вы можете подключиться к кластеру Yandex StoreDoc с помощью аутентификации через IAM. Для аутентификации используйте [аккаунт на Яндексе](../../../iam/concepts/users/accounts.md#passport), [федеративный](../../../iam/concepts/users/accounts.md#saml-federation) или [локальный](../../../iam/concepts/users/accounts.md#local) аккаунт.

Подключение выполняется через MongoDB Shell. О том, как установить утилиту MongoDB Shell, читайте в [инструкции](index.md#mongosh-install).

Перед подключением [настройте группы безопасности](index.md#configuring-security-groups), а также [включите публичный доступ](../hosts.md#update) к хостам кластера, если подключение выполняется через интернет.

Чтобы подключиться к кластеру с помощью аутентификации через IAM:

1. Настройте аутентификацию:

    {% list tabs group=instructions %}

    - Консоль управления {#console}

      1. Перейдите на [страницу каталога](https://console.yandex.cloud).
      1. Перейдите в сервис **Yandex StoreDoc**.
      1. Выберите кластер.
      1. Назначьте аккаунту в Yandex Cloud роль `managed-mongodb.clusters.connector` на кластер:
         
          1. Выберите вкладку **Права доступа**.
          1. В правом верхнем углу страницы нажмите кнопку **Назначить роли**.
          1. В поле **Кому выдать доступ** выберите аккаунт.
              
              Чтобы найти нужный аккаунт, введите в это поле адрес почты, к которому привязан аккаунт.
          
          1. Нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) **Добавить роль** и выберите роль `managed-mongodb.clusters.connector`.
          1. Нажмите кнопку **Сохранить**.
      
      1. Создайте пользователя Yandex StoreDoc:

          1. Выберите вкладку ![image](../../../_assets/console-icons/persons.svg) **Пользователи**.
          1. В правом верхнем углу страницы нажмите кнопку **Создать пользователя**.
          1. Выберите способ авторизации **IAM**.
          1. Выберите аккаунт в Yandex Cloud с ролью `managed-mongodb.clusters.connector`.
          1. Выберите базы данных и настройте для них [роли](../../concepts/users-and-roles.md):
          
              1. Нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) **Добавить базу данных** и выберите базу данных.
              1. Назначьте роли для выбранной базы данных.
              
                  Чтобы назначить роль, нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) и выберите роль.
          
          1. Нажмите кнопку **Создать**.

    {% endlist %}

1. Получите IAM-токен и поместите его в переменную окружения `IAM_TOKEN`:
    
    * [Инструкция](../../../iam/operations/iam-token/create.md) для аккаунта на Яндексе.
    * [Инструкция](../../../iam/operations/iam-token/create-for-federation.md) для федеративного аккаунта.
    * [Инструкция](../../../iam/operations/iam-token/create-for-local.md) для локального аккаунта.

1. [Получите SSL-сертификат](index.md#get-ssl-cert).
1. Подключитесь к кластеру, выполнив команду:

    Для нешардированного кластера:

    ```bash
    mongosh --norc \
            --tls \
            --tlsCAFile ~/.mongodb/root.crt \
            --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27018,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27018' \
            --username "<имя_пользователя_БД>" \
            --password "$IAM_TOKEN" \
            --authenticationDatabase '$external' \
            --authenticationMechanism PLAIN \
            <имя_БД>
    ```

    Для шардированного кластера:

    ```bash
    mongosh --norc \
            --tls \
            --tlsCAFile ~/.mongodb/root.crt \
            --host '<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...,<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017' \
            --username "<имя_пользователя_БД>" \
            --password "$IAM_TOKEN" \
            --authenticationDatabase '$external' \
            --authenticationMechanism PLAIN \
            <имя_БД>
    ```

    Где `--username` — имя пользователя базы данных, которое совпадает с адресом почты аккаунта в Yandex Cloud.

    О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).



## Подключение из графических IDE {#connection-ide}


Подключения проверялись в следующем окружении:

* MacOS Big Sur 11.3.
* JetBrains DataGrip: `2021.1`.
* DBeaver Enterprise: `21.0`.

Подключаться из графических IDE можно только к хостам кластера в публичном доступе с использованием [SSL-сертификата](index.md#get-ssl-cert).

Чтобы избежать ошибок при подключении, [сохраните сертификат](https://storage.yandexcloud.kz/cloud-certs/RootCA.pem) в локальную папку, для доступа к которой не требуются права администратора.

### DataGrip {#datagrip}

1. Создайте источник данных:
   1. Выберите в меню **File** → **New** → **Data Source** → **MongoDB**.
   1. На вкладке **General**:
      1. Укажите параметры подключения:
         * **User**, **Password** — имя и пароль пользователя БД;
         * **URL** — строка подключения.

              Для нешардированного кластера:

              ```http
              mongodb://<FQDN_хоста_1_Yandex_StoreDoc>:27018,..,<FQDN_хоста_N_Yandex_StoreDoc>:27018/<имя_БД>
              ```

              Для [шардированного](../../concepts/sharding.md) кластера:

              ```http
              mongodb://<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017/<имя_БД>
              ```

              О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

      1. Нажмите ссылку **Download**, чтобы загрузить драйвер соединения.
   1. На вкладке **SSH/SSL**:
      1. Включите настройку **Use SSL**.
      1. В поле **CA file** укажите путь к файлу [SSL-сертификата для подключения](index.md#get-ssl-cert).
1. Нажмите ссылку **Test Connection** для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
1. Нажмите кнопку **OK**, чтобы сохранить источник данных.

### DBeaver {#dbeaver}

Поддержка подключения к кластеру Yandex StoreDoc доступна только в [коммерческих редакциях DBeaver](https://dbeaver.com/buy/).

Чтобы подключиться к кластеру:

1. Создайте новое соединение с БД:
   1. Выберите в меню **База данных** пункт **Новое соединение**.
   1. Выберите из списка БД **MongoDB**.
   1. Нажмите кнопку **Далее**.
   1. Настройте параметры подключения на вкладке **Главное**:
      1. В блоке **Адрес** переключите **Type** на `URL` и укажите строку подключения.

           Для нешардированного кластера:

           ```http
           mongodb://<FQDN_хоста_1_Yandex_StoreDoc>:27018,..,<FQDN_хоста_N_Yandex_StoreDoc>:27018/<имя_БД>
           ```

           Для [шардированного](../../concepts/sharding.md) кластера:

           ```http
           mongodb://<FQDN_хоста_1_MONGOINFRA_или_MONGOS>:27017,...<FQDN_хоста_N_MONGOINFRA_или_MONGOS>:27017/<имя_БД>
           ```

           О том, как получить FQDN хоста, читайте в [инструкции](index.md#get-fqdn).

      1. В списке **Устройство** выберите значение `SCRAM-SHA-256` (тип шифрования пароля при подключении).
      1. В блоке **Полномочия** укажите имя и пароль пользователя БД.
   1. На вкладке **SSL**:
      1. Включите настройку **Использовать SSL**.
      1. В поле **Корневой сертификат** укажите путь к сохраненному файлу [SSL-сертификата](index.md#get-ssl-cert).
      1. В блоке **Настройки** включите **Пропустить валидацию имени хоста**.
1. Нажмите кнопку **Тест соединения ...** для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
1. Нажмите кнопку **Готово**, чтобы сохранить настройки соединения с БД.


## Подготовка к подключению из Docker-контейнера {#connection-docker}

Чтобы подключаться к кластеру Yandex StoreDoc из Docker-контейнера с SSL, добавьте в Dockerfile строки:

```bash
RUN apt-get update && \
    apt-get install wget --yes && \
    mkdir --parents ~/.mongodb && \
    wget "https://storage.yandexcloud.kz/cloud-certs/CA.pem" \
         --output-document ~/.mongodb/root.crt && \
    chmod 0644 ~/.mongodb/root.crt
```

Чтобы подключаться без SSL, дополнительно настраивать Dockerfile не нужно.

После запуска Docker-контейнера перейдите в него и установите утилиту `mongosh`. Она понадобится для подключения к кластеру.