環境変数の設定

概要

他のアプリケーションのシークレットやトークンをコードと分離し管理するために、環境変数に設定するのが一般的なやり方です。

ココではRailsアプリケーションに置いて、環境変数を設定する方法をお伝えします。

全体の設計

Custom Chefは対象のCookbookをEngine Yard Cloud管理サーバに登録されます。

これはeyコマンドからダウンロードできるため、追加、変更が必要な場合は、こちらからダウンロードし、編集、再度アップロードします。

Applicationサーバ、DBサーバ、Utilityサーバスケール時にも同じ設定が反映されます。

準備

1. ローカル環境にey コマンドをインストールしておく

https://support.cloud.engineyard.com/entries/25068712?locale=67

手順

1. custom chefを用いて、必要な環境変数を `/data/#{app_name}/shared/config/env.custom` に設定する

2. Nginxからのアクセスにて、設定した変数が反映されます(Rails consoleからはこちらのやり方では反映されません)

3. dotenv gemをつかって、コマンドライン、runnerなどからも参照できるようにします

 

1. Custom Chefを使う

custom chefの仕組みを使って、環境変数を設定します。環境変数は `/data/#{app_name}/shared/config/env.custom` に書きだされ、nginxにて設定されます。

 a. custom chefのテンプレートを次のリポジトリからダウンロードしてきます

https://support.cloud.engineyard.com/entries/25068712?locale=67

 

b. cookbooks/main/recipes/default.rb から、 `include_recipe "env_vars"` をコメントインします

https://github.com/engineyard/ey-cloud-recipes/blob/master/cookbooks/main/recipes/default.rb#L84 

* phpの場合 cookbooks/env_bars/templates/default/env.custom.erb を次のように変更してください

<% @env_vars.each do |key, value| %> 
env[<%= key.upcase %>] = <%= value %> 
<% end %>

 

c. cookbooks/env_vars/attributes/env_vars.rb に設定したい環境変数を設定します

https://github.com/engineyard/ey-cloud-recipes/blob/master/cookbooks/env_vars/attributes/env_vars.rb

サンプルで設定してある変数は削除して構いません

 

d. eyコマンドを使って、cookbookのuploadと、apply(適応) を行います

$ey recipes upload -e #{環境名} $ey recipes apply -e #{環境名}

 

Nginxからのアクセス(webアクセス)時に、envに設定されるようになります

dotenvでの読み込み

rake taskやrunnerなどコマンドラインから使うときは、rubygemsのdotenvを使って読み込むことができます。

Dotenv.load('/data/#{app_name}/shared/config/env.custom')

 

たとえば、config/に以下のようにロードを追加することで、assets pipline やrunnerで使うことが可能です。

 

```

  env_file_path = "/data/Chart/shared/config/env.custom"
  if File.exists?(env_file_path)
    Dotenv.load(env_file_path)
  end
```

 

YAML をつかう

Engine Yardでは、一つの環境(クラスター)に複数のアプリを乗せることができます。

この場合、グローバルな環境変数は適切な解法ではありません。次のリンクにYAMLを使った、設定方法もございます。

https://support.cloud.engineyard.com/hc/en-us/articles/205407508-Environment-Variables-and-Why-You-Shouldn-t-Use-Them 

コメント

サインインしてコメントを残してください。

Powered by Zendesk