DockerでRails開発時に,画像の保存先をAWS S3にする


先日,Rails, Dockerでの開発時に画像の保存先をローカルからS3に変更した際の手順を記録した.

開発環境

WSL2 (ubuntu 18.04 LTS)
Docker
- Ruby (2.7.1)
- Rails (6.0.3)

画像をS3に保存する手順

Active Storageがインストールされており,S3バケット作成まで完了していることを想定

Active Storageのインストールは以下のコマンドでできる

terminal
docker-compose run コンテナ名 rails active_storage:install
docker-compose run コンテナ名 rails db:migrate

用意するもの

  • S3バケット情報

    • バケット名
    • リージョン
  • IAMユーザー情報

    • アクセスキー
    • シークレットアクセスキー

手順

1. root dirにて以下のコマンドを実行
terminal
docker exec -it コンテナID sh
/app # EDITOR=vi rails credentials:edit

コンテナIDは以下のコマンドで確認できる

terminal
docker ps
2. credentialsを編集

credentialsをターミナル上で編集する

awsは最初コメントアウトされているので外す (それに気付かずハマってしまいました)

aws:
 access_key_id: 取得したアクセスキー
 secret_access_key: 取得したシークレットアクセスキー

入力し保存する.

Esc→:wqでセーブして保存する.

:wq
3. config/storage.ymlの編集

regionとbucketを作成したものに書き換える.

config/storage.yml
amazon:
 service: S3
 access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
 secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
 region: "リージョン"
 bucket: "bucket名"
4. aws-sdk-s3というgemをインストールする

Gemfileを編集

Gemfile
gem 'aws-sdk-s3', require: false

Gemfileを書き換えたので,コンテナをbuildし直す.

terminal
docker-compose build コンテナ名
5. config/environments/development.rbでActive Storageの参照先を:localから:amazonへと変更
config/environments/development.rb
config.active_storage.service = :amazon

以上で,S3のバケットに画像が保存された.