Connecting to your database
===========================

アプリケーションの接続、または新しいEDB
Postgres分散クラスターへのリモート接続には、以下が含まれます。

-  資格情報の取得と、オプションで\ ``.pgpass`` ファイルの作成

-  接続するPGDプロキシホストのIPアドレスの確立

-  そのIPアドレスに接続できることの確認

-  適切なPostgresクライアントの取得

-  クライアントをクラスターに接続する

資格情報の取得
--------------

デフォルトユーザーのenterprisedbは、
tpaexecによってクラスターに作成されました。また、プロビジョニングの一部として、そのユーザーのパスワードも生成しました。パスワードを取得するには、次を実行します。

.. code:: shell

   tpaexec show-password democluster enterprisedb

このコマンドは、enterprisedbユーザーのパスワードである文字列を結果ます。必要に応じて、パスワードの入力を求められたときにその文字列を使用できます。

.pgpassファイルの作成
---------------------

ホームディレクトリに :ref:`a `.pgpass` file <Monitoring through SQL>` を作成することにより、\ ``psql``
およびその他のPostgresクライアントのパスワードの入力を回避できます。これには、接続時にアプリケーションが検索できるパスワードの詳細が含まれています。パスワードを取得した後
 :ref:`資格情報の取得 <資格情報の取得>` を参照して、好みのエディターを使用して\ ``.pgpass``
ファイルを開くことができます。

ファイルに、次のように入力します。

.. code:: plain

    *:* :bdrdb:enterprisedb:<your password>

ファイルを保存してエディターを終了します。ファイルを保護するには、次のコマンドを実行します。このコマンドは、自分自身にのみ読み取りおよび書き込みアクセスを付与します。

.. code:: shell

   chmod 0600 ~/.pgpass

IPアドレスの確立
----------------

Docker
^^^^^^

Dockerクイックスタートクラスターは、デフォルトで、IPアドレス172.17.0.2kaboom、172.17.0.3kaftan、172.17.04kaolin、および172.17.0.5kapokでアクセスできます。
Dockerはこれらのアドレスを生成します。

AWS
^^^

``democluster/ssh_config``
のIPアドレスを参照できます。または、次を実行します。

.. code:: shell

   aws ec2 --region eu-west-1 describe-instances --query Reservations[ *].Instances[* ].{PublicIpAddress:PublicIpAddress,Name:Tags[?Key==`Name`]|[0].Value}
   __OUTPUT__
   [
       [
           {
               "PublicIpAddress": "54.217.130.13",
               "Name": "kapok"
           }
       ],
       [
           {
               "PublicIpAddress": "54.170.119.101",
               "Name": "kaolin"
           }
       ],
       [
           {
               "PublicIpAddress": "3.250.235.130",
               "Name": "kaftan"
           }
       ],
       [
           {
               "PublicIpAddress": "34.247.188.211",
               "Name": "kaboom"
           }
       ]
   ]

このコマンドは、クラスターインスタンスのEC2のパブリックIPアドレスのリストを表示します。

Linuxホスト
^^^^^^^^^^^

クイックスタートでクラスターを構成するときに、LinuxサーバーのIPアドレスを設定します。それらのアドレスを使用します。

IPアドレスに接続できることを確認します
--------------------------------------

LinuxホストとDocker
^^^^^^^^^^^^^^^^^^^

これらを接続するための構成を実行する必要はありません。

.. _aws-1:

AWS
^^^

AWSは、SSHエンドポイントへの外部アクセスのみを許可するように構成されています。
PostgresクライアントがAWSクラウドの外部から接続できるようにするには、ポート6432でのトラフィックの転送を有効にする必要があります。

独自の外部IPアドレス、またはクラスターに接続するシステムの外部IPアドレスを取得します。これを行う1つの方法は、次を実行することです。

.. code:: shell

   curl https://checkip.amazonaws.com
   __OUTPUT__
   89. 97.100.108

クラスターのセキュリティグループIDも必要です。実行します

.. code:: shell

   aws ec2 --region eu-west-1 describe-security-groups --filter Name=group-name,Values=" *democluster* " | grep GroupId
   __OUTPUT__
               "GroupId": "sg-072f996360ba20d5c",

クラスターの正しいリージョンを入力します。これは、構成時に設定したものです。

::

   aws ec2 authorize-security-group-ingress --group-id <SECURITYGROUPID> --protocol tcp --port 6432 --cidr <YOURIP>/32 --region eu-west-1

繰り返しますが、クラスターに正しいリージョンを入力していることを確認します。

このコマンドの詳細については、AWS
CLIガイドの `Add rules to your security group <https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-sg.html#configuring-a-security-group>`_ で読むことができます。

適切なPostgresクライアントの取得
--------------------------------

ローカルシステムにPostgresをインストールしていない限り、おそらく
``psql``
などのクライアントアプリケーションをインストールして、データベースクラスターに接続する必要があります。

たとえば、Ubuntuでは、次のことを実行できます。

.. code:: shell

   sudo apt install postgresql-client

このコマンドは、 ``psql`` および他のツールをインストールしますが、
Postgresデータベースをローカルにインストールしません。

クライアントをクラスターに接続する
----------------------------------

``psql``
または同様のクライアントをインストールした後、クラスターに接続できます。実行します

.. code:: shell

   psql -h <ipaddressofnode> -p 6432 -U enterprisedb bdrdb
   __OUTPUT__
   psql (15.2, server 15.2.0 (Debian 15.2.0-2.buster))
   SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
   Type "help" for help.

   bdrdb=# 

 :ref:`Use the `.pgpass` file <#creating-a-pgpass-file>` をサポートするクライアントと接続するか、ホスト、ポート、ユーザー、パスワード、およびデータベース名を使用して他のアプリケーションに接続します。

プロキシフェイルオーバーを使用してクライアントをクラスターに接続する
--------------------------------------------------------------------

プロキシのすべてのアドレスをホストとしてリストすることにより、プロキシに障害が発生した場合にクライアントが常にフェールオーバーし、最初に使用可能なプロキシに接続するように保証できます。

.. code:: shell

   psql -h <ipaddressofnode1>,<ipaddressofnode2>,<ipaddressofnode3> -U enterprisedb -p 6432 bdrdb
   __OUTPUT__
   psql (15.2, server 15.2.0 (Debian 15.2.0-2.buster))
   SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
   Type "help" for help.

   bdrdb=# 

接続URLの作成
-------------

多くのアプリケーションは、
 `Connection URL <https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6>`_ を使用してデータベースに接続します。接続URLを作成するには、次の形式で文字列をアセンブルする必要があります。

::

   postgresql://<user>@<ipaddressofnode1>:6432,<ipaddressofnode2>:6432,<ipaddressofnode3>:6432/bdrdb

このフォーマットの文字列は ``psql``
コマンドで使用できるため、データベースノードがIPアドレス192.168.9.10、192.168.10.10および192.168.10.11上にある場合、次を使用できます。

::

   psql postgresql://enterprisedb@192.168.9.10:6432,192.168.10.10:6432,192.168.11.10:6432/bdrdb

作成したURLにパスワードを埋め込むこともできます。
enterprisedbユーザーを使用し、enterprisedbユーザーのパスワードが\ ``notasecret``
である場合、URLは次のようになります。

::

   psql postgresql://enterprisedb:notasecret@192.168.9.10:6432,192.168.10.10:6432,192.168.11.10:6432/bdrdb

実際のパスワードはそれより複雑で、特殊文字が含まれる場合があります。パスワードをurlコード化して、使用しているシェル、コマンド、またはドライバーをトリップしないことを確認する必要があります。

..  Warning Passwords should not be embedded::
   パスワードを埋め込む方法を説明しましたが、これは行わないことをお勧めします。パスワードはURLから簡単に抽出でき、安全でない場所に簡単に保存できます。パスワードを渡す他の方法を検討します。

Java接続URLの作成
^^^^^^^^^^^^^^^^^

最後に、作成したURLは多くのPostgresアプリケーションとクライアントに適していますが、Javaベースのものは、Javaが適切なドライバーを呼び出せるように1つの変更を必要とします。
URLの前に\ ``jdbc:`` を付けて、Java互換のURLを作成します。

::

   jdbc:postgresql://enterprisedb@192.168.9.10:6432,192.168.10.10:6432,192.168.11.10:6432/bdrdb

Moving On
---------

これで、必要なすべての接続資格情報とURLを使用して、アプリケーションをクラスターに接続する準備が整いました。
