2023-11-20

「AWSではじめるインフラ構築入門」をGCPに読み替えてやってみる その5

===

1 年ぶりにブログでも書くかーと思っていたら下書きで残っていた記事を発見したので、ここに供養します。
日付は当時のままにしていますが、投稿したのは 2024/11 です。

===

前回の続き
勉強メモなので間違ったことが書かれている可能性があります 🙏

第 8 章

この本は全部で 15 章まであるので、いよいよ折り返し地点まできた
この章ではデータベースサーバーについて書かれている

RDB は Linux や Windows などにインストールして使うソフトウェアとして提供されているが、クラウドではサービスとして提供されていることが多い
よって VM インスタンスに RDB をインストールして web サーバーとデータベースサーバーを兼用することもできるが、以下の観点から望ましくない

  • RDB のインストール作業が必要
  • VM インスタンスの OS そのものの管理をしなくてはならない

ということで、GCP では Cloud SQL というマネージドサービスを使うことで、利用者は OS レイヤ以下を意識することなく RDB を利用することができる(いわゆる DBaaS のサービス)

Cloud SQL についての説明はこの記事などを参照すれば良さそう
(ありがたいことに膨大な情報が書かれていて、今はイメージができないけど、運用フェーズで参考になる情報もたくさんありそう)

一部注意点や覚えておいた方が良さそうなことがあるのでメモしておく

Cloud SQL のネットワーク

Cloud SQL インスタンスは Google Cloud が持つ VPC ネットワーク上に作成される
ユーザーの VPC ではなく、 Google Cloud の VPC という点に注意が必要

ユーザーが管理するアプリケーションなどから Cloud SQL にアクセスする方法は以下の 2 通りある

  • Public IP で接続する
  • Private IP で接続する

Public IP による接続についてはここでは触れないが、セキュリティをできるだけ高めるために RDB も Private IP のみを割り振りたい
Private IP で接続する場合は、ユーザーが管理する VPC と、Google が管理する VPC( サービスプロデューサーのネットワーク と呼ぶ)を VPC ピアリングという機能で接続する必要がある

プライベートサービスアクセス用にサブネットを作成する必要があり、初めて利用するときに IP レンジを指定して作成する
当然このとき既存のサブネットと重複しない IP レンジを割り当てる必要がある
一度作成してしまえば、以降 Cloud SQL や Memorystore などのインスタンスを構築する際は、ネットワークを流用することができる

Sloud SQL インスタンスを立てて、web サーバーからアクセスしてみる

まずは Cloud SQL インスタンスを作成する(PostgreSQL を選ぶ)

  • インスタンス ID
    • わかりやすい ID を入力する
  • パスワード
    • デフォルトの管理ユーザー postgres のパスワードを設定する
  • DB のバージョン
    • PostgreSQL15 を選択
  • エディション
    • 今回は検証目的なので Enterprise を選択
  • プリセット
    • 一番しょぼくていいので サンドボックス を選択
  • リージョンとゾーン
    • リージョン: asia-northeast1
    • ゾーンの可用性: シングルゾーン
  • インスタンスのカスタマイズ
    • 接続
      • インスタンス IP の割り当て: プライベートIP
      • ネットワークに作成した VPC を選択すると プライベートサービスアクセス接続は必須です と言われるので 接続を設定 をクリック
        • Service Networking APIの有効化 を実行
        • プライベートサービス接続に割り振る内部 IP の範囲を指定
      • ネットワークXXXのプライベートサービスアクセス接続が正常に作成されました のようなメッセージが出れば多分 OK
    • ストレージとか
      • 極限までミニマムにしたら$0.02/h まで料金下げられた(万が一停止し忘れた時のために極限までスペック下げておくと良さそう)

インスタンス作成ボタンを押してしばし待ち、ステータスが 実行可能 になったら VM インスタンスから接続してみる
が、ここで psql コマンドを実行できるようにパッケージをインストールしようとしたら、VM インスタンスから外部へアクセスできないことに気がついた

この記事で、 NAT を使った通信の条件を見ると、プライベートなサブネットに紐づけないとダメそうな雰囲気がある と書いたが、まさにこれがダメで
Cloud NAT のマッピング設定をプライベートなサブネットに付け替えたところ、VM からインターネットへアクセスできるようになった

公式ドキュメントの方法で接続してみる

この記事を参考に Cloud SQL へ接続してみたが、psql: SCRAM authentication requires libpq version 10 or above というエラーが出て接続できなかった
クライアントのバージョンが古いので、アップデートしてあげる必要がありそう

$ psql --version
psql (PostgreSQL) 9.2.24

ということで以下の作業を行った(取得する URL はこちらを参考にした)

  • yum install wget
  • wget https://yum.postgresql.org/15/redhat/rhel-7-x86_64/postgresql15-15.4-1PGDG.rhel7.x86_64.rpm
  • wget https://yum.postgresql.org/15/redhat/rhel-7-x86_64/postgresql15-libs-15.4-1PGDG.rhel7.x86_64.rpm
  • rpm -ivh postgresql*.rpm

これでダメなら Cloud SQL Auth Proxy を使ってやってみる https://zenn.dev/the_exile/articles/1c5e28f19fa520

ここで記録は途絶えている...
(おしまい。多分続かない。)