Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
    • Heroku Inference
      • Inference API
      • Quick Start Guides
      • AI Models
      • Inference Essentials
    • Vector Database
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • データベースとデータ管理
  • Heroku Postgres
  • PrivateLink 経由で Private または Shield の Heroku Postgres データベースに接続する

PrivateLink 経由で Private または Shield の Heroku Postgres データベースに接続する

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2023年05月30日(火)

Table of Contents

  • Heroku の前提条件
  • Heroku エンドポイントのプロビジョニング
  • Amazon VPC エンドポイントのプロビジョニング
  • Heroku と Amazon VPC エンドポイントの接続
  • VPC エンドポイント経由で EC2 から Heroku Postgres に接続する
  • 制限
  • Private Space の信頼済み IP 範囲との比較

この記事では、AWS PrivateLink​ を使用して、AWS VPC と、Private Space​ または Shield Private Space​ で実行されている Heroku Postgres データベースの間に安全な接続を作成する方法について説明します。このプロセスは、大きく分けて 3 つの手順で構成されます。

  1. エンドポイントサービスを Heroku Postgres データベース上に作成する
  2. エンドポイントネットワークインターフェースを AWS VPC に作成する
  3. 2 つのエンドポイント間に安全な接続を確立する

接続のセットアップの一環として、承認されたアカウントのリストを指定し、VPC から Heroku Postgres データベースへのアクセスを制限することができます。

この機能を使用するには、作成した Amazon VPC エンドポイントを、Heroku Postgres データベースと同じリージョンにあるサブネットにプロビジョニングする必要があります。

Heroku の前提条件

PrivateLink エンドポイントをセットアップするには、次の Heroku リソースが必要です。

  • Private Space。この記事​で、Heroku Dashboard または Heroku CLI を使用して Private Space を作成する方法を説明しています。

  • Shield Private Space。この記事​で、Heroku Dashboard または Heroku CLI を使用して Shield Private Space を作成する方法を説明しています。

  • Private Space または Shield Private Space で、Heroku Postgres データベースをアタッチした状態で実行されている Heroku アプリ。Private Space または Shield Private Space で実行されているすべての Heroku Postgres インスタンスでは、それぞれ private​ または shield​ プランタイプのいずれかを使用します。

Heroku エンドポイントのプロビジョニング

手順 1: PrivateLink CLI プラグインを使用して Heroku Data をインストールする

$ heroku plugins:install @heroku-cli/plugin-data-privatelink

手順 2: AWS アカウント ID を取得する

AWS アカウント ID は、次のように AWS CLI を使用して取得できます。

$ aws sts get-caller-identity --output text --query 'Account'

123456789101

このコマンド例では、アカウント ID 123456789101​ が返されています。

アカウント ID は AWS アカウントの My Account​ (マイアカウント) ページから取得することもできます。アカウント ID​ は Account Settings​ (アカウント設定) セクションに表示されます。

サンプル AWS アカウントの 「My Account」 (マイアカウント) ウィンドウのスクリーンキャプチャ

手順 3: PrivateLink エンドポイントの作成

次の Heroku CLI コマンドを使用して、PrivateLink エンドポイントを作成します (値の置き換えに注意してください)。

$ heroku data:privatelink:create POSTGRESQL_ADDON_NAME --aws-account-id ACCOUNT_ID --app APP_NAME
  • POSTGRESQL_ADDON_NAME​ は、Heroku Postgres データベースの名前に置き換えます (例: ​postgresql-sushi-12345​)。
  • APP_NAME​ を自分のアプリ名に置き換えます。
  • ACCOUNT_ID​ は、Heroku Postgres データベースへのアクセスを許可する AWS アカウントに置き換えます。次のいずれかのパターンに一致する ID を指定してください。
    • account-id
    • account-id​:user/username
    • account-id​:role/rolename

--aws-account-id​ フラグを複数回指定して、複数のアカウントを含めることができます。

次に示すのは、コマンドとそれに伴う出力の例です。

$ heroku data:privatelink:create postgresql-sushi-12345 --aws-account-id 123456789101:user/abc.xyz --app privatelink-vpc-endpoint-demo
Creating privatelink... done

Service Name: Provisioning
Status:       Provisioning

The privatelink is now being provisioned for postgresql-sushi-12345.
Run heroku data:privatelink:wait postgresql-sushi-12345 -a APP to check the creation process.

新しい PrivateLink エンドポイントが利用可能になるまで、通常 5 ~ 10 分かかります。heroku data:privatelink:wait postgresql-sushi-12345 --app APP_NAME​ で進捗状況を追跡できます。

手順 4: エンドポイントのサービス名を取得する

PrivateLink エンドポイントのプロビジョニングが終了したら、次のコマンドを使用してその詳細を表示します。

$ heroku data:privatelink POSTGRESQL_ADDON_NAME --app APP_NAME

POSTGRESQL_ADDON_NAME​ は Heroku Postgres データベースの名前に、APP_NAME​ はアプリの名前にそれぞれ置き換えます。

次に示すのは、コマンドとそれに伴う出力の例です。

$ heroku data:privatelink postgresql-sushi-12345 --app privatelink-vpc-endpoint-demo
=== privatelinks for postgresql-sushi-12345
Service Name:         com.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec
Status:               Operational

=== Allowed Accounts
ARN                                    Status
arn:aws:iam::123456789101:user/abc.xyz Active

Your privatelink is now operational.
You must now copy the Service Name and follow the rest of the steps listed in https://devcenter.heroku.com/articles/heroku-postgres-via-privatelink.

コマンドの出力から Service Name​ フィールドの値をコピーします (上記の例では、値は com.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec​)。この値は、Amazon VPC エンドポイントをプロビジョニング​するために必要になります。

Amazon VPC エンドポイントのプロビジョニング

このセクションの手順は、Amazon VPC ダッシュボードから実行します。

手順 1: セキュリティグループを作成して設定する

適切な ingress セキュリティルールを持つセキュリティグループがエンドポイントに必要です。VPC ダッシュボードの Security Groups​ (セキュリティグループ) タブで Create security group​ (セキュリティグループの作成) をクリックします。

AWS コンソールの 「Create security group」 (セキュリティグループの作成) ウィンドウを示すスクリーンキャプチャ

Create​ (作成) をクリックする前に、適切なセキュリティグループの名前と説明を指定し、目的の VPC を選択します。

AWS コンソールでのセキュリティグループの名前と説明の編集を示すスクリーンキャプチャ

新しく作成したセキュリティグループをリストから選択して Actions > Edit inbound rules​ (アクション > インバウンドルールの編集) をクリックします。

選択中のセキュリティグループを示すスクリーンキャプチャ

任意の有効な IP アドレスからポート 5432–5433​ への TCP アクセスを有効にして Save rules​ (ルールの保存) をクリックします。 セキュリティグループに追加中の ingress ルールを示すスクリーンキャプチャ

手順 2: エンドポイントの作成

VPC ダッシュボードの Endpoints​ (エンドポイント) タブに移動して Create Endpoint​ (エンドポイントの作成) をクリックします。

AWS コンソールの 「Create Endpoint」 (エンドポイントの作成) ウィンドウを示すスクリーンキャプチャ

表示された 「Create Endpoint」 (エンドポイントの作成) フォームで、Find service by name​ (サービスを名前で検索) オプションを選択して、以前に取得​した Service Name​ の値を貼り付けます。

Verify​ (確認) をクリックして、利用可能なサブネットのリストを表示します。

作成中のエンドポイントを示すスクリーンキャプチャ

以前に作成したセキュリティグループを VPC エンドポイントにアタッチして Create endpoint​ (エンドポイントの作成) をクリックします。

アタッチ中のセキュリティグループ

エンドポイントは pending acceptance​ の初期ステータスで作成され、5 ~ 10 分後に available​ に遷移します。

利用可能な状態の VPC エンドポイント

Heroku と Amazon VPC エンドポイントの接続

Amazon VPC エンドポイントが available​ になったら、VPC が Heroku Postgres データベース (DATABASE_ENDPOINT_ID_URL​) および PgBouncer (DATABASE_ENDPOINT_ID_PGBOUNCER_URL​) と通信できるようにするために、Heroku によって作成される環境設定から URL を取得できます。

PgBouncer は、Heroku Postgres データベース用の接続プールを設定できるようにするサービスです。Heroku Postgres での接続プールの詳細を参照してください。

まず、PrivateLink エンドポイントのエンドポイント ID​ を取得し、その末尾の 17 文字の文字列を抽出します。この文字列を大文字に変換して​、下記のコマンドで使用します。

たとえば、エンドポイント ID が vpce-01c87ae3c05563935​ の場合、使用する文字列は 01C87AE3C05563935​ です。

取得した文字列でプレースホルダーを置き換えて、次のコマンドを実行します。

$ heroku config --app your_app_name | grep ENDPOINT_ID_HERE

AWS VPC エンドポイント接続 URL と、それに対応した Heroku Postgres データベース用の接続文字列が表示されます。接続文字列は次の形式です。

postgres://user:password@vpc-endpoint-dns-name:5432/database

この接続文字列を使用して、AWS VPC 内のアプリケーションをプライベートの Heroku Postgres データベースと PgBouncer インスタンスに接続できるようになりました。次に示すのは、コマンドとそれに伴う出力の例です。

$ heroku config --app privatelink-vpc-endpoint-demo | grep 01C87AE3C05563935

DATABASE_ENDPOINT_01C87AE3C05563935_URL:           postgres://abcdefghijklmn:abcdefghijklmnopqrstuvwxyz123456789101112131415161718192021222324@ec2-3-83-63-168.compute-1.amazonaws.com:5432/dd0k757ojc5qt
DATABASE_ENDPOINT_01C87AE3C05563935_PGBOUNCER_URL: postgres://abcdefghijklmn:abcdefghijklmnopqrstuvwxyz123456789101112131415161718192021222324@ec2-3-83-63-168.compute-1.amazonaws.com:5433/dd0k757ojc5qt

この機能の使用に関して問題または気になる点がある場合は、サポートチケット​を開いてください。

VPC エンドポイント経由で EC2 から Heroku Postgres に接続する

VPC エンドポイントを設定し終えたら、AWS VPC に EC2 インスタンスを作成して、Heroku Postgres に接続できます。

EC2 ダッシュボードで Launch Instance​ (インスタンスの起動) をクリックして、AMI とインスタンスの種類を選択します。この例では、Ubuntu t2.micro インスタンスが作成されます。

EC2 ダッシュボードの [AMI] ウィンドウ

EC2 ダッシュボードの 「Instance Type」 (インスタンスの種類) ウィンドウ

インスタンスの詳細を設定するときは、以前に作成した​セキュリティグループがある VPC ネットワークを選択し、適切なサブネットを選択します。Review and Launch​ (確認と起動) をクリックして EC2 インスタンスを起動します。

EC2 インスタンスの起動

インスタンスのステータスが running​ に遷移し、すべてのステータスチェックに合格したら、インスタンスの作成中に指定した SSH キーペアを使用してインスタンスに接続します。

接続したら、次のコマンドで EC2 インスタンスに Postgres をインストールします。

$ sudo apt-get -qq update && sudo apt-get install -y curl ca-certificates
$ curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get -qq update
$ sudo apt-get install -y postgresql-client-10

その後、次のコマンドを使用して、EC2 インスタンスから Heroku Postgres データベースに接続できます。

$ psql postgres://user:password@vpc-endpoint-dns-name:5432/database

次のスクリーンショットは、サンプルの EC2 インスタンスの内部から Heroku Postgres データベースに接続するために使用する接続文字列を示しています。

VPC EC2 インスタンスからプライベート Postgres データベースへの接続

制限

  • 作成した Amazon VPC エンドポイントは、Heroku Postgres データベースと同じリージョンにあるサブネットにプロビジョニングする必要があります。
  • Heroku Postgres データベースへのアクセスが 100% 安全であることを保証するために VPC のセキュリティを検証するのはお客様の責任です。

Private Space の信頼済み IP 範囲との比較

Private Spaces では、データサービス用の信頼済み IP 範囲​をベータ機能としてサポートしています。この機能は、Private Space 境界の外側から Heroku Postgres データベースに接続する必要がある場合の選択肢です。ただし、この機能を有効にするには Heroku に連絡する必要があり、きめ細かなアクセス制御はこの機能には利用できません。

AWS PrivateLink 経由で接続することにより、データベースはお客様自身の VPC の一部として扱われ、ユーザーとロールの集合へのアクセスをお客様が制限できます。したがって、お客様のユースケースで利用可能な場合は常に、こちらの手法を推奨します。

関連カテゴリー

  • Heroku Postgres
暗号化鍵を使用した Heroku Postgres の暗号化 外部リソースから Private または Shield の Heroku Postgres データベースに接続する

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices