LoginSignup
4
7

More than 3 years have passed since last update.

AWS S3 バケットで保存する

Last updated at Posted at 2020-04-06

S3でファイルがアップロードされる領域を準備しましょう
ファイルのバックアップであったり、ファイル処理の加工前、もしくは加工後のファイルを保存する、画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信するなど、使い方は無限大になります

S3(Simple Storage Serviceを略してS3)で、実際にデータが格納される場所のことをバケットと呼びます。バケットの名前はアクセスするときのURLとして使用されるため、まだ誰も付けたことがない名前を使う必要があります。

S3を利用してバケットを作成

  1. AWSコンソールを開く

  2. ストレージの項目にある「S3」を開く

Image from Gyazo
3. 「バケットを作成」をクリック(オレンジのボタン)

スクリーンショット 2020-04-06 9.19.32.png
4. バケットの名前を入力

スクリーンショット 2020-04-06 9.21.11.png
5. リージョン「アジアパシフィック」を選択
スクリーンショット 2020-04-06 18.33.36.png
6. 画像のような設定にします。今回はバケットポリシーを使用してセキュリティ設定を行いますので下の2つにチェックを入れます。ここの設定が誤っているとファイルのアップロードができなくなりますので注意

スクリーンショット 2020-04-06 18.40.40.png
7. 作成したバケットを開く
スクリーンショット 2020-04-06 19.11.27.png
8. アクセス権限>バケットポリシーを開く

スクリーンショット 2020-04-06 19.13.00.png
9. 表示されたエディターに下記を入力

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "************①IAMUserなどのアカウント****************"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::②バケット名"
        }
    ]
}

10.まず②から埋めます。②はバケット名を入力するだけですが、よく見ると画像の場所に記載されています
スクリーンショット 2020-04-06 19.21.32.png
バケットポリシーエデイターの隣に「ARN:arn:aws:s3:::exampleadmin」と記述されています。
このaws:s3:::exampleadminが入った状態が②です。

11.①はIAMのページに記載されています
まずIAMの管理ページを開きますスクリーンショット 2020-04-06 19.27.49.png
そして、作成したユーザーを開きます。この例の場合exampleを開きます
続いて、「ユーザーのARN」をコピーします
Image from Gyazo

では、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://www.fundely.co.jp/blog/tech/2019/12/11/180024/

CarrierWaveによる画像のアップロード先がアプリ内のpublicフォルダですが、
これをS3に変更していきます。

Gemfile
gem 'carrierwave'
gem 'fog-aws'
$ bundle install

storageを「:file」から「:fog」に変更する

app/uploaders/image_uploader.rb
# 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のアップロード先の設定

config/initializers/carrierwave.rb
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

4
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7