Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tseno

基礎Ruby on Rails #24 Chapter13 クラウドスレレージサービス(Amazon S3)の利用

More than 1 year has passed since last update.

基礎Ruby on Rails #23 Chapter13 複数画像のアップロード/順番の入れ替え
基礎Ruby on Rails #25 Chapter14 多対多の関連付け

クラウドストレージサービスの利用

CA証明書の設置

  • 全サービスに共通する準備作業として、SSL接続で使用するCA証明書を設置する。
  • ターミナルで以下の2つのコマンドを実行する。
$ CERT_PATH=$(ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE")
$ sudo curl "https://curl.haxx.se/ca/cacert.pem" -o $CERT_PATH

Amazon S3

Amazon S3の概要

  • Amazon S3はAmazon Web Services (AWS) が提供するストレージサービス

AWSアカウントの取得

  • クレジットカードの登録が必要。アカウント作成から12ヶ月間はAmazon S3の無料利用枠が使える。(最大5GB)

IAMユーザーの作成

  • AWSコンソールでIAMユーザーを作成する。このIAMユーザーに対して、アクセスキーを作成する。アクセスキーとは、アクセスキーIDとシークレットアクセスキーを組み合わせたもの。
  • また、このIAMユーザーに対してAmazonS3FullAccessという名前のポリシーを付与(アタッチ)する。
  • IAMをクリック

image.png

  • ユーザーをクリック → ユーザーを作成をクリックする。

image.png

  • ユーザー名にasagaoを入力 → プログラムによるアクセスをチェックして、次のステップ:アクセス権限ボタンを押す。

image.png

  • 既存のポリシーと直接アタッチを選択 → AmazonS3FullAccessをチェック → 次のステップ:確認ボタンを押す。

image.png

  • 確認して、ユーザーの作成ボタンを押す。

image.png

  • ユーザー作成後、アクセスIDとシークレットアクセスキーをメモして閉じる。

バケットの作成

  • バケットとはオブジェクトを格納するための入れ物。
  • バケットにはリージョンという属性がある。Active Storageの資格情報に使用するのは、ap-northeast-1のような文字列。
  • バケット自体のアクセス制限に関する設定はデフォルトのままでOK。 image.png

image.png

準備作業

  • Gemfileにgem 'aws-sdk-s3', require: falseを追加する。
Gemfile
gem 'aws-sdk-s3', require: false
$ bundle install
  • 資格情報を入力する。
$ echo 'export EDITOR=vim' >> ~/.bashrc
$ source ~/.bashrc
$ bin/rails credentials:edit
config/credentials.yml.enc(一部)
aws:
  access_key_id: XXXXXXXXXXXXXXXXXX
  secret_access_key: yyyyyyyyyyyyyyyyyyy
  • コメントアウトを外して、regionとbuketを入力する。(コメントアウトを外した時に、先頭に空白が入っているのでフォーマットすること)
config/storage.yml(一部)
# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
 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: tseno-asagao
  • config.active_storage.serviceの設定を:localから:amazonに変更する。
config/environments/development.rb(一部)
  # Store uploaded files on the local file system (see config/storage.yml for options)
  config.active_storage.service = :amazon

動作確認

  • データベースの画像を一旦クリアしてから、サーバーを起動する。
$ bin/rails db:rebuild
$ bin/rails s
  • 画像を登録する。

image.png

  • S3に入ったことを確認した。

image.png

Google Cloud Storage、Microsoft Azure Storageは今回は省略する

まとめ

  • DBに入れないファイルをS3に入れておけば管理が楽なので、この機能は使えそうですね。

参考
改訂4版 基礎 Ruby on Rails (IMPRESS KISO SERIES)

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
tseno
Java、Kotlinのフリーランスエンジニア

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?