高木のブログ

【Cloud Functions】Functions Framework for Rubyを試す(環境変数を扱う編)

2021/10/11

今回はCloud Functionsで環境変数を扱ってみる
(パスワードなどの秘匿情報はSecret Managerを使うべし)

手順

環境変数 FUNCTION_ENV の設定を試してみる

コード

FunctionsFramework.http("env_vars") do |request|
  "FUNCTION_ENV: #{ENV['FUNCTION_ENV']}\n"
end

RubyではENVで環境変数を呼び出すことができる

ローカルで実行

$ FUNCTION_ENV=development bundle exec functions-framework-ruby --target env_vars
$ curl http://localhost:8080
FUNCTION_ENV: development

デプロイ

--set-env-varsで環境変数を設定することができる

$ gcloud functions deploy env_vars --runtime ruby27 --trigger-http --set-env-vars FUNCTION_ENV=production
$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
FUNCTION_ENV: production

補足

複数の環境変数を設定する

FunctionsFramework.http("env_vars") do |request|
  "ENV_VAR_A: #{ENV['ENV_VAR_A']}, ENV_VAR_B: #{ENV['ENV_VAR_B']}\n"
end

カンマ区切りで複数の環境変数を設定できる

$ gcloud functions deploy env_vars --set-env-vars ENV_VAR_A=foo,ENV_VAR_B=bar
$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
ENV_VAR_A: foo, ENV_VAR_B: bar

一部の環境変数を更新・追加する

--update-env-varsで更新・追加ができる

$ gcloud functions deploy env_vars --update-env-vars ENV_VAR_B=baz
$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
ENV_VAR_A: foo, ENV_VAR_B: baz

--set-env-varsだと指定していない環境変数は消えてしまう

ENV_VAR_Bだけ指定した場合、ENV_VAR_Aは消えてしまうので注意

$ gcloud functions deploy env_vars --set-env-vars ENV_VAR_B=baz
$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
ENV_VAR_A: , ENV_VAR_B: baz

--update-env-varsは使わず、--set-env-varsで必要な環境変数を全て記述してデプロイするのが無難なのかなと思う

参考

環境変数の使用 | Google Cloud Functions に関するドキュメント


ytkg

Written by ytkg, Twitter, GitHub