6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS Secrets Managerからdotenvの設定ファイルを作る

Posted at

概要

今までRailsでサービス開発をしてきて、ホスト名やパスワードをdotenvを使って管理してきた。

そういった情報はハードコーディングするわけにはいかないので、手動でdotenvのファイルを書き換えていた。

Secrets Managerを使うと少し管理が楽になる。

環境

Rails 5.2.0
aws-cli 1.15.34
Ubuntu 18.04 LTS
dotenv-rails 2.4.0

※アプリケーション名 iauth

シークレット値の登録

読まれたらいけない値を登録しておく。

スクリーンショット_2018-06-12_11_10_33.png

secretsmanager コマンドを使えるようにする

下記のコマンドが使えるようにしておく。

$ aws secretsmanager get-secret-value --secret-id {keyname}

※新しめのaws-cliでないと secretsmanager をサポートしていないので注意する。

うまくいくと、登録した値がjsonで返ってくる。


{
    "ARN": "arn:aws:secretsmanager:***",
    "Name": "***",
    "VersionId": "***",
    "SecretString": "{\"RAILS_SECRET_KEY_BASE\":\"***\",\"IAUTH_DATABASE_HOST\":\"\\\"***\\\"\",\"IAUTH_DATABASE_USER\":\"\\\"***\\\"\",\"IAUTH_DATABASE_PASSWORD\":\"\\\"***\\\"\",\"REDIS_HOST\":\"***\",\"API_MASTER_TOKEN\":\"***\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1528447946.908
}

取得した値をdotenv形式にするスクリプト

取得した値を dotenv が読めるようにする。

get_secrets_from_aws.rb
require 'json'

ret = `aws secretsmanager get-secret-value --secret-id iauth `
begin
  params = JSON.parse(ret)
  secrets = JSON.parse(params['SecretString'])
rescue
  return
end

envstr = "RAILS_SECRET_KEY_BASE=" + secrets['RAILS_SECRET_KEY_BASE'] + "\n"
envstr += "IAUTH_DATABASE_HOST=" + secrets['IAUTH_DATABASE_HOST'] + "\n"
envstr += "IAUTH_DATABASE_USER=" + secrets['IAUTH_DATABASE_USER'] + "\n"
envstr += "IAUTH_DATABASE_PASSWORD=" + secrets['IAUTH_DATABASE_PASSWORD'] + "\n"
envstr += "REDIS_HOST=" + secrets['REDIS_HOST'] + "\n"
envstr += "API_MASTER_TOKEN=" + secrets['API_MASTER_TOKEN'] + "\n"

print envstr

secretsを取得する capistrano タスクを書く

デプロイされるディレクトリに直接ファイルを作成する。

deploy.rb
namespace :deploy do
  task :reload_secrets do
    on roles(:web) do
      execute "ruby /var/www/iauth/current/get_secrets_from_aws.rb > /var/www/iauth/current/.env"
    end
  end
end

これでデプロイタスクにsecretsの更新を含めることができた。

6
4
0

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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?