データベースについて
このドキュメントでは、Worker からデータベースを利用する方法について説明しています。
MAGELLAN では、Worker から簡単に利用できるデータベースとして、Cloud SQL を用意しています。これは、データベースに必ず Cloud SQL を使わなければならないということではありません。MAGELLAN 提供外のデータベースも利用できます。
MAGELLAN 提供の Cloud SQL 以外のデータベースを Worker から利用する場合には、接続情報を指定する手順が必要になります。
Worker からデータベースを利用するためには、データベース接続に関する様々な情報が必要になります。例えば、次のような情報です。
- データベースが動作しているサーバーの IP アドレス
- データベースが動作しているサーバーのポート番号
- データベース名
- データベースにアクセスのためのユーザ名
- データベースにアクセスのためのパスワード
MAGELLAN では、環境変数を使って、これらの情報を Worker に与える手段を提供しています。この手段を利用するには、次の 2 つのステップを踏みます。
- Worker に渡すための環境変数を定義 (MAGELLAN 提供の Cloud SQL を利用する場合はこの環境変数は自動的に渡されます)
- Worker から環境変数を取得
以下、それぞれのステップについて説明します。
Worker に渡すための環境変数を定義
YAML 形式のテキストファイルで、環境変数を定義します。たとえば、worker.yml
というファイル名称で次のように定義します。
migration_command_1: "bundle exec rake db:migrate:reset db:seed"
migration_command_2: "bundle exec rake db:migrate"
environment_vars_yaml: |
---
SECRET_KEY_BASE: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
RAILS_ENV: production
MYSQL_HOST: 123.123.123.123
MYSQL_PORT: 3306
MYSQL_DATABASE: MyOrg_MyProject_MyStage_MyDB
MYSQL_USERNAME: xxxxxxxxxxxxxxx
MYSQL_PASSWORD: xxxxxxxxxxxxxxxx
1 行目と 2 行目は、Worker 起動時に実行するコマンドの指定です。今回説明する環境変数とは関係ありません。
3 行目の environment_vars_yaml
が環境変数を定義する指定となります。3 行目と 4 行目は、このままとしてください。
5 行目以降が、環境変数の定義になります。定義する「環境変数名」とその「値」を「環境変数名: 値
」という書式で行単位で定義します。
この例だと、MYSQL_
で始まる環境変数名がデータベース接続に関する情報となっています。ここでは、MySQLと接続するため、MYSQL_
としていますが、名前は自由に決めて構いません。ただし MAGELLAN が提供する Cloud SQL を利用する場合は MYSQL_ から始まる環境変数が定義されます。
magellan-cli worker create
コマンドを使って、Worker を MAGELLAN に登録しますが、この時に -A
オプションを使って、先ほど定義した YAML 形式のテキストファイルを指定します。こうすることで、この Worker 起動時に、指定の環境変数が設定され、Worker 内ではこの環境変数にアクセスできるようになります。
$ magellan-cli worker create MyWorker yourname/rails-worker-example:0.0.1 -A worker.yml
Worker から環境変数を取得
Worker では、環境変数を読み取るコードを記述します。Rails アプリケーションの場合は、database.yml
ファイルにデータベースへの接続情報を記載しますので、ここで記述します。<%= ENV['...'] %>
部分が、該当するコードです。
production:
<<: *default
pool: 1
host: <%= ENV['MYSQL_HOST'] %>
port: <%= ENV['MYSQL_PORT'] %>
database: <%= ENV['MYSQL_DATABASE'] %>
username: <%= ENV['MYSQL_USERNAME'] %>
password: <%= ENV['MYSQL_PASSWORD'] %>