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


基礎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をクリック

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

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

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

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

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

バケットの作成

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

準備作業

  • 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
  • 画像を登録する。

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

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

まとめ

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

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