Blog

CroudRunとCloudSQLの接続方法(Django4.2)

手順、確認事項

  • CloudRunの環境はできているものとする
  • CloudSQLはComputeEngin上で動いているので、ComputeEnginを有効にしていない場合は有効にする
  • Djangoに mysqlclient のインストールが必用 pipでインストールする
  • OSに build-essential python3-dev default-libmysqlclient-dev のパッケージのインストールをする
  • CloudRunはCloudProxyを経由してCroudRunから接続されている(CroudRunからデプロイ時に選択するだけであとは自動でやってくれる)
  • IAMで CloudSQL Clientをサービスに割り当てる必要がある。

Dockerfile(Django4.2)

RUN apt-get update && apt-get install -y build-essential \
      python3-dev default-libmysqlclient-dev 

mysqlclient をDjangoにインストールする

pip install mysqlclient

ComputeEnginを有効にしていない場合有効にする

下記ページよりAPIを有効にする

https://cloud.google.com/sql/docs/mysql/connect-run

CloudSQLインスタンスを生成する

  • インスタンスIDは小文字とハイフンでプロジェクトに関係する覚えやすい名前を自由につける
  • パスワード生成ボタンでは、シングルクオートが混ざることがあり、その場合エラーになる(グーグルー!!)。再度生成するか、パスワードジェネレーターなどで生成することをおすすめします。
  • セミコロン(;), ダッシュ(-), シャープ(#)など、SQLインジェクションに利用される可能性がある文字もDBのパスワードに利用しないほうが無難です。
  • 後からupgradeできるのでとりあえず一番安いのにしました。
  • 生成に3分かかります。
  • あまり遅いとブラウザをリロードするといいかもしれない。10分待ってしまった 笑
  • Djangoの公式サイトのDB接続はこちら
  • https://docs.djangoproject.com/en/4.2/ref/settings/#databases

インスタンスができたら、Admin Userしかいないので、作成しておく。

念のためadmin Userは稼働が確認できるまでおいておく

CloudSQLの設定

  • すべてのホストを許可しておく
  • CloudProxyからの接続なので安全である
  • Public IPを当てておく CloudRunからの接続なので。

DBとUserを作成する

DjangoのsettingにDBとの接続情報を書いておく

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/[ここにDBの接続名を記載する=>下記記載]',
        'NAME': '[DBの名前]',  
        'USER': '[上記で作成したuser]',
        'PASSWORD': '[上記で作成したパスワード]',
    }
}

ホスト情報の接続名はこちら

IAMからCloudSQLのClientの権限を付与する

IAMで2つのプリンシパルに CloudSQL Client の権限を当てる

  • firebase-adminsdk@[xxxx]
  • firebaseからGCPを生成しているため
  • [xxx]compute@developer.gserviceaccount.com
  • こちらはCloudSQLが Compute Engineを利用しているため

通常のCloudRunのデプロイ時にCloudSQLを選択する

cloudSQL Admin APIが必用 

通常と同じようにCroudRunからデプロイボタンをクリック。

これでCloudRunとCloudSQLの接続が完了!


一つ前の記事 おすすめChromeプラグイン
次の記事 Error Could not build wheels for aiohttp, grpcio, mecab-python3, which is required to install pyproject.toml-based projects