LoginSignup
13
13

More than 5 years have passed since last update.

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

Posted at

もくじ

  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へ保存されるようにります。

13
13
0

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
13
13