PostgreSQL DB インスタンスを作成して接続する
このチュートリアルでは、EC2 インスタンスと RDS for PostgreSQL DB インスタンスを作成します。このチュートリアルでは、標準の PostgreSQL クライアントを使用して EC2 インスタンスから DB インスタンスにアクセスする方法を示します。ベストプラクティスとして、このチュートリアルでは、プライベート DB インスタンスを仮想プライベートクラウド (VPC) に作成します。ほとんどの場合、EC2 インスタンスなど、同じ VPC 内の他のリソースは DB インスタンスにアクセスできますが、VPC 外部のリソースはアクセスできません。
チュートリアルを完了すると、VPC 内の各アベイラビリティーゾーンにパブリックサブネットとプライベートサブネットができます。1 つのアベイラビリティーゾーンで、EC2 インスタンスはパブリックサブネットにあり、DB インスタンスはプライベートサブネットにあります。
重要
AWS アカウントを作成するための料金はかかりません。ただし、このチュートリアルを完了すると、使用する AWS リソースのコストが発生する可能性があります。これらのリソースが不要になった場合は、チュートリアルの完了後に削除できます。
次の図は、チュートリアルが完了した時点の設定を示しています。
このチュートリアルでは、次のいずれかの方法を使用してリソースを作成できます。
-
AWS マネジメントコンソール を使用する ‐「EC2 インスタンスの作成」と「PostgreSQL DB インスタンスを作成する」
-
CloudFormation を使用してデータベースインスタンスと EC2 インスタンスを作成する ‐ (オプション) CloudFormation を使用して VPC、EC2 インスタンス、PostgreSQL インスタンスを作成する
最初の方法では、[簡単作成] を使用して、AWS マネジメントコンソール でプライベート PostgreSQL DB インスタンスを作成します。ここでは、DB エンジンタイプ、DB インスタンスサイズ、DB インスタンス識別子のみを指定します。[Easy create (簡易作成)] では、他の設定オプションのデフォルト設定を使用します。
代わりに [標準作成] を使用する場合は、DB インスタンスの作成時にさらに多くの設定オプションを指定できます。このようなオプションには、可用性、セキュリティ、バックアップ、メンテナンスの設定があります。パブリック DB インスタンスを作成するには、[標準作成] を使用する必要があります。詳細については、「Amazon RDS DB インスタンスの作成」を参照してください。
トピック
前提条件
開始する前に、以下のセクションのステップを完了してください。
EC2 インスタンスの作成
データベースへの接続に使用する Amazon EC2 インスタンスを作成します。
EC2 インスタンスを作成するには
AWS マネジメントコンソール にサインインし、Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
AWS マネジメントコンソール の右上で、EC2 インスタンスを作成する AWS リージョン を選択します。
-
次の図に示すように、[EC2 ダッシュボード] を選択し、次に [インスタンスの起動] を選択します。
[インスタンスを起動] ページが開きます。
-
[インスタンスを起動] ページで次の設定を選択します。
-
[Name and tags] (名前とタグ) の、[Name] (名前) で、
ec2-database-connectと入力します。 -
[アプリケーションおよび OS イメージ (Amazon マシンイメージ)] で、[Amazon Linux] を選択し、[Amazon Linux 2023 AMI] を選択します。他の選択肢は、デフォルトの選択のままにします。
-
[Instance type] (インスタンスタイプ) で [t2.micro] を選択します。
-
[Key pair (login)] (キーペア (ログイン)) で、[Key pair name] (キーペア名) を選択して、既存のキーペアを使用します。Amazon EC2 インスタンスの新しい key pair を作成するには、[Create new key pair] (新しい key pair を作成する) を選択し、[Create key pair] (キーペアを作成する) ウィンドウを使用して作成します。
新しいキーペアの作成については、「Amazon EC2 ユーザーガイド」の「キーペアの作成」を参照してください。
-
ネットワーク設定の [SSH トラフィックを許可] で、EC2 インスタンスへの SSH 接続のソースを選択します。
表示された IP アドレスが SSH 接続に適している場合は、[My IP] (マイ IP)を選択できます。それ以外の場合は、Secure Shell (SSH) を使用して VPC の EC2 インスタンスへの接続に使用する IP アドレスを決定します。パブリック IP アドレスを決定するには、別のブラウザウィンドウまたはタブで、https://checkip.amazonaws.com
のサービスを使用できます。IP アドレスの例は 192.0.2.1/32 です。 多くの場合、インターネットサービスプロバイダー (ISP) 経由、またはファイアウォールの内側から静的 IP アドレスなしで接続することがあります。その場合、クライアントコンピュータが使用する IP アドレスの範囲を確認してください。
警告
SSH アクセスに
0.0.0.0/0を使用すると、すべての IP アドレスが SSH を使ってパブリック EC2 インスタンスにアクセスできるようになります。この方法は、テスト環境で短時間なら許容できますが、実稼働環境では安全ではありません。実稼働環境では、特定の IP アドレスまたは特定のアドレス範囲にのみ、SSH を使った EC2 インスタンスへのアクセスを承認します。以下のイメージは、[ネットワーク設定] セクションの例を示しています。
-
残りのセクションをデフォルト値のままにします。
-
[概要] パネルで、EC2 インスタンス設定の概要を確認し、準備ができたら、[インスタンスの起動] を選択します。
-
-
[起動ステータス] ページで、新しい EC2 インスタンスの ID (例:
i-1234567890abcdef0) をメモします。
-
EC2 インスタンス ID を選択して、EC2 インスタンスのリストを開き、EC2 インスタンスを選択します。
-
[詳細] タブで、SSH を使用して接続するときに必要な次の値を書き留めます。
-
[インスタンスの概要] で、[パブリック IPv4 DNS] の値を書き留めます。
-
[インスタンスの詳細] で、[キーペア名] の値を書き留めます。
-
-
EC2 インスタンスの [インスタンス状態] が [実行中] になるまで待ってから、続行します。
PostgreSQL DB インスタンスを作成する
Amazon RDS の基本的な構成要素は DB インスタンスです。これは、PostgreSQL データベースを実行する環境です。
この例では、[簡単作成] を使用して、DB インスタンスクラスが db.t3.micro の PostgreSQL データベースエンジンを実行する DB インスタンスを作成します。
簡易作成で PostgreSQL DB インスタンスを作成するには
-
AWS マネジメントコンソール にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 Amazon RDS コンソールの右上で、DB インスタンスを作成する AWS リージョンを選択します。
-
ナビゲーションペインで、[データベース] を選択します。
-
[Create database (データベースの作成)] を選択し、[Easy create (簡易作成)] が選択されていることを確認します。
-
[設定] で、[PostgreSQL] を選択します。
-
[DB インスタンスサイズ] で、[無料利用枠] を選択します。[無料利用枠] は無料プランアカウントに表示されます。[サンドボックス] は有料プランアカウントに表示されます。
-
[DB instance identifier] (DB インスタンス識別子) に
database-test1と入力します。 -
[マスターユーザー名] に、マスターユーザーの名前を入力するか、デフォルト名 (
postgres) のままにします。[データベースの作成] ページは、次のイメージのようになります。無料プランアカウントの場合、[無料利用枠] が表示されます。有料プランアカウントの場合、[サンドボックス] が表示されます。
-
DB インスタンス用に自動生成されたマスターパスワードを使用するには、[パスワードの自動生成] を選択します。
マスターパスワードを入力するには、[パスワードの自動生成] チェックボックスをオフにして、[マスターパスワード] と [パスワードの確認] に同じパスワードを入力します。
-
以前に作成した EC2 インスタンスとの接続をセットアップするには、[EC2 接続のセットアップ - オプション] を開きます。
[EC2 コンピューティングリソースに接続] を選択します。以前に作成した EC2 インスタンスを選択します。
-
[簡易作成のデフォルト設定を表示] を開きます。
[Easy Create (簡易作成)] で使用されるデフォルト設定を調べることができます。[データベース作成後に編集可能] 列には、データベース作成後に変更できるオプションが表示されます。
-
その列の設定に [いいえ] があり、別の設定が必要な場合は、[標準作成] を使用して DB インスタンスを作成できます。
-
その列の設定に [はい] があり、別の設定が必要な場合は、[標準作成] を使用して DB インスタンスを作成するか、DB インスタンスの作成後に設定を変更できます。
-
-
[データベースの作成] を選択します。
DB インスタンスのマスターユーザー名およびパスワードを表示するには、[認証情報の詳細の表示] を選択します。
表示されるユーザー名とパスワードを使用して、マスターユーザーとして DB インスタンスに接続できます。
重要
マスターユーザーのパスワードを再度表示することはできません。記録していない場合は、変更する必要がある場合があります。
DB インスタンスが有効になった後にマスターユーザーのパスワードを変更する必要がある場合は、そのように DB インスタンスを変更することができます。DB インスタンスの変更の詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
[データベース] リストで、新しい PostgreSQL DB インスタンスの名前を選択し、詳細を表示します。
DB インスタンスが使用できるようになるまで、DB インスタンスのステータスは [作成中] のままです。
ステータスが [Available] (利用可能) に変わったら、DB インスタンスに接続できます。DB インスタンスクラスとストレージの合計によっては、新しいインスタンスを使用できるようになるまで最長 20 分かかることがあります。
(オプション) CloudFormation を使用して VPC、EC2 インスタンス、PostgreSQL インスタンスを作成する
コンソールを使用して VPC、EC2 インスタンス、PostgreSQL DB インスタンスを作成する代わりに、CloudFormation を使用して Infrastructure as Code として取り扱うことで、AWS リソースをプロビジョンできます。AWS リソースをより小さく管理しやすい単位に整理するには、CloudFormation のネストされたスタック機能を使用できます。詳細については、「CloudFormation コンソールでのスタックの作成」と「ネストされたスタックの操作」を参照してください。
重要
CloudFormation は無料ですが、CloudFormation が作成するリソースは実動のものです。これらのリソースを終了するまで、標準使用料が発生します。詳細については、「RDS for PostgreSQL の料金
CloudFormation コンソールを使用してリソースを作成するには、以下のステップを実行します。
-
CloudFormation テンプレートをダウンロードする
-
CloudFormation を使用してリソースを設定する
CloudFormation テンプレートをダウンロードする
CloudFormation テンプレートは、スタックに作成するリソースに関する設定情報が含まれる JSON または YAML のテキストファイルです。このテンプレートは、RDS インスタンスとともに VPC と踏み台ホストも作成します。
テンプレートファイルをダウンロードするには、次のリンク、PostgreSQL CloudFormation template
この Github ページで、[Download raw file] ボタンをクリックしてテンプレートの YAML ファイルを保存します。
CloudFormation を使用してリソースを設定する
注記
このプロセスを開始する前に、AWS アカウント に EC2 インスタンスのキーペアがあることを確認してください。詳細については、「Amazon EC2 キーペアおよび Linux インスタンス」を参照してください。
CloudFormation テンプレートを使用する場合は、適切なパラメータを選択して、リソースが正しく作成されていることを確認する必要があります。以下のステップを実行します。
-
AWS マネジメントコンソール にサインインし、CloudFormation コンソール (https://console.aws.amazon.com/cloudformation
) を開きます。 -
[Create Stack] (スタックの作成) を選択します。
-
[テンプレートの指定] セクションで、[コンピュータからテンプレートファイルをアップロード] を選択し、[次へ] をクリックします。
-
[スタックの詳細を指定] ページで、次のパラメータを設定します。
-
[スタック名] は [PostgreSQLTestStack] に設定します。
-
[パラメータ] で、3 つのアベイラビリティーゾーンを選択して、[アベイラビリティーゾーン] を設定します。
-
[Linux 踏み台ホスト設定] で、[キー名] に EC2 インスタンスにログインするキーペアを選択します。
-
[Linux 踏み台ホスト設定] で、[許可された IP 範囲] を IP アドレスに設定します。Secure Shell (SSH) を使用して VPC 内の EC2 インスタンスに接続するには、https://checkip.amazonaws.com
のサービスを使用してパブリック IP アドレスを確認します。IP アドレスの例は 192.0.2.1/32 です。 警告
SSH アクセスに
0.0.0.0/0を使用すると、すべての IP アドレスが SSH を使ってパブリック EC2 インスタンスにアクセスできるようになります。この方法は、テスト環境で短時間なら許容できますが、実稼働環境では安全ではありません。実稼働環境では、特定の IP アドレスまたは特定のアドレス範囲にのみ、SSH を使った EC2 インスタンスへのアクセスを承認します。 -
[Database General configuration] で、[データベースインスタンスクラス] を [db.t3.micro] に設定します。
-
[データベース名] を
database-test1に設定します。 -
[データベースマスターユーザー名] には、PDB のマスターユーザー名を入力します。
-
このチュートリアルでは、[Secrets Manager で DB マスターユーザーパスワードを管理] を
falseに設定します。 -
[データベースパスワード] には、任意のパスワードを設定します。このパスワードは、チュートリアルの他の手順のために覚えておいてください。
-
[Database Storage configuration] で、[Database storage type] を [gp2] に設定します。
-
[Database Monitoring configuration] で、[Enable RDS Performance Insights] を false に設定します。
-
その他の設定はすべてデフォルトの値のままにします。[次へ] をクリックして続行します。
-
-
[スタックオプションの設定] ページでは、すべてのデフォルトオプションをそのまま使用します。[次へ] をクリックして続行します。
-
[スタックの確認] ページで、データベースと Linux 踏み台ホストのオプションを確認した後、[送信] をクリックします。
スタックの作成プロセスが完了したら、BastionStack と RDSNS という名前のスタックを確認して、データベースへの接続に必要な情報をメモします。詳細については、「AWS マネジメントコンソール での CloudFormation スタックデータとリソースの表示」を参照してください。
PostgreSQL DB インスタンスへの接続
pgadmin または psql を使用して DB インスタンスに接続できます。この例では、psql コマンドラインクライアントを使用して PostgreSQL DB インスタンスに接続する方法について説明します。
psql を使用して PostgreSQL DB インスタンスに接続するには
-
DB インスタンスのエンドポイント (DNS 名) とポート番号を見つけます。
AWS マネジメントコンソール にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
Amazon RDS コンソールの右上で、DB インスタンスの AWS リージョン を選択します。
-
ナビゲーションペインで、[Databases] (データベース) を選択します。
-
PstgreSQL DB インスタンス名を選択して、詳細を表示します。
-
接続とセキュリティ タブで、エンドポイントをコピーします。また、ポート番号を書き留めます。DB インスタンスに接続するには、エンドポイントとポート番号の両方が必要です。
-
「Amazon EC2 ユーザーガイド」の「Linux インスタンスに接続する」のステップに従って、先ほど作成した EC2 インスタンスに接続します。
SSH を使用して EC2 インスタンスに接続することをお勧めします。SSH クライアントユーティリティが Windows、Linux、または Mac にインストールされている場合は、次のコマンド形式でインスタンスに接続できます。
ssh -ilocation_of_pem_fileec2-user@ec2-instance-public-dns-name例えば、
ec2-database-connect-key-pair.pemが Linux の/dir1に保存されていて、EC2 インスタンスのパブリック IPv4 DNS がec2-12-345-678-90.compute-1.amazonaws.comであるとします。SSH コマンドは次のようになります。ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com -
EC2 インスタンスのソフトウェアを更新して、最新のバグ修正とセキュリティ更新を入手します。これを行うには、次のコマンドを使用します。
注記
-yオプションを指定すると、確認メッセージを表示せずに更新をインストールします。インストール前に更新を確認するには、このオプションを省略します。sudo dnf update -y -
PostgreSQL の psql コマンドラインクライアントを Amazon Linux 2023 にインストールするには、次のコマンドを実行します。
sudo dnf install postgresql15 -
PostgreSQL DB インスタンスに接続します。例えば、クライアントコンピュータのコマンドプロンプトで、次のコマンドを入力します。このアクションにより、psql クライアントを使用して、PostgreSQL DB インスタンスに接続できます。
の DB インスタンスエンドポイント (DNS 名) に置き換え、endpointのために接続するデータベース名postgres--dbnameを、に使用したマスターユーザー名に置き換えます。パスワードの入力を求められたときに使用したマスターパスワードを入力します。postgrespsql --host=endpoint--port=5432 --dbname=postgres--username=postgresユーザーのパスワードを入力すると、次のような出力が表示されます。
psql (14.3, server 14.6) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. postgres=>PostgreSQL DB インスタンスへの接続の詳細については、「PostgreSQL データベースエンジンを実行する DB インスタンスへの接続」を参照してください。DB インスタンスに接続できない場合は、「RDS for PostgreSQL インスタンスへの接続に関するトラブルシューティング」を参照してください。
セキュリティのためには、暗号化された接続を使用することがベストプラクティスです。クライアントとサーバーが同じ VPC にあり、ネットワークが信頼できる場合に限り、暗号化されていない PostgreSQL 接続を使用します。暗号化された接続の使用については、「 SSL 経由での PostgreSQL DB インスタンスへの接続」を参照してください。
-
SQL コマンドを実行する。
例えば、次の SQL コマンドは、現在の日付と時刻を表示します。
SELECT CURRENT_TIMESTAMP;
EC2 インスタンスと DB インスタンスを削除する
作成したサンプル EC2 インスタンスと DB インスタンスに接続して、探索したら、料金がこれ以上発生しないように、それらを削除します。
CloudFormation を使用してリソースを作成した場合は、このステップをスキップして次のステップに進みます。
EC2 インスタンスを削除するには
AWS マネジメントコンソール にサインインし、Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択してください。
-
EC2 インスタンスを選択し、[インスタンスの状態]、[インスタンスの終了] の順に選択します。
-
確認を求めるメッセージが表示されたら、[Terminate (終了)] を選択してください。
EC2 インスタンスの削除の詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスの終了」を参照してください。
最終的な DB スナップショットを作成しないで DB インスタンスを削除するには
AWS マネジメントコンソール にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[データベース] を選択します。
-
削除する DB インスタンスを選択します。
-
[アクション] で、[削除] を選択します。
-
[最終スナップショットを作成] と [自動バックアップの保持] をクリアします。
-
確認を完了し、[削除] を選択します。
(オプション) CloudFormation で作成された EC2 インスタンスと DB インスタンスを削除する
CloudFormation を使用してリソースを作成した場合は、サンプル EC2 インスタンスと DB インスタンスに接続して確認を済ませた後、それ以上料金が発生しないように、CloudFormation スタックを削除します。
CloudFormation リソースを削除するには
-
CloudFormation コンソールを開きます。
-
CloudFormation コンソールの [スタック] ページで、ルートスタック (VPCStack、BastionStack、または RDSNS という名前がついていないスタック) を選択します。
-
[削除] を選択します。
-
確認を求めるメッセージが表示されたら、[削除] を選択します。
CloudFormation でのスタックの削除方法の詳細については、「AWS CloudFormation ユーザーガイド」の「CloudFormation コンソールでのスタックの削除」を参照してください。
(オプション) DB インスタンスを Lambda 関数に接続する
RDS for PostgreSQL DB インスタンスを Lambda サーバーレスコンピューティングリソースに接続することもできます。Lambda 関数を使用すると、インフラストラクチャをプロビジョニングしたり管理したりせずにコードを実行できます。Lambda 関数を使用すると、1 日に 数十件のイベントから 1 秒間に数百件のイベントまで、あらゆる規模のコード実行リクエストに自動的に応答することもできます。詳細については、「Lambda 関数と DB インスタンスを自動的に接続する」を参照してください。