はじめに
DX開発事業部の小山です。
今回はCloud Run Functionsの環境変数に複数の値を定義しようとした際に起きたトラブル、解決法、なぜ成功するのかを記載していきます。
起きたトラブル
案件の一環で、特定のゾーンのみを指定してインスタンスに特定の操作を実行するCloud Run Functionsを作成する必要があったため、ゾーン指定を環境変数で実行しようとしました。
以下のデプロイコマンドでデプロイを実施しようとしたところ……
gcloud functions deploy [FUNCTION_NAME] \ --gen2 \ --runtime [RUNTIME] \ --region [REGION] \ --source [SOURCE_DIRECTORY] \ --entry-point [ENTRY_POINT_FUNCTION] \ --trigger-http \ --allow-unauthenticated \ --set-env-vars xxx=hoge,huga
![]()
上記のようなエラーが出てしまいました……
困った時はすぐ公式ドキュメント。
エラー文でも示されていたgcloud CLIのコマンドリファレンスあたりを探索していたところ、以下の記述が。
gcloud compute addresses create --addresses ^:^123.456.789.198:22.333.146.189:789.312.645 --region us-central1
上記の例はIPアドレスですが、確かに複数の値を定義している……
ということは、この記法を真似すればエラーなく複数の値を定義できるのでは??
そう考え、以下のコマンドで再度デプロイを実施してみたところ……
gcloud functions deploy [FUNCTION_NAME] \ --gen2 \ --runtime [RUNTIME] \ --region [REGION] \ --source [SOURCE_DIRECTORY] \ --entry-point [ENTRY_POINT_FUNCTION] \ --trigger-http \ --allow-unauthenticated \ --set-env-vars ^:^xxx=hoge,huga
成功しました!!
![]()
コンソールからも複数の値が定義されていることが確認できました。

何故^:^を加えるだけでうまくいく?
結論から述べると、^:^と記述することによって、^^で囲まれた文字を区切り文字(デリミタ)として定義しているからです。
--set-env-vars xxx=hoge,huga
通常は「,」が区切り文字なので、上記の書き方だと以下のように解釈されます。
xxx=hoge huga
こうなると、hugaが独立してしまいエラーになってしまいます。
ですが、新たに別の文字を区切り文字として認識させてあげれば、この問題は解決します。
--set-env-vars ^:^xxx=hoge,huga
今回は「:」が区切り文字になっているので、上記の書き方だと以下のように解釈されます。
xxx=hoge,huga
「,」で区切られることなく一つの要素として解釈されるので、エラーなく複数の値を定義できるようになるのです。
さいごに
今回は、Cloud Run Functionsの環境変数に複数の値を定義する方法をご紹介しました。
本記事が皆様のお役に立てれば幸いです。
最後までお読みいただきありがとうございます。
参考: https://cloud.google.com/sdk/gcloud/reference/topic/escaping
参考: https://e-words.jp/w/%E3%83%87%E3%83%AA%E3%83%9F%E3%82%BF.html