1
0

More than 1 year has passed since last update.

Railsの開発環境でAWSサービスを使うとminioの設定とAws.configの競合が発生する

Last updated at Posted at 2022-03-15

まとめ

ローカルの開発環境でminioを使いながらAWSのcredentialを同時に扱うことは難しそう

なので、各サービスのクライアント生成時にcredential情報を渡すことになるかも

config/initializers/aws.rb

creds = Aws::Credentials.new(
  Rails.application.credentials[:aws][:access_key_id],
  Rails.application.credentials[:aws][:secret_access_key]
)

region = Rails.application.credentials[:aws][:region]

Aws.config.update(
  region: region,
  credentials: creds
)

と宣言しておき

    def client
      conf = Aws.config
      access_key_id_sym = Rails.env.development? ? :cog_access_key_id : :access_key_id
      secret_access_key_sym = Rails.env.development? ? :cog_secret_access_key : :secret_access_key

      creds = Aws::Credentials.new(
        Rails.application.credentials.dig(:aws, access_key_id_sym),
        Rails.application.credentials.dig(:aws, secret_access_key_sym)
      )

      @cognito_client ||= Aws::CognitoIdentityProvider::Client.new(
        credentials: creds,
        region: conf[:region],
        http_wire_trace: Rails.env.development?
      )
    end

こんな感じ?

credentials.yml.enc とかで、 cog_access_key_id などを宣言しておき、それを直接クライアント生成時に突っ込むと言う流れ

もっといい方法があるかもしれない

何が起きた?

storage.yml で設定していた minioを利用するための設定、特にcredentials部分がうまく動作しなかった。

minio:
  service: S3
  access_key_id: minio
  secret_access_key: minio123
  endpoint: "http://minio:9000"
  region: ap-northeast-1
  bucket: test
  force_path_style: true

access_key_idを直接設定していたはずなのに、なぜか Rails.application.credentials[:aws][:access_key_id] を参照して、minioに接続ができない。

docker-compose.yml でminioのcredentialsを設定しているので、そちらを変更することも考えたが、キーを平文で入れることになるため断念。

仕方なく、それぞれのAWSクライアント側で開発環境は対応することとした。

これしか思いつかなかったなぁ
minioのクライアント生成部分に手を加える方法があるなら、それが一番簡単かもしれないのだけどね。

1
0
1

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
1
0