概要
Cloud Run 上の phpMyAdmin を経由して Cloud SQL にアクセス環境を構築します
- 使用する phpMyAdmin は Docker Hub の公式コンテナイメージを使用します
- 現時点で最新の
phpmyadmin:5.2.1-apache
を使用します
hub.docker.com
github.com
⚠ 注意
元情報は Cloud Run 上の phpMyAdmin を経由して Cloud SQL にアクセスする環境を構築するハンズオン にあります ;)
作ってみる
0. 事前の定義
export _gc_pj_id='Your Google Cloud Project ID'
export _common='phpmyadmin'
export _zone='asia-northeast1-b'
export _region='asia-northeast1'
export _date=`date +"%Y%m%d%H%M"`
gcloud beta services enable sqladmin.googleapis.com --project ${_gc_pj_id}
1. Cloud SQL の準備
gcloud beta sql instances create ${_common}-insrance-${_date} \
--database-version=MYSQL_8_0 \
--tier=db-custom-1-3840 \
--zone=${_zone} \
--root-password=password123 \
--project ${_gc_pj_id} \
--async
gcloud beta sql databases create ${_common}-db \
--instance=${_common}-insrance-${_date} \
--project ${_gc_pj_id} \
--async
gcloud sql users create ${_common} \
--instance=${_common}-insrance-${_date} \
--password=${_gc_pj_id} \
--project ${_gc_pj_id} \
--async
2. Service Account の作成
- Cloud Run 用の Service Account を発行し、 Cloud SQL に接続できる最低限の Role を付与する
gcloud beta iam service-accounts create ${_common}-sa \
--description="Cloud Run 用のサービスアカウント" \
--display-name="${_common}-sa" \
--project ${_gc_pj_id}
- 上記で作成した Service Account に以下の Role を付与する
gcloud beta projects add-iam-policy-binding ${_gc_pj_id} \
--member="serviceAccount:${_common}-sa@${_gc_pj_id}.iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
3. Cloud Run にデプロイをする
- Cloud Run の Service をデプロイする
- phpMyaAmin の最新ののコンテナイメージ
phpmyadmin:5.2.1-apache
を使う
--session-affinity
: phpMyAdmin がセッションを必要とするため。
--service-account
: Cloud Run の Service Account の指定
--set-env-vars
: phpmyadmin:5.2.1-apache が読み込める設定を Cloud Run の環境変数として設定
--allow-unauthenticated
: サンプルなので allUser からのアクセスを許可
gcloud beta run deploy ${_common} \
--project ${_gc_pj_id} \
--image phpmyadmin:5.2.1-apache \
--region ${_region} \
--service-account "${_common}-sa@${_gc_pj_id}.iam.gserviceaccount.com" \
--add-cloudsql-instances ${_gc_pj_id}:${_region}:${_common}-insrance-${_date} \
--set-env-vars DB_USERNAME=${_common} \
--set-env-vars DB_PASSWORD=${_gc_pj_id} \
--set-env-vars PMA_HOST=localhost \
--set-env-vars PMA_SOCKET="/cloudsql/${_gc_pj_id}:${_region}:${_common}-insrance-${_date}" \
--set-env-vars APACHE_PORT=8080 \
--session-affinity \
--allow-unauthenticated
- Cloud Run の Service の状態を確認する
gcloud beta run services describe phpadmin \
--region ${_region} \
--project ${_gc_pj_id}
4. Web ブラウザから確認する
---> Cloud Run 上の phpMyAdmin 経由して Cloud SQL にアクセスすることが出来ました :)
5. セキュリティを強化する
今のままだと誰からもアクセス出来てしまうので非常にリスクの高いままです
Cloud Run の前に Cloud Load Balancing を設置し Cloud IAP にて Cloud IAM による認証をするか、 ID トークンを使って Cloud Run にて Cloud IAM による認証をしましょう
iganari.hatenablog.com
クリーンアップ
- Cloud Run の Service を削除する
gcloud beta run services delete ${_common} \
--region ${_region} \
--project ${_gc_pj_id}
gcloud sql users delete ${_common} \
--instance=${_common}-insrance-${_date} \
--project ${_gc_pj_id} \
--async
gcloud beta sql databases delete ${_common}-db \
--instance=${_common}-insrance-${_date} \
--project ${_gc_pj_id}
gcloud beta sql instances delete ${_common}-insrance-${_date} \
--project ${_gc_pj_id}
追記
元情報のリンクを修正しました (2023/11/30)