LoginSignup
2

More than 5 years have passed since last update.

CodeBuildでRails5.2プロジェクトをビルドしようてハマった

Posted at

概要

CodeBuildでRails5.2プロジェクトをビルドしようてハマったのでメモ

症状

ビルド時にRAILS_MASTER_KEYがないといわれてエラー終了する

Missing encryption key to decrypt file with. Ask your team for your master key and write it to /app/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].

原因

以下の条件が重なってエラーになっていた

  • ENV['RAILS_MASTER_KEY']が設定されていなかった
  • Dockerfile内でRailsプロセスの起動を行なっていた
  • config.require_master_key = true が設定されていた
...
ENTRYPOINT ["./entrypoint.sh"]
entrypoint.sh
bundle exec rake about
bundle exec rake db:create db:migrate db:seed
config/environments/production.rb
config.require_master_key = true

解決方法

以下の2点が必要

  • CodeBuildの環境変数としてRAILS_MASTER_KEYを設定する
  • docker build 時に引数としてRAILS_MASTER_KEYを渡す

CodeBuildの環境変数としてRAILS_MASTER_KEYを設定する

マネージメントコンソールからビルドの環境変数としてRAILS_MASTER_KEYを設定してもよいのだが、
機密情報ではあるのでAWS System Managerのパラメータストアを利用する。

version: 0.2
env:
  parameter-store:
    RAILS_MASTER_KEY: 'rails_master_key'
  variables:
    AWS_DEFAULT_REGION: us-east-1
    REPOSITORY_URI: 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/collect_and_destroy

envparameter-storeにキーを設定する。
RAILS_MASTER_KEYがCodeBuildで利用できる環境変数名、rails_master_keyがSystem Managerのパラメータとして設定したキー名となる。

docker build 時に引数としてRAILS_MASTER_KEYを渡す

シェルに設定された環境変数とDockerから利用される環境変数は違うみたい
Dockerから利用される環境変数を設定するにはENVARGという定義命令を使う
ENVは環境変数の定義、ARGdocker build時に引数として値を渡すことができる

ENV RAILS_ENV production
ARG RAILS_MASTER_KEY

ARGに引数を渡すには以下のようなコマンドを実行する

$ docker build --build-arg RAILS_MASTER_KEY=12345 -t docker_image:latest .

最終的に以下のような感じになった

buildspec.yml
version: 0.2
env:
  parameter-store:
    RAILS_MASTER_KEY: 'rails_master_key'
phases:
  build:
    commands:
      - docker build --build-arg RAILS_MASTER_KEY=$RAILS_MASTER_KEY -t collect_and_destroy:latest .

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
2