前 基礎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に入れておけば管理が楽なので、この機能は使えそうですね。