S3でファイルがアップロードされる領域を準備しましょう
ファイルのバックアップであったり、ファイル処理の加工前、もしくは加工後のファイルを保存する、画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信するなど、使い方は無限大になります
S3(Simple Storage Serviceを略してS3)で、実際にデータが格納される場所のことをバケットと呼びます。バケットの名前はアクセスするときのURLとして使用されるため、まだ誰も付けたことがない名前を使う必要があります。
S3を利用してバケットを作成
-
ストレージの項目にある「S3」を開く
5. リージョン「アジアパシフィック」を選択
6. 画像のような設定にします。今回はバケットポリシーを使用してセキュリティ設定を行いますので下の2つにチェックを入れます。ここの設定が誤っているとファイルのアップロードができなくなりますので注意
7. 作成したバケットを開く
8. アクセス権限>バケットポリシーを開く
{
"Version": "2012-10-17",
"Id": "Policy1544152951996",
"Statement": [
{
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "************①IAMUserなどのアカウント****************"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::②バケット名"
}
]
}
10.まず②から埋めます。②はバケット名を入力するだけですが、よく見ると画像の場所に記載されています
バケットポリシーエデイターの隣に「ARN:arn:aws:s3:::exampleadmin」と記述されています。
このaws:s3:::exampleadminが入った状態が②です。
11.①はIAMのページに記載されています
まずIAMの管理ページを開きます
そして、作成したユーザーを開きます。この例の場合exampleを開きます
続いて、「ユーザーのARN」をコピーします
では、S3に戻ってバケットを開き①の項目に入れましょう
{
"Version": "2012-10-17",
"Id": "Policy1544152951996",
"Statement": [
{
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789123:user/example"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::example"
}
]
}
これで作成完了しました
ローカル環境(開発環境)からS3にアップロード
ActiveStorageの場合は下記を参考にしてください
RailsアプリでActiveStorage + AWS S3を使ってみよう!
[CarrierWaveによる画像のアップロード]
(https://qiita.com/Tatsu88/items/be3209154a88b35be1c5)
二つの違いに関する記事
https://www.fundely.co.jp/blog/tech/2019/12/11/180024/
CarrierWaveによる画像のアップロード先がアプリ内のpublicフォルダですが、
これをS3に変更していきます。
gem 'carrierwave'
gem 'fog-aws'
$ bundle install
storageを「:file」から「:fog」に変更する
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
include CarrierWave::MiniMagick
process resize_to_fit: [800, 800]
# Choose what kind of storage to use for this uploader:
storage :fog #ここを変更
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
fogのアップロード先の設定
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
CarrierWave.configure do |config|
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: Rails.application.secrets.aws_access_key_id,
aws_secret_access_key: Rails.application.secrets.aws_secret_access_key,
region: 'ap-northeast-1'
}
config.fog_directory = 'ここにバケット名を入れます'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/ここにバケット名を入れます'
end
Mojave以前の場合
$ vim ~/.bash_profile
# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
export AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
export AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'
#ここで保存完了
$ source ~/.bash_profile
catarina以降の場合
# ローカル環境
$ vim ~/.zshrc
# iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。
export AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー'
export AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー'
#ここで保存完了
#読み込みさせる
$ source ~/.zshrc
あとは資料と同じです
参考になるQiita
https://qiita.com/Tatsu88/items/be3209154a88b35be1c5
https://qiita.com/junara/items/1899f23c091bcee3b058