Edited at

基礎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)