Aiven と Google Cloud をピアリングしてデータベースにアクセスする

Database as a Service の Aiven を Google Cloud とピアリング接続して利用してみます
2021.12.09

ウィスキー、シガー、パイプをこよなく愛する大栗です。

最近 Database as a Service の Aiven を触っています。今日は Aiven を Google Cloud 上に作成して自分の VPC とピアリングします。

Aiven のネットワーク設定

Aiven は特に意識せずにサービスを作成すると各クラウドプラットフォームの上でインターネットから直接アクセスするためにパブリックIPが付与され、インターネットを経由してアクセスします。しかしインターネット経由では(アクセス元IPの設定が可能ですが)セキュリティに問題があったり、パブリッククラウドの各種サービスと連携を行いにくくなります。

そこで Aiven の VPC 機能を使用します。Aiven の VPC の中にサービスを作成して、クラウドプラットフォームの VPC と接続して DB にアクセスをして見ます。Google Cloud と接続する場合は以下のような形になります。

Peering Aiven and Google Cloud

やってみる

以下の手順でサービスを構築します。

  1. Aiven の VPC を作成する
  2. Aiven 側のピアリングを作成する
  3. Google Cloud 側のピアリングを作成する
  4. Aiven サービスを作成する
  5. サービスにアクセスしてみる

1. Aiven の VPC を作成する

まずは Aiven 側の VPC を作成します。

メニューから VPC に入り、対象のクラウド(ここでは Google Cloud)と IP のレンジを決めます。ここでは東京リージョンに置くので CloudGoogle Cloud Platformasia-northeast1 を選択します。IP range10.1.1.0/24 としました。使用している Google Cloud の VPC と衝突しない CIDR を設定しましょう。

Create VPC

このように Aiven の VPC が作成されます

Project VPC

2. Aiven 側のピアリングを作成する

作成した Aiven の VPC (ここでは google-asia-northeast1) を選択します。

GCP Project ID に Google Cloud のプロジェクト ID を入力して、 GCP VPC network name に VPC 名を入力します。そして Add peering connection をクリックします。

VPC Peering Connections

State 欄の Pending peer をクリックして情報を確認します。GCP projectVPC network name が2個ずつ表示されています。1個目が直前に入力した自分の Google Cloud のプロジェクト ID と VPC 名で、2個目が Aiven 側のプロジェクト名と VPC 名なのでメモしておきます。

Peering Connection

3. Google Cloud 側のピアリングを作成する

Google Cloud の Cloud Console で [VPC ネットワーク]-[VPC ネットワーク ピアリング] を開きます。ピアリング接続の作成 をクリックします。

Create Peering Connection

名前は任意に入力します。ピアリングした VPC ネットワーク別のプロジェクト を選択します。プロジェクト IDVPC ネットワークの名前 は先程メモした Aiven の State の情報を入力します。

Creatr Peering Connection

Google Cloud 側のピアリング設定ができました。必要に応じてルーティングやファイアウォールの設定を行いましょう。

Google Cloud Peering

4. Aiven サービスを作成する

ネットワーク設定が終わったので、いよいよ Aiven のサービスを作成します。

Aiven のコンソールで Service を開き、Create a new service をクリックします。

Aiven Create Service

ここでは PostgreSQL を選択します。現時点のデフォルトのバージョンは 13 になっています。

PostgreSQL

クラウドプロバイダーで Google Cloud を選択します。リージョンを選択しますが注意してください。配置するリージョンを選択せずに VPC から 作成した VPC を選択してください。

Select Cloud

サービスのプランを選択します。ここでは Startup で一番小さい Startup-4 を選択しました。本番用途など高い可用性が必要な場合は、Business や Premium のプランを選択しましょう。

Service Plan

ディスクは標準で 80 GB 設定されているため追加しません。必要に応じて増やしましょう。判別しやすいようにサービスの名前を設定しましょう。そして Create Service をクリックして、サービスを作成します。

Create Service

しばらくすると Running になります。

Current services

5. サービスにアクセスしてみる

Compute Engine を起動して、Google Cloud から Aiven のサービスにアクセスしてみます。

Google Cloud の Cloud Console で [Compute Engine]-[VM インスタンス] を開きます。ここで インスタンスを作成 をクリックします。

Create Instance

普通に Compute Engine を作成していきます。OS は CentOS 7 にしました。ここではリージョンを台湾にしています。Google Cloud の VPC はグローバルリソースなので Aiven とは異なるリージョンからでも問題なく接続できます。

Instance

ネットワーク インターフェースの設定でピアリングしている VPC とサブネットを設定します。

Network Interface

設定が終わったら 作成 をクリックします。

Create Instance

GCE インスタンスが起動したら SSH で接続します。

SSH Access

まずは PostgreSQL クライアントをインストールします。

$ sudo yum install postgresql.x86_64 -y

Aiven のサービスの詳細を確認します。この情報を元に DB へアクセスします。

Connection information

Aiven の PostgreSQL にアクセスします。

$ psql -h pg-gcp-1-xxxxxx.aivencloud.com -p 21374 -U avnadmin -d defaultdb
Password for user avnadmin:  # Password の内容を入力
psql (9.2.24, server 13.5)
WARNING: psql version 9.2, server version 13.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
defaultdb=>

クライアントの IP アドレスとサーバーの IP アドレスを確認してみます。プライベート IP でアクセスしています。

defaultdb=> select inet_client_addr();
 inet_client_addr 
------------------
 10.140.0.2
(1 row)
defaultdb=> select inet_server_addr();
 inet_server_addr 
------------------
 10.1.1.2
(1 row)
defaultdb=> \q

このように Google Cloud からピアリング経由で Aiven のデータベースにアクセスできました。

さいごに

Aiven はクラウドプラットフォームに依存せずにマネージドデータベースを構築できるサービスです。Google Cloud や他のメガクラウドでも利用できるため、マルチクラウドの環境を運用していてクラウド間のDB管理にお困りの場合はご利用してみてください。