Help us understand the problem. What is going on with this article?

ActiveStorageでファイルの保存先にAWS S3を利用するための準備

More than 1 year has passed since last update.

もくじ

  1. 【AWS】S3でBucketを作成
  2. 【AWS】IAMでポリシーを作成
  3. 【AWS】IAMでユーザーを作成
  4. 【Rails】S3関連の設定を追加・変更

1. 【AWS】S3でBucketを作成

ファイルを格納するS3 Bucketを作成します。

01.png
02.png

設定した「バケット名」はこのあとの手順(IAMポリシー作成、ActiveStorage設定)でも利用するので、メモなどに記録しておきます


2. 【AWS】IAMでポリシーを作成

作成したS3 Bucketへの読み書きが設定されたポリシーを作成します。

補足:既に存在しているポリシー、ユーザーを利用する場合はこの手順はスキップ可能です

11.png
12.png
13.png

入力するJSONは以下のフォーマットになります。

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Effect": "Allow",
       "Action": ["s3:ListBucket"],
       "Resource": ["arn:aws:s3:::<バケット名>"]
     },
     {
       "Effect": "Allow",
       "Action": [
         "s3:PutObject",
         "s3:GetObject"
       ],
       "Resource": ["arn:aws:s3:::<バケット名>/*"]
     }
   ]
 }

参考:Amazon S3: 特定の S3 バケットへの読み取りと書き込みアクセスを許可する - AWS Identity and Access Management

14.png
15.png

「ポリシー名」はこのあとの手順(IAMユーザー作成)でも利用するので、メモなどに記録しておきます。


3. 【AWS】IAMでユーザーを作成

Railsアプリで利用するユーザーを作成します。
ユーザーを作成する手順の中で事前に用意したポリシーをアタッチします。

補足:既に存在しているポリシー、ユーザーを利用する場合はこの手順はスキップ可能です

21.png
22.png
23.png

24.png

補足:事前に作成しておいた「ポリシー」を選択します。

25.png
26.png

「アクセスキーID」「シークレットアクセスキー」はこのあとの手順(ActiveStorage設定)でも利用するので、メモなどに記録しておきます。


4. 【Rails】S3関連の設定を追加・変更

ActiveStorageから事前に作成したS3 Bucketへファイルを保存するように設定を追加・変更します。

Gemfile

RailsからS3の機能を利用するためにgemを追加します。

Gemfile
gem 'aws-sdk-s3'

config/storage.yml

amazonの設定はデフォルトではコメントアウトされているので、コメントアウトを外して、「リージョン」と「バケット名」を設定します。

補足
regionにはS3 Bucketを作成したリージョン名を指定する
アジアパシフィック(東京)で作成した場合は、ap-northeast-1となる
bucketにはS3の「バケット名」を指定する

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: ap-northeast-1
  bucket: <バケット名>

credentials.yml.enc

credentials.yml.encに「アクセスキーID」「シークレットアクセスキー」を設定します。

# credentials.yml.enをviで開く
$ EDITOR="vi" bin/rails credentials:edit

awsの設定はデフォルトではコメントアウトされているので、コメントアウトを外して、access_key_idsecret_access_keyを設定します。

aws:
  access_key_id: <アクセスキーID>
  secret_access_key: <シークレットアクセスキー>

config/environments/xxx.rb

デフォルトではファイルの保存先にローカル(:local)が指定されているので、:amazonに変更します。

config/environments/xxx.rb
config.active_storage.service = :amazon

実装&動作確認

あとはローカルにファイルを保存するときと同じようにActiveStorageを利用した機能を実装するだけで、ファイルがS3へ保存されるようにります。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away