Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

ハンズオン資料を作ったので軽く解説を書く (Hands On Cloud Run to Memorystore for Redis)

概要

以下の自作のハンズオン資料の解説記事です :)

github.com

ハンズオンでやっていること

主に以下の 2 点を実際に構築出来ます

1. 同じプロジェクト内で Cloud Run から Memorystore にアクセスする

https://raw.githubusercontent.com/iganari/handson-run-memorystore-redis/main/single-project/direct-peering/_img/dp-overview.png

2. 違うプロジェクトの Cloud Run から Memorystore にアクセスする

https://raw.githubusercontent.com/iganari/handson-run-memorystore-redis/main/different-projects/_img/diffproject-overview.png

使っているサービスのおさらい

Cloud Run

Google Cloud のコンテナを直接実行できるフルマネージドサービスです

cloud.google.com

Memorystore

Google Cloud のフルマネージドのインメモリデータベースのサービスです

Redis, Redis Cluster, Memcached の中から選べます (2023/12 現在)

今回は Memorystore for Redis を利用しています

cloud.google.com

Direct VPC egress

Cloud Run から (Google Cloud の) VPC Network に紐づくサービスに内部通信出来るようになるサービスです

2023/12 現在では、まだ Preview の機能です

みんなが待ち望んでいた機能なので、すでに知っている人も少なく無いと思います ;)

cloud.google.com

Direct peering

ユーザ管理の VPC Network と Google 管理のプロジェクトの VPC ネットワークを VPC Peering する機能です

Memorystore for Redis は Google 管理のネットワークにあるリソースのため、この Peereing が必要になります

後述の Private services access とどちらかを使用する必要があります

cloud.google.com

Private services access

ユーザ管理の VPC Network と Google サービス ネットワークの間にピアリングを作成する機能です

cloud.google.com

Shared VPC

複数の Google Cloud プロジェクトにて、 1 つの VPC Network を共有する機能です

Google Cloud の組織を導入することで利用できる機能の一つです

cloud.google.com

Redis Commander

Web ブラウザ上で Redis を操作できるアプリケーションです

下記からお借りしています :)

Special Thanks!!

github.com

苦労した点

違うプロジェクトの Cloud Run から Memorystore にアクセスする際の Role の考え方

以下の構成を取るのですが、これを理解するのに時間が掛かりました...

  1. 共有 VPC を使っていて、ホストプロジェクトに Memorystore があり、サービスプロジェクトに Cloud Run が設置してある
  2. Cloud Run が動いているプロジェクトのデフォルトの Cloud Run 用の Service Account に、 Memorystore が動いているプロジェクトのネットワークの Role を付与する
  3. Cloud Run のサービスに付与した Service Account を、デフォルトの Cloud Run 用の Service Account を使用出来るようにする

https://raw.githubusercontent.com/iganari/handson-run-memorystore-redis/main/different-projects/_img/diffproject-02-02.png

最初は Cloud Run のサービスに付与した Service Account に、Memorystore が動いているプロジェクトのネットワークの Role を付与すれば OK だろうと思っていたのですが、それだと動きませんでした :(

最後に

ここまで読んで気になった方は、ぜひハンズオンをやってみてください ;)

Have Fan!! :)