LoginSignup
0
1

More than 1 year has passed since last update.

[Rails] ActiveStrageの画像の保存先をAmazon S3にする③~S3に保存する~

Posted at

はじめに

これは前回の続きです。①、②がいわば下準備です。後はアプリの方に記述をするだけです。
よろしくお願いします。

S3に保存するための記述を書く

まず、RailsアプリにGemを入れます。
Gemfileに下記を追記し、bundle installしましょう。

Gemfile
gem "aws-sdk-s3", require: false
ターミナル
% bundle install

続いてconfig/environments/development.rbの記述を編集します。
下記の記述を確認してください。

config/environments/development.rb
# ~省略~

config.active_storage.service = :local

# ~省略~

この記述を下記のように編集します。

config/environments/development.rb
# ~省略~

config.active_storage.service = :amazon

# ~省略~

次にconfig/storage.ymlに追記します。
追記するのはamazon:〜からです

config/storage.yml
test:
 service: Disk
 root: <%= Rails.root.join("tmp/storage") %>

local:
 service: Disk
 root: <%= Rails.root.join("storage") %>

amazon:
 service: S3
 region: ap-northeast-1
 bucket: ご自身の「バケット名」を入力

 ~省略~

bucket:のところは②の記事で作成した名前を入力してください。

最後にS3にアクセスするための認証情報を設定します。
今記述したstrage.ymlファイルに記述しますが、直接記述するとセキュリティー面で危険なので、環境変数に入れて、ここにはあとで変数を記入するようにします。

①の記事でダウンロードしたnew_user_credential.csvファイルを開くと「Access key ID」と「Secret access key」があるはずです。

これが環境変数に代入する値になります。

ここからはmacOSがCatalina以降とMojava以前ではコマンドが違うので気をつけてください。

ターミナルの開発中のアプリのディレクトリで下記を実行します。

ターミナル(MacOSがCatalina以降の場合)
% vim ~/.zshrc
ターミナル(MacOSがMojava以前の場合)
$ vim ~/.bash_profile

ターミナル上で.zshrcファイル、もしくは.bash_profileファイルが開けたら「iキー」を押して入力可能な状態にします。

下記を追記します。

export AWS_ACCESS_KEY_ID="CSVファイルのAccess key IDの値を貼り付け"
export AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access keyの値を貼り付け"

貼り付ける際、値のダブルクォーテーションは必要です。

追記が完了したら「escキー」→「:wq」でファイルを保存します。
先ほどの記述を実行するために下記のコマンドを実行します。

ターミナル(MacOSがCatalina以降の場合)
% source ~/.zshrc
ターミナル(MacOSがMojava以前の場合)
$ source ~/.bash_profile

ターミナルがいくつも開いている場合は全てのタブでこのコマンドを実行します。
そして、もう一度storage.ymlを編集します。amazon:のところです。

config/storage.yml
# ~省略~

amazon:
 service: S3
 region: ap-northeast-1
 bucket:  (自身のバケット名が記載されている状態です)
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

#~省略~

これで完了です。
ローカル環境でアプリのActiveStorageを利用した投稿機能などで、画像を保存してみてください。

その後①で作成したIAMユーザーでAWSでログインしS3のページへ移動します。
②で作成したバケットをクリックしてオブジェクトというところに、保存されているはずです。↓
image.png

中身も気になる方は、チェックボックスにチェックを入れて「開く」をクリックをすると確認することができます。
これでS3に保存することができました。

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