LoginSignup
12
9

More than 3 years have passed since last update.

Cloud Run(マネージド版)でCloud Memorystoreに接続する

Posted at

本記事で言いたいこと

  1. Cloud RunのマネージドからMemorystoreへの接続が可能になりさらに素晴らしいサービスへと進化
  2. Cloud SQLを使用するよりはほんの1手間いるがそれでも接続は容易

本記事で説明しないこと

  • VPCのネットワーク設計

事前準備

Cloud Memorystore

まずは接続するCloud Memorystoreのインスタンスを作成します。
image.png

Cloud Runにてデプロイするリージョンに合わせて設定し、他は好みでよいと思いますが、本番環境で使用する場合は可用性を高くするために階層はスタンダードを選択するようにした方がいいです。
また容量により料金も高くなりますが、容量と同時にネットワークスループットも高くなります。
image.png

注意するのはネットワークの設定です。初期値はリージョンに基づくVPCネットワークのdefaultという値が使用されています。もし使用するVPCネットワークを変更する際はこちらを編集する必要があります。(本記事通りにdefautlで設定しても動作することは動作します)
image.png

Serverless VPC Access

https://cloud.google.com/vpc/docs/configure-serverless-vpc-access
次にCloud Runから作成したMemorystoreに繋ぐためのサーバーレスVPCアクセスコネクタを作成します。
GCPのコンソールからは以下のようなメニューから開くことができます。
image.png

初回はAPIを有効にする必要があるので、有効化します。
image.png

コンソール画面上部にある「コネクタ作成」からVPCへのアクセスするコネクタを作成します。
image.png

ここで大事なのは指定するIP範囲です。コネクタにて使用するIPの範囲となるので、Cloud Memorystoreで作成したRedisインスタンスのIPもそうですが、 予約されていないIPレンジ を指定する必要があります。

image.png

image.png

Cloud Run

ここからは実際にCloud RunにデプロイするアプリケーションからMemorystoreまでの接続の設定を説明します。

Railsアプリケーション

まずは使用するアプリケーションの準備をします。今回は例としてRailsを使用するとして以下のアプリケーションを用意しました。
https://github.com/chimame/connection-memorystore-rails-from-cloudrun

READMEに記載はしているのですが、1つ1つ説明していきます。

Cloud Build

まずはRailsを動かすためのコンテナを用意する必要がありますので、その前段階であるコンテナイメージを準備します。
コンテナのビルドは私が以前記載したKanikoを使用する方法でビルドすることができますのでそちらも興味あれば目を通してみて下さい。
https://qiita.com/chimame/items/e959843e86419f51e45a

この記事を書いている2020年5月17日現在はCloud RunからVPCへの接続設定はBeta版であるため使用できるようにBetaのインストールを実施します。

$ gcloud components install --quiet beta

次にKanikoを使用するためのオプションを有効にしておきます。

$ gcloud config set builds/use_kaniko True

最後にコンテナイメージをビルドするためにCloud Buildのコマンドを実行します。Cloud Buildの設定は cloudbuild.yml に固有の設定が必要なので必要に応じて修正して下さい。

$ gcloud builds submit --project <Google Cloud Platform Project ID> --config ./cloudbuild.yml

これでCloud Runにデプロイするためのコンテナイメージのビルドが完了です。簡単ですね。

Cloud RunでMemorystoreを使用する

本記事の1番重要かつ伝えたい内容のコマンドであるCloud RunのデプロイとVPCへの接続です。

$ gcloud beta run deploy <your cloud run service name> \
  --image gcr.io/<Google Cloud Platform Project ID>/<Container Image Name>:latest \
  --vpc-connector <your serverless vpc access connector name> \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated \
  --set-env-vars RAILS_ENV=production \
  --set-env-vars RAILS_MASTER_KEY=<your Rails master key> \
  --set-env-vars REDIS_HOST=<your Cloud Memorystore instance host ip> \
  --set-env-vars REDIS_PORT=6379

一番大事なオプションは vpc-connector です。これはBetaをインストールすることで使用することができます。ここの指定するのは作成したVPCアクセスコネクタの名称です。なので本記事内では 「cloudrun-connector」 として作成したのでそれを指定することになります。
更には接続するRedisのホスト名を指定します。これもCloud Memorystoreで作成したインスタンスのIPアドレスを指定すれば接続が可能なはずです。

最後に

ついにマネージド版のCloud RunもMemorystoreへの接続が来ました。Cloud SQL同様に接続まで結構楽に行うことができます。これが正式リリースされればCloud Runの死角はかなり少なるでしょう。
ただし、Serverless VPC Accessは使用することでCloud Memorystoreとは別に料金はかかるのでそこは使用に注意して下さい。
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access#pricing

個人的に後はCloud Load Balancingからの接続が可能となると完璧なサーバレスになると思って期待しております。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9