🙆

RailsアプリケーションでAWS Parameter Storeを使用する方法

2024/08/15に公開

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を使用する準備が整いました。
ぜひ試してみてください!

Discussion