> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Настройте Amazon RDS Postgres в качестве источника для ClickPipes

# Руководство по настройке источника Amazon RDS Postgres

export const IAMAuthentication = ({engine, service, children}) => {
  const services = {
    aurora: {
      name: 'Aurora',
      resource: 'cluster',
      id: 'cluster-xxxxxxxxxxxxxx'
    },
    rds: {
      name: 'RDS',
      resource: 'instance',
      id: 'db-xxxxxxxxxxxxxx'
    }
  };
  const createUserStatements = {
    postgres: `CREATE USER clickpipes_iam_user;
GRANT rds_iam TO clickpipes_iam_user;`,
    mysql: `CREATE USER 'clickpipes_iam_user' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';`
  };
  const svc = services[String(service).toLowerCase()];
  const createUserSql = createUserStatements[String(engine).toLowerCase()];
  if (!svc) throw new Error(`Unsupported IAM authentication service: ${service}`);
  if (!createUserSql) throw new Error(`Unsupported IAM authentication engine: ${engine}`);
  return <>
      <p>
        Instead of a password, you can authenticate the ClickPipes user with an AWS IAM role. This lets ClickPipes connect to your Amazon {svc.name} {svc.resource} without storing database credentials.
      </p>

      <h4 id="enable-iam-authentication">Enable IAM authentication</h4>

      <ol>
        <li>Log in to your AWS account and go to the {svc.name} {svc.resource} you want to configure.</li>
        <li>Click <strong>Modify</strong>.</li>
        <li>Scroll to the <strong>Database authentication</strong> section.</li>
        <li>Select <strong>Password and IAM database authentication</strong>.</li>
        <li>Click <strong>Continue</strong>.</li>
        <li>Review the changes and select <strong>Apply immediately</strong>.</li>
      </ol>

      <h4 id="create-database-user">Create the ClickPipes user</h4>

      <p>Create the ClickPipes user with IAM authentication enabled, then grant it the same schema and replication privileges shown above:</p>

      <CodeBlock language="sql">{createUserSql}</CodeBlock>

      {children}

      <h4 id="obtaining-the-clickhouse-service-iam-role-arn">Obtain the ClickHouse service IAM role ARN</h4>

      <ol>
        <li>Log in to your ClickHouse Cloud account.</li>
        <li>Select the ClickHouse service you want to connect.</li>
        <li>Select the <strong>Settings</strong> tab.</li>
        <li>Scroll to the <strong>Network security information</strong> section at the bottom of the page.</li>
        <li>Copy the service's <strong>Service role ID (IAM)</strong> value, shown below.</li>
      </ol>

      <Frame>
        <img src="/docs/images/cloud/security/secures3_arn.webp" alt="Service role ID (IAM) value in the Network security information section" />
      </Frame>

      <p>This value is your <code>{'{ClickHouse_IAM_ARN}'}</code> — the role ClickPipes uses to access your {svc.name} {svc.resource}.</p>

      <h4 id="obtaining-the-rds-resource-id">Obtain the resource ID</h4>

      <ol>
        <li>Log in to your AWS account and go to the {svc.name} {svc.resource} you want to configure.</li>
        <li>Select the <strong>Configuration</strong> tab.</li>
        <li>Note the <strong>Resource ID</strong> value — it looks like <code>{svc.id}</code>. This is your <code>{'{RDS_RESOURCE_ID}'}</code>, which you reference in the permissions policy.</li>
      </ol>

      <h4 id="manually-create-iam-role">Create the IAM role</h4>

      <ol>
        <li>Log in to your AWS account with an IAM user that has permission to create and manage IAM roles.</li>
        <li>Open the IAM console.</li>
        <li>
          Create a new IAM role with the following trust and permissions policies.

          <p>Trust policy (replace <code>{'{ClickHouse_IAM_ARN}'}</code> with the IAM role ARN of your ClickHouse instance):</p>

          <CodeBlock language="json">{`{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "{ClickHouse_IAM_ARN}"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}`}</CodeBlock>

          <p>Permissions policy (replace <code>{'{RDS_RESOURCE_ID}'}</code> with the resource ID of your {svc.name} {svc.resource}, <code>{'{RDS_REGION}'}</code> with its region, and <code>{'{AWS_ACCOUNT}'}</code> with your AWS account ID):</p>

          <CodeBlock language="json">{`{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:{RDS_REGION}:{AWS_ACCOUNT}:dbuser:{RDS_RESOURCE_ID}/clickpipes_iam_user"
      ]
    }
  ]
}`}</CodeBlock>
        </li>
        <li>Once the role is created, copy its ARN. This is your <code>{'{RDS_ACCESS_IAM_ROLE_ARN}'}</code>.</li>
      </ol>

      <p>You can now use this IAM role to authenticate with your {svc.name} {svc.resource} from ClickPipes.</p>
    </>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<div id="supported-postgres-versions">
  ## Поддерживаемые версии Postgres
</div>

ClickPipes поддерживает Postgres версии 12 и новее.

<div id="enable-logical-replication">
  ## Включите логическую репликацию
</div>

Вы можете пропустить этот раздел, если для вашего экземпляра RDS уже задан следующий параметр:

* `rds.logical_replication = 1`

Обычно этот параметр уже настроен, если вы ранее использовали другой инструмент для репликации данных.

```text theme={null}
postgres=> SHOW rds.logical_replication ;
 rds.logical_replication
-------------------------
 on
(1 row)
```

Если это ещё не настроено, выполните следующие действия:

1. Создайте новую группу параметров для вашей версии Postgres с требуемыми настройками:
   * Установите `rds.logical_replication` в значение 1

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/parameter_group_in_blade.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=544b6653493e22c0ce7b914b340590e8" alt="Где в RDS находятся группы параметров?" size="lg" border width="1800" height="819" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/parameter_group_in_blade.webp" />

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/change_rds_logical_replication.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=0632537820a4fca3db4b99dd3a6e8e6a" alt="Изменение значения rds.logical_replication" size="lg" border width="1800" height="795" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/change_rds_logical_replication.webp" />

2. Примените новую группу параметров к вашей базе данных RDS Postgres

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/modify_parameter_group.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=213e9c50f960e1e27acd6dcbe57f2d46" alt="Изменение RDS Postgres с использованием новой группы параметров" size="lg" border width="1800" height="1352" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/modify_parameter_group.webp" />

3. Перезагрузите экземпляр RDS, чтобы изменения вступили в силу

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/reboot_rds.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=4b5bbff654c690b853c4a3503446df9b" alt="Перезагрузка RDS Postgres" size="lg" border width="1800" height="757" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/reboot_rds.webp" />

<div id="configure-database-user">
  ## Настройка пользователя базы данных
</div>

Подключитесь к своему экземпляру RDS Postgres от имени администратора и выполните следующие команды:

1. Создайте отдельного пользователя для ClickPipes:

   ```sql theme={null}
   CREATE USER clickpipes_user PASSWORD 'some-password';
   ```

2. Выдайте пользователю, созданному на предыдущем шаге, права только для чтения на уровне схемы. В следующем примере показаны разрешения для схемы `public`. Повторите эти команды для каждой схемы, содержащей таблицы, которые вы хотите реплицировать:

   ```sql theme={null}
   GRANT USAGE ON SCHEMA "public" TO clickpipes_user;
   GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user;
   ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user;
   ```

3. Выдайте пользователю права на репликацию:

   ```sql theme={null}
   GRANT rds_replication TO clickpipes_user;
   ```

4. Создайте [публикацию](https://www.postgresql.org/docs/current/logical-replication-publication.html) с таблицами, которые вы хотите реплицировать. Мы настоятельно рекомендуем включать в публикацию только необходимые таблицы, чтобы избежать лишних накладных расходов на производительность.

<Warning>
  Любая таблица, включённая в публикацию, должна либо иметь **первичный ключ**, *либо* иметь настроенный параметр **replica identity** со значением `FULL`. Рекомендации по выбору состава публикации см. в [FAQ по Postgres](/docs/ru/integrations/clickpipes/postgres/faq#how-should-i-scope-my-publications-when-setting-up-replication).
</Warning>

* Чтобы создать публикацию для определённых таблиц:

  ```sql theme={null}
  CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2;
  ```

  * Чтобы создать публикацию для всех таблиц в определённой схеме:

    ```sql theme={null}
    CREATE PUBLICATION clickpipes FOR TABLES IN SCHEMA "public";
    ```

Публикация `clickpipes` определяет набор таблиц, события изменений в которых будут передаваться в ClickPipes. Мы не рекомендуем использовать `FOR ALL TABLES`, если только вы не собираетесь реплицировать все таблицы, поскольку включение лишних таблиц увеличивает объём WAL-трафика из Postgres в ClickPipes и снижает общую эффективность репликации.

<div id="iam-authentication">
  ### Использование IAM-аутентификации (необязательно)
</div>

<IAMAuthentication engine="postgres" service="rds">
  <Note>
    Для IAM-аутентификации при репликации необходимо, чтобы параметр `rds.iam_auth_for_replication` был установлен в `1`. Это поддерживается, начиная с PostgreSQL 11; в более ранних версиях можно запускать только ClickPipes в режиме `Initial Load Only`.
  </Note>
</IAMAuthentication>

<div id="configure-network-access">
  ## Настройка сетевого доступа
</div>

<div id="ip-based-access-control">
  ### Управление доступом по IP-адресам
</div>

Если вы хотите ограничить трафик к своему экземпляру RDS, добавьте [задокументированные статические NAT IP-адреса](/docs/ru/integrations/clickpipes/networking/static-ips) в раздел `Inbound rules` группы безопасности RDS.

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/security_group_in_rds_postgres.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=66e739ad9a204f9090663215001fcc49" alt="Где найти группу безопасности в RDS Postgres?" size="lg" border width="1800" height="707" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/security_group_in_rds_postgres.webp" />

<Image img="https://mintcdn.com/private-7c7dfe99/ODDx2ujqe_LWUyTV/images/integrations/data-ingestion/clickpipes/postgres/source/rds/edit_inbound_rules.webp?fit=max&auto=format&n=ODDx2ujqe_LWUyTV&q=85&s=9808abca84e218a11bf9a241473ba062" alt="Изменение inbound rules для указанной выше группы безопасности" size="lg" border width="1800" height="935" data-path="images/integrations/data-ingestion/clickpipes/postgres/source/rds/edit_inbound_rules.webp" />

<div id="private-access-via-aws-privatelink">
  ### Частный доступ через AWS PrivateLink
</div>

Чтобы подключиться к экземпляру RDS через частную сеть, можно использовать AWS PrivateLink. Для настройки подключения следуйте нашему [руководству по настройке AWS PrivateLink для ClickPipes](/docs/ru/resources/support-center/knowledge-base/cloud-services/aws-privatelink-setup-for-clickpipes).

<div id="workarounds-for-rds-proxy">
  ### Варианты обхода для RDS Proxy
</div>

RDS Proxy не поддерживает подключения для логической репликации. Если в RDS у вас используются динамические IP-адреса и вы не можете использовать DNS-имя или Lambda, вот несколько альтернатив:

1. Используйте задание cron, чтобы периодически определять IP-адрес конечной точки RDS и обновлять NLB, если он изменился.
2. Используйте уведомления о событиях RDS с EventBridge/SNS: автоматически запускайте обновления через уведомления AWS RDS о событиях.
3. Стабильный EC2: разверните экземпляр EC2, который будет выступать в роли сервиса опроса или IP-прокси.
4. Автоматизируйте управление IP-адресами с помощью таких инструментов, как Terraform или CloudFormation.

<div id="whats-next">
  ## Что дальше?
</div>

Теперь вы можете [создать свой ClickPipe](/docs/ru/integrations/clickpipes/postgres/index) и начать ингестию данных из вашего экземпляра Postgres в ClickHouse Cloud.
Обязательно сохраните сведения о подключении, которые вы использовали при настройке экземпляра Postgres, так как они понадобятся вам при создании ClickPipe.
