🪪

Cloud Run + Cloud SQL、セットアップ

2023/11/24に公開

はじめに

この記事は、
 Cloud Run + Cloud SQL, setup
という動画を参考に、『実際にやってみた』という記事になります。

この記事で実施する事。

  • Cloud SQL インスタンス を作成。
  • Cloud Run Service をデプロイする。
  • Cloud Shell を使用して、Cloud SQL インスタンスに接続する。
  • テーブル作成データ挿入
  • Cloud Run にデプロイされたアプリを動かす。
  • Cloud SQL にデータが挿入されたかを確認する。

以下はその必要となる大まかな構成になります。
image.png

Google Cloud SQLについて噛み砕いて理解しておく。

Google Cloud SQL について噛み砕いた説明はスクラップにまとめました。
https://zenn.dev/tomoyuki_suzuki/scraps/7a4692138e7ca2

Cloud SQL インスタンス を作成。

GCPコンソール から SQL を選択。
gcp_sql.png

インスタンスを作成。
sql_create_instance.png

データベースエンジンの選択。
いずれも最新の SQLデータベース を提供していますが、
コミュニティは、新製品用の PostgreSQL に同意しているとのこと。
sql_create_instance_posgre.png

インスタンスIDパスワード を入力。
データベースのバージョンは最新を選択してください。

インスタンスID:poll-database
パスワード:secretpassword
sql_create_instance_posgre_info_name_pass.png

Cloud SQL のエディションの選択。
Enterprice を選択してください。
sql_create_instance_posgre_info_edition.png

Enterprise Plus についてはこちらの記事を参考にしてください。

エディションのプリセットを選択。
今回は検証の為、サンドボックス を選択。
sql_create_instance_posgre_info_edition_priset.png

リージョンとゾーンを選択。

動画では、リージョンは 物理的に遠い場所 を選択と
言われていますが、 最寄りのリージョン でも問題ありません。

ゾーンは シングルゾーン を選択、
プライマリゾーンは 任意 としてください。
sql_create_instance_posgre_info_region.png

マシンタイプとストレージを選択。
マシンタイプとストレージは、最小のマシン、容量から始めるのがお決まりとの事。
つまりは、1つの仮想CPUと3.75GBのRAMから始めなければならない。
sql_create_instance_posgre_info_machine.png

ストレージの種類は、デフォルトのまま、推奨されている SSD を選択、
暗号化の方法は、Googleが管理する暗号鍵 を選択してください。
sql_create_instance_posgre_info_storage.png

その他の構成オプションはデフォルトのままで、
インスタンスを作成 をクリック。

なお、インスタンス作成は、時間がかかります。

Cloud Run Service をデプロイする。

vote-for-tabs-or-spaces を、git clone してください。

git clone https://github.com/tomo8332/gcp-sample.git

git cloneの実行が完了したら、cdコマンドを使って、対象のディレクトリ階層へ移動。

cd gcp-sample/cloud-run-cloud-sql/python/vote-for-tabs-or-spaces

README.md を読んで、Cloud Run サービスのデプロイを行なってください。

なお、動画のサンプルコードは、Dockerイメージを、
Container Registry へプッシュします。

Container Registry は非推奨となっているため、
このブログでは、Artifact Registory に対して、
Dockerイメージ がプッシュされるように修正しています。

また、requirements.txt は、Pythonプロジェクトの
依存関係を管理していますが、動画のサンプルコード
パッケージのバージョンの互換性等の問題で、
正常にデプロイすることができない可能性があります。

Cloud Run Service のデプロイを行った処、
下記のエラーが表示されました。

ImportError: cannot import name 'escape' from 'jinja2'

https://stackoverflow.com/questions/71718167/importerror-cannot-import-name-escape-from-jinja2

ImportError: cannot import name 'json' from itsdangerous

https://stackoverflow.com/questions/71189819/importerror-cannot-import-name-json-from-itsdangerous

Cloud Shell を使用して、Cloud SQL インスタンスに接続する。

Cloud SQL インスタンスが正常にデプロイされた事を確認できたら、
Cloud SQL インスタンスを経由して、Cloud Shellを起動。
sql_gcloud_shell.png

SQLページから Cloud Shell を起動すると、ターミナル上に
Google Cloud SQL インスタンスに接続するための
コマンドが表示されますので、そのまま実行。
sql_gcloud_shell_command.png

なお、Google Cloud SQL インスタンスに接続するためのコマンドを
実行した際に、Cloud SQL Admin API が有効になっていないことを
警告されたら、ターミナル上の指示に従って、APIを有効にしてから、
gcloud sql connect コマンドを再実行してください。
sql_gcloud_shell_command_api.png
sql_gcloud_shell_command_api_enable.png

gcloud sql connect コマンドが正常に実行されると、
パスワードの入力を促されるので、ここには、SQLインスタンスを
作成した際に設定したパスワードを入力してください。
sql_gcloud_shell_command_pass.png

テーブル作成 と データ挿入

README.md に記述している、テーブル作成データ挿入
コマンドを、一気にCloud Shellのターミナル上で実行してください。
sql_gcloud_shell_command_create_table.png
なお、テーブル作成データ挿入 は、Cloud SQL インスタンスに
接続された状態でなければ実行することはできません。

Cloud Run にデプロイされたアプリを動かす。

Cloud Run Service が正常にデプロイされて、
下記のアプリケーションが起動すれば成功です。

それぞれのボタンを数回クリックしてみてください。
sql_cloud_run_tab_space.png

Cloud SQL にデータが挿入されたかを確認する。

Cloud SQL インスタンスに接続した状態で、
下記のコマンドをそれぞれ実行してください。

どのボタンが何回クリックされたのか、
そのボタンが何時、押されたかを
確認することができれば完了です。

SELECT * FROM totals;

image.png

SELECT * FROM votes;

image.png

終わりに

今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。

Cloud SQLは、MySQL、PostgreSQL、SQL Serverなど、
私たちの身直によくあるデータベースエンジンを使用している為、
その仕組みについては、難しく考えることはありませんが、
互換性やバージョン等の問題で途中、
何度か正常にデプロイできないことが続きました。

その問題の対応についても、記述していますので、
Cloud SQL データベースについて、
軽く学習してみたいと考えていましたら、
参考にしていただけると幸いです。

また、Cloud SQLをデプロイ後、
そのCloud SQLをデプロイしたリージョンと
それとは異なるリージョンに、Cloud Run
一つずつデプロイしてみると、
レスポンスに微妙な違いがありますので、
試してみると面白いかもしれません。

この記事が読まれている方にとって、
参考になる記事となりましたら、『いいね』を
付けていただけますと、励みになりますので、
よろしくお願いします。

Discussion