1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Irodori-TTS を Cloud Run の L4 GPU で動かす ― 使うときだけ起動する自分専用の日本語 TTS API

1
Posted at

はじめに

日本語に特化したオープンな音声合成モデル Irodori-TTS を、Google Cloud の Cloud Run(NVIDIA L4 GPU) に載せて、自分のアカウントからだけ呼べる音声合成 API にしました。

無料の Google Colab や Local Mac PC での稼働を試していましたが、次のような手間がありました。

  • 使うたびにセルを実行し、トンネルの URL を貼り替える (Google Colab)
  • ランタイムを削除すると、登録した声が消える (Google Colab)
  • Mac(M4)のローカルでは、1分の音声に約4分かかる (Locap Mac PC)

Cloud Run なら、呼ばれたときだけ GPU インスタンスが起動し、使わないときは0台になります。URL は固定で、声は Cloud Storage に残ります。deploy.sh を1回実行すれば、API の有効化からデプロイまで終わります。

irodori-tts.png

この記事では、構成の考え方と注意点を本文に書き、実際のコマンドは折りたたみに入れています。

記事の内容は 2026年10月時点で構築した環境の内容です。Cloud Run の GPU 対応リージョンや料金は変わることがあるので、公式ドキュメントもあわせて確認してください。


動画

当記事の参考動画を作成しています。
Irodori-TTS で合成した音声を使用しています。ご参照ください。


Irodori-TTS とは

Aratako 氏が公開している、日本語のテキスト読み上げ(TTS)モデルです。

  • 参照音声で声をまねる:数秒〜数十秒の録音を渡すと、その声で読み上げます。登録した声を使えば、全ページを同じ声で読めます。
  • 文章で声を作る(Voice Design):caption に「落ち着いた優しい女性の声」のように書くと、録音なしで声質を指定できます。
  • OpenAI 互換の API サーバー:Irodori-TTS-Server が POST /v1/audio/speech を提供します。今回はこれを Cloud Run に載せます。
  • 透かし入り:生成音声には、聞こえない透かし(SilentCipher)が自動で入ります。

今回使うモデルは Aratako/Irodori-TTS-v4.1-Small(40ステップの高品質版)です。

全体の構成

  • Cloud Build でコンテナイメージを作り、Artifact Registry に保存して、Cloud Run にデプロイします。
  • 声は Cloud Storage のバケットに置き、Cloud Run からフォルダとしてマウントします。声を追加しても再デプロイは要りません。
  • アプリは ID トークンを付けて Cloud Run を呼びます。認証情報はアプリのサーバー側だけで扱い、ブラウザには渡しません。

Colab や Mac で動かす場合との比較

Google Colab Mac(ローカル) Cloud Run(この構成)
使い始める手間 毎回セルを実行 サーバーを起動して待つ 不要(呼べば自動で起動)
接続先 URL 起動のたびに変わる この Mac の中だけ 固定
登録した声 ランタイム削除で消える 残る バケットに残る
生成の速さ L4 GPU 1分の音声に約4分(M4) L4 GPU
費用 計算ユニットを消費 なし 起動中だけ GPU 課金
使える場所 Colab を開いている間 この Mac だけ 認証できればどこからでも

注意点もあります。0台からの初回は、起動とモデルの読み込みで数十秒〜数分待ちます。また、原稿や声のデータは Google Cloud に送られます。


主な設定値

項目 設定値 理由
サービス名 irodori-tts
リージョン asia-southeast1(シンガポール) Cloud Run の L4 GPU は東京(asia-northeast1)非対応
GPU nvidia-l4 × 1、ゾーン冗長なし 割り当てが初回デプロイ時に自動付与される
CPU・メモリ 4 vCPU・16Gi、CPU 常時割り当て GPU 利用時の必須条件
台数 最小0〜最大1、同時実行1 使わないときは0台で課金なし。上限は L4 1台分
タイムアウト 600秒 長文の合成に備える
ポート 8080 コンテナの IRODORI_PORT と合わせる
認証 --no-allow-unauthenticated roles/run.invoker を持つアカウントだけが呼べる
モデル Aratako/Irodori-TTS-v4.1-Small 重みをイメージに含め、起動時にダウンロードしない
声の保存先 gs://<PROJECT_ID>-irodori-voices を /app/voices にマウント 再デプロイしても声が消えない
イメージ asia-southeast1-docker.pkg.dev/<PROJECT_ID>/irodori/irodori-tts:full Artifact Registry

前提条件

  • 課金が有効な Google Cloud プロジェクトと、そのプロジェクトのオーナー権限(API 有効化・バケット作成・デプロイに必要)
  • gcloud(Google Cloud CLI)。Mac は brew install --cask google-cloud-sdk、または Cloud Shell で実行します
  • Dockerfile と deploy.sh(記事末尾の付録に全文があります)
  • 声を登録する場合は、本人の同意を得た参照音声(WAV/FLAC、20〜40秒)

ローカルに Docker は不要です。イメージのビルドは Cloud Build 上で行います。


構築手順

全体の流れは次のとおりです。手順3〜7 は deploy.sh がまとめて実行するので、ふだんは 手順1・2 のあと手順8 を実行するだけです。手順3〜7 は、スクリプトの中身を理解したいときや、途中で失敗したときの確認用です。

手順1:gcloud にログインする

アプリから呼ぶ場合は、アプリ用の認証(ADC)にもログインしておきます。

コマンド
gcloud auth login
gcloud auth application-default login   # アプリから呼ぶときに使う認証(ADC)

手順2:Dockerfile を用意する

上流の Dockerfile は BuildKit のキャッシュマウントを使っているため、Cloud Build では通りませんでした。そこで次の方針で書き直しています。

  • ベースは python:3.10-slim。build-essential・git・libsndfile1 を入れる
  • サーバーは Aratako/Irodori-TTS-Server を clone し、コミット 61012c7 に固定する
  • モデルとコーデックはビルド時に取得する(コールドスタートの短縮)
  • FFmpeg は入れない。そのため入出力は WAV/FLAC が前提になる

高速版の Aratako/Irodori-TTS-v4.1-Small-MF(4ステップ)も ARG IRODORI_HF_CHECKPOINT を変えれば使えます。ただ、録音した声ではにごりが出やすかったので、筆者は使っていません。

Dockerfile の全文は付録にあります。

コンテナの環境変数
変数 値
IRODORI_HOST / IRODORI_PORT 0.0.0.0 / 8080
IRODORI_MODEL_DEVICE / IRODORI_CODEC_DEVICE cuda
IRODORI_MODEL_PRECISION / IRODORI_CODEC_PRECISION bf16
IRODORI_PRELOAD true(起動時にモデルを読み込む)
IRODORI_DEFAULT_VOICE none
IRODORI_ALLOW_NO_REF_VOICE true
IRODORI_DEFAULT_RESPONSE_FORMAT wav
IRODORI_MAX_CONCURRENT_SYNTHESIS 1

手順3:変数を決め、API を有効にする

環境ごとに変えるのは PROJECT_ID だけで、ほかは既定値のままで構いません。

コマンド
# 環境ごとに変える値(PROJECT_ID 以外は既定のままでよい)
PROJECT_ID=<自分のプロジェクトID>
REGION=asia-southeast1               # L4 対応リージョン
SERVICE=irodori-tts
REPO=irodori
IMAGE=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${SERVICE}:full
VOICES_BUCKET=${PROJECT_ID}-irodori-voices

gcloud config set project "${PROJECT_ID}"
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com

手順4:Artifact Registry にリポジトリを作る

コマンド
gcloud artifacts repositories create "${REPO}" \
  --repository-format docker --location "${REGION}"

手順5:声を置くバケットを作る

公開アクセスをブロックした、非公開のバケットにします。

コマンド
gcloud storage buckets create "gs://${VOICES_BUCKET}" --location "${REGION}" \
  --uniform-bucket-level-access --public-access-prevention

手順6:Cloud Build でイメージをビルドする

PyTorch(CUDA)とモデルを含む大きなイメージなので、マシン・ディスク・時間を多めに取ります。初回は20〜40分かかります。

--region global を指定してください。リージョンを指定すると、既定のサービスアカウントにログ用バケットの権限がなく、ビルドが失敗しました。

コマンド
gcloud builds submit deploy/irodori-tts --tag "${IMAGE}" --region global \
  --machine-type e2-highcpu-8 --disk-size 200 --timeout 3600s

手順7:Cloud Run にデプロイする

L4 を1枚付け、最小0台・最大1台・認証必須にします。声のバケットは /app/voices にマウントします。完了すると、サービス URL(https://irodori-tts-<番号>.asia-southeast1.run.app)が表示されます。

コマンド
gcloud run deploy "${SERVICE}" --image "${IMAGE}" --region "${REGION}" \
  --gpu 1 --gpu-type nvidia-l4 --no-gpu-zonal-redundancy \
  --cpu 4 --memory 16Gi --no-cpu-throttling \
  --concurrency 1 --min-instances 0 --max-instances 1 \
  --timeout 600 --port 8080 --no-allow-unauthenticated \
  --add-volume "name=voices,type=cloud-storage,bucket=${VOICES_BUCKET}" \
  --add-volume-mount volume=voices,mount-path=/app/voices

手順8:deploy.sh でまとめて実行する

手順3〜7 は deploy.sh にまとめてあります。既存のリポジトリやバケットがあれば作成を飛ばすので、モデルを更新したときの再デプロイも同じコマンドで済みます。

REGION・SERVICE・REPO・TAG・VOICES_BUCKET は環境変数で上書きできます。

コマンド
PROJECT_ID=<自分のプロジェクトID> ./deploy/irodori-tts/deploy.sh

# 例: 別リージョン・別サービス名で作る
PROJECT_ID=my-proj REGION=us-central1 SERVICE=irodori-tts-dev ./deploy/irodori-tts/deploy.sh

動作確認

gcloud run services proxy で、自分の認証のままローカルの 8088 番に中継します。こうすると、URL や ID トークンを扱わずに試せます。

コマンド(中継・ヘルスチェック・合成)
  1. 中継を始めます。このターミナルは開いたままにします。
gcloud run services proxy irodori-tts --region asia-southeast1 --port 8088
  1. 別のターミナルでヘルスチェックします。
curl -s http://localhost:8088/health
  1. 声を登録せずに、Voice Design で合成してみます。
curl -s http://localhost:8088/v1/audio/speech -H "Content-Type: application/json" \
  -d '{"model":"irodori-tts","input":"こんにちは。音声生成のテストです。","voice":"none","response_format":"wav","irodori":{"caption":"落ち着いた優しい女性の声。丁寧でゆっくりした話し方。"}}' \
  -o test.wav

response_format は wav / flac / pcm のみです。コンテナに FFmpeg を入れていないため、mp3 は使えません。

声の登録

バケット(コンテナ内の /app/voices)に置いた参照音声のファイル名(拡張子なし)が、そのまま声の ID になります。サーバーはリクエストのたびにこのフォルダを読むので、登録後の再デプロイや再起動は要りません。

方法 向いている場合 声の ID
A. バケットにファイルを置く 1本の録音をそのまま使う。いちばん簡単 ファイル名(narrator.wav → narrator)
B. voices.json で対応づける 好きな ID を付ける、複数の録音を1つの声にまとめる voices.json のキー
C. アップロード API gcloud storage を使わず HTTP で登録する(proxy 経由) voice_id に指定した名前

参照音声を用意する

  • ナレーション調で20〜40秒読み上げて録音します(最大120秒)。静かな部屋で、Bluetooth ではないマイクを使います。Mac のボイスメモは「設定」→「オーディオ品質」→「ロスレス」にします。
  • 48kHz・モノラルの WAV に変換します。コンテナに FFmpeg がないため、m4a・mp3 のままでは読めません。
  • 16kHz の圧縮音声など、低音質の録音は混ぜないようにします。生成音声がにごりやすくなります。
変換コマンド
# Mac(付属の afconvert)
afconvert -f WAVE -d LEI16@48000 -c 1 myvoice.m4a my-voice_01.wav
# Linux など(FFmpeg が使える場合)
ffmpeg -i myvoice.m4a -ac 1 -ar 48000 -sample_fmt s16 my-voice_01.wav
A. バケットにファイルを置く
gcloud storage cp narrator.wav gs://<PROJECT_ID>-irodori-voices/
B. voices.json で対応づける

録音は clips/ に置き、バケット直下の voices.json で ID とファイルを対応づけます。パスはバケット内の相対パスです。ref_wavs に並べると、複数の録音が1つの声になります。

  1. 録音をアップロードします。
gcloud storage cp my-voice_01.wav gs://<PROJECT_ID>-irodori-voices/clips/
  1. 今の voices.json を取得して編集します(なければ新規作成します)。
gcloud storage cp gs://<PROJECT_ID>-irodori-voices/voices.json .
{
  "narrator": "clips/narrator_01.wav",
  "my-voice": { "ref_wavs": ["clips/my-voice_01.wav", "clips/my-voice_02.wav"] },
  "my-voice-2": "clips/my-voice_02.wav"
}
  1. 上書きで戻します。
gcloud storage cp voices.json gs://<PROJECT_ID>-irodori-voices/voices.json
C. アップロード API(proxy 経由)

gcloud run services proxy で中継している間に実行します。ファイルはマウント先のバケットに保存されます。1回に送れるのは1ファイルだけなので、複数の録音をまとめるには B を使います。

# 新規登録
curl -s http://localhost:8088/v1/audio/voices -F voice_id=narrator -F file=@narrator.wav
# 同じ ID を差し替える
curl -s -X PUT http://localhost:8088/v1/audio/voices/narrator -F file=@narrator.wav
# 削除
curl -s -X DELETE http://localhost:8088/v1/audio/voices/narrator
登録した声を確認・使う
curl -s http://localhost:8088/v1/audio/voices

curl -s http://localhost:8088/v1/audio/speech -H "Content-Type: application/json" \
  -d '{"model":"irodori-tts","input":"登録した声のテストです。","voice":"narrator","response_format":"wav"}' \
  -o narrator-test.wav

声質や話し方を寄せたいときは、"irodori":{"caption":"..."} も併用できます。

別の環境に移すときは、旧バケットの中身をそのままコピーすれば、同じ ID で使えます。

コマンド
gcloud storage cp -r "gs://<旧PROJECT_ID>-irodori-voices/*" gs://<新PROJECT_ID>-irodori-voices/

本人の同意のない声や、他社 TTS の出力は参照音声に使わないでください(モデルカードと各サービスの利用規約)。

アプリからの接続と認証

筆者のスライド動画アプリでは、.env.local に接続先と声を書き、アプリのサーバーを再起動するだけで使えるようにしています。

.env.local の例とサービス URL の確認
IRODORI_URL=https://irodori-tts-<番号>.<REGION>.run.app
IRODORI_VOICE=my-voice-2
IRODORI_SPEED=1.1
IRODORI_CAPTION=柔らかく穏やかで、少し明るい女性アナウンサーのような声。はきはきとして聞き取りやすく、親しみやすい話し方。
gcloud run services describe irodori-tts --region asia-southeast1 --format 'value(status.url)'

認証の3つの経路

URL が *.run.app のときは、アプリのサーバー側が ID トークンを取得して付けます。ブラウザには鍵もトークンも渡りません。

用途 方法 必要な権限
自分の Mac で使う gcloud auth application-default login(ユーザー ADC) そのアカウントに roles/run.invoker(オーナーは付与済み)
別のサーバーから使う サービスアカウントの JSON 鍵(GOOGLE_APPLICATION_CREDENTIALS) サービスアカウントに roles/run.invoker
認証を扱いたくない gcloud run services proxy で中継し、http://localhost:8088 を指定 proxy を実行するアカウントに roles/run.invoker
呼び出し権限を付けるコマンド
gcloud run services add-iam-policy-binding irodori-tts --region asia-southeast1 \
  --member "serviceAccount:<SA名>@<PROJECT_ID>.iam.gserviceaccount.com" \
  --role roles/run.invoker

サービスアカウントの鍵は秘密鍵です。リポジトリにコミットしないよう、.gitignore に入れておきましょう。

API キーの Bearer 認証しか持たないクライアントは、*.run.app に直接は届きません。その場合は proxy 経由で http://127.0.0.1:8088/v1/audio/speech を指定し、取得形式も WAV にしてください。

別の環境に作る

新しいプロジェクトや別のアカウントでも、変えるのは PROJECT_ID(と、必要なら REGION・SERVICE)だけです。

手順
  1. Google Cloud コンソールでプロジェクトを作り、課金アカウントをリンクします。
  2. gcloud auth login で、そのプロジェクトのオーナーとしてログインします。
  3. L4 対応リージョンを選びます。日本からは asia-southeast1 が最寄りです(2026年10月時点の対応リージョン:asia-southeast1、asia-south1(招待制)、europe-west1、europe-west4、us-central1、us-east4)。
  4. Dockerfile と deploy.sh を置いたフォルダで、deploy.sh を実行します。
chmod +x deploy.sh
PROJECT_ID=<新PROJECT_ID> REGION=asia-southeast1 ./deploy.sh
  1. 「動作確認」の3つのコマンドを実行します。
  2. 声を登録します。旧環境から移す場合は、バケットをコピーします。
  3. 新しいサービス URL をアプリに設定し、呼ぶアカウントに roles/run.invoker を付けます。
  4. Cloud Billing で予算アラートを設定します。

初回デプロイで L4 の割り当てが自動付与されないときは、「IAM と管理」→「割り当て」で Cloud Run の L4 GPU(ゾーン冗長なし)を申請します。

運用・費用・注意点

  • 課金:GPU はインスタンス課金です。起動中は、リクエスト後のアイドル時間も含めて課金されます。最大1台は同時に動く台数の上限で、請求額の上限ではありません。保存やビルドの費用も別にかかるので、予算アラートを設定しておくと安心です。
  • 待ち時間:0台からの起動待ちを無くしたいときは --min-instances 1 にできますが、その分は常時課金になります。
  • 同時処理:1件ずつ合成します。
  • 入力上限:1回 4,096 文字です。長文はサーバー側で区間に分けて生成されます。
  • 形式:参照音声は WAV/FLAC、応答は WAV/FLAC/PCM のみです。
  • ライセンス:サーバー・モデル・コーデック・テキストエンコーダーは MIT、DACVAE は Apache-2.0 です。
  • モデル更新:Dockerfile の SERVER_COMMIT と IRODORI_HF_CHECKPOINT を変え、TAG を新しくして deploy.sh を再実行します。
止める・削除するコマンド
# サービスを削除(声のバケットとイメージは残るので、同じコマンドで戻せる)
gcloud run services delete irodori-tts --region asia-southeast1
# イメージも消す(保存費用を止める)
gcloud artifacts repositories delete irodori --location asia-southeast1
---

よくある問題

症状 対処
Cloud Build がログバケットの権限エラーで失敗 --region global でビルドする
ビルドがディスク不足・タイムアウト --disk-size 200・--timeout 3600s を付ける
デプロイが GPU 割り当て不足で失敗 「割り当て」で L4(ゾーン冗長なし)を申請、または対応リージョンを変える
403 呼ぶアカウントに roles/run.invoker がない
401 ID トークンの期限切れ。gcloud auth application-default login をやり直す
声が見つからない curl localhost:8088/v1/audio/voices で ID を確認。m4a・mp3 は WAV に変換する
最初の1回だけ遅い 0台からの起動。待ち時間を無くしたい場合は --min-instances 1(その分常時課金)
生成音声がにごる 参照音声を 48kHz のロスレス録音にする。MF(4ステップ)版モデルを使っていないか確認

まとめ

  • Irodori-TTS-Server を Cloud Run の L4 GPU に載せると、使うときだけ起動する、固定 URL の自分専用 TTS API になります。
  • 声は Cloud Storage に置くだけで使え、再デプロイは要りません。
  • 構築は deploy.sh を1回実行するだけです。ハマりどころは、Cloud Build の --region global と、FFmpeg なしによる音声形式の制約の2つでした。

まずは短い文章で合成してみて、声・話す速さ・認証の動きを確かめてから、長いナレーションに進むのがおすすめです。

付録:ファイル一式

この2ファイルを同じフォルダに置けば、リポジトリなしで構築できます。

Dockerfile
FROM python:3.10-slim

ARG SERVER_REPO=https://github.com/Aratako/Irodori-TTS-Server.git
ARG SERVER_COMMIT=61012c7
ARG IRODORI_TTS_BACKEND=cu128
ARG IRODORI_HF_CHECKPOINT=Aratako/Irodori-TTS-v4.1-Small
ARG IRODORI_CODEC_REPO=Aratako/Semantic-DACVAE-Japanese-32dim

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    DEBIAN_FRONTEND=noninteractive \
    UV_LINK_MODE=copy \
    UV_PROJECT_ENVIRONMENT=/app/.venv \
    HF_HOME=/models/hf

RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential ca-certificates git libsndfile1 \
    && rm -rf /var/lib/apt/lists/*

COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/

WORKDIR /app
RUN git clone "${SERVER_REPO}" . && git checkout "${SERVER_COMMIT}" && rm -rf .git \
    && uv sync --locked --no-dev --no-editable --extra "${IRODORI_TTS_BACKEND}" \
    && rm -rf /root/.cache/uv

RUN /app/.venv/bin/python -c "import sys; from huggingface_hub import snapshot_download as d; [d(r) for r in sys.argv[1:]]" \
    "$(echo ${IRODORI_HF_CHECKPOINT} | cut -d/ -f1-2)" "${IRODORI_CODEC_REPO}"

ENV IRODORI_HOST=0.0.0.0 \
    IRODORI_PORT=8080 \
    IRODORI_HF_CHECKPOINT=${IRODORI_HF_CHECKPOINT} \
    IRODORI_CODEC_REPO=${IRODORI_CODEC_REPO} \
    IRODORI_MODEL_DEVICE=cuda \
    IRODORI_CODEC_DEVICE=cuda \
    IRODORI_MODEL_PRECISION=bf16 \
    IRODORI_CODEC_PRECISION=bf16 \
    IRODORI_PRELOAD=true \
    IRODORI_DEFAULT_VOICE=none \
    IRODORI_ALLOW_NO_REF_VOICE=true \
    IRODORI_DEFAULT_RESPONSE_FORMAT=wav \
    IRODORI_MAX_CONCURRENT_SYNTHESIS=1

EXPOSE 8080
CMD ["/app/.venv/bin/python", "-m", "irodori_openai_tts"]
deploy.sh
#!/usr/bin/env bash
# 使い方: PROJECT_ID=your-project ./deploy.sh
set -euo pipefail

PROJECT_ID="${PROJECT_ID:?PROJECT_ID を指定してください}"
REGION="${REGION:-asia-southeast1}"
SERVICE="${SERVICE:-irodori-tts}"
REPO="${REPO:-irodori}"
TAG="${TAG:-full}"
IMAGE="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${SERVICE}:${TAG}"
VOICES_BUCKET="${VOICES_BUCKET:-${PROJECT_ID}-irodori-voices}"
DIR="$(cd "$(dirname "$0")" && pwd)"

gcloud config set project "${PROJECT_ID}"
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com

gcloud artifacts repositories describe "${REPO}" --location "${REGION}" >/dev/null 2>&1 \
  || gcloud artifacts repositories create "${REPO}" --repository-format docker --location "${REGION}"

gcloud storage buckets describe "gs://${VOICES_BUCKET}" >/dev/null 2>&1 \
  || gcloud storage buckets create "gs://${VOICES_BUCKET}" --location "${REGION}" \
    --uniform-bucket-level-access --public-access-prevention

gcloud builds submit "${DIR}" --tag "${IMAGE}" --region global \
  --machine-type e2-highcpu-8 --disk-size 200 --timeout 3600s

gcloud run deploy "${SERVICE}" --image "${IMAGE}" --region "${REGION}" \
  --gpu 1 --gpu-type nvidia-l4 --no-gpu-zonal-redundancy \
  --cpu 4 --memory 16Gi --no-cpu-throttling \
  --concurrency 1 --min-instances 0 --max-instances 1 \
  --timeout 600 --port 8080 --no-allow-unauthenticated \
  --add-volume "name=voices,type=cloud-storage,bucket=${VOICES_BUCKET}" \
  --add-volume-mount volume=voices,mount-path=/app/voices

echo "完了。ローカルから使うには: gcloud run services proxy ${SERVICE} --region ${REGION} --port 8088"

参考

1
0
2

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?