AWS Parameter Storeは、アプリケーションの設定値や機密情報を安全に管理するための便利なサービスです。
この記事では、Railsアプリケーションのproduction環境設定でAWS Parameter Storeの値を使用する方法について説明します。
前提条件
- AWSアカウントがあること
- AWS CLIが設定されていること or EC2などに適切なロールが割り当てられていること
- Railsプロジェクトがあること
1. AWS SDKのセットアップ
まず、AWS SDKをプロジェクトに追加します。Gemfileに以下を追加し、bundle installを実行します。
gem 'aws-sdk-ssm'
2. パラメータ取得用のヘルパーメソッド
次に、AWS Parameter Storeから値を取得するためのヘルパーメソッドを作成します。config/application.rbに以下のコードを追加します。
require 'aws-sdk-ssm'
module ParameterStoreHelper
def fetch_parameter(name)
ssm_client = Aws::SSM::Client.new(region: 'your-aws-region')
response = ssm_client.get_parameter(name: name, with_decryption: true)
response.parameter.value
rescue Aws::SSM::Errors::ParameterNotFound
nil
end
end
class Application < Rails::Application
# 既存の設定...
extend ParameterStoreHelper
end
3. production.rbでの使用
config/environments/production.rbで、AWS Parameter Storeから取得した値を設定に使用します。
Rails.application.configure do
# 既存の設定...
config.secret_key_base = Rails.application.fetch_parameter('/your_app/production/secret_key_base')
config.action_mailer.smtp_settings = {
address: Rails.application.fetch_parameter('/your_app/production/smtp_address'),
port: Rails.application.fetch_parameter('/your_app/production/smtp_port'),
user_name: Rails.application.fetch_parameter('/your_app/production/smtp_username'),
password: Rails.application.fetch_parameter('/your_app/production/smtp_password')
}
# その他の設定...
end
注意点
- IAMロールの設定
- EC2インスタンスやECSタスクに適切なIAMロールを割り当て、Parameter Storeへのアクセス権限を付与する必要があります。
- パフォーマンスへの影響
- 起動時にParameter Storeから値を取得するため、アプリケーションの起動時間が若干長くなる可能性があります。
- エラーハンドリング
- パラメータが見つからない場合のエラーハンドリングを適切に行うことが重要です。
- 環境変数との併用
- 一部の設定は環境変数で、機密性の高い情報はParameter Storeで管理するなど、柔軟に組み合わせることができます。
- この方法を使用することで、AWSのParameter Storeに保存された値をRailsのproduction環境設定で安全に利用できます。
- セキュリティと設定管理の両面で有効な手法です。
これで、RailsアプリケーションでAWS Parameter Storeを使用する準備が整いました。
ぜひ試してみてください!