0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

備忘録:AWS S3活用による画像保存

Posted at

#はじめに
Railsでオリジナルアプリを制作しています。このアプリに画像投稿機能を実装しました。しかしHerokuでデプロイしたところ、24時間後には画像は表示されなくなりました(仕様です)。この問題を解決するため、AWS(Amazon Web Service)のS3(Simple Storage Service)を活用しました。今後も使用する機会がありそうなので、備忘録として書き記します。なお、AWS上のアカウント作成やセキュリティ対策方法は割愛します(別記事でまとめます)。

#手順
1.S3でバケット(データ格納場所)の準備
2.データ(今回は画像)保存先の設定

#1.S3でバケット(データ格納場所)の準備
バケット準備は大きく分けて下記2つの手順が必要です。

1-1.バケットの作成
AWSの公式サイトのサービスタブをクリックし、S3を選択します。その後「バケットを作成」をクリック。バケット名は誰かが既に使用していると、保存できないので注意。

AWS公式サイト

1-2.バケットポリシーの設定
どのようなアクセスに対してS3への保存やデータの読み取りを許可するか決めます。
(今回はIAMユーザーで設定します。)

・サービスタグから検索窓にIAMを入力し、表示されたメニューをクリックする。
・左端のユーザーをクリックし、表示されたユーザー名をクリックする。
・ARNをコピーする。
・再びサービスタブからS3を選択し、対象のバケットを選択する。
・アクセス許可タブ、バケットポリシーの項目の編集するをクリックする。
(下記参照)

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "先ほどコピーしたARNを貼り付ける"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::対象のバケット"
        }
    ]
}

#2.データ(今回は画像)保存先の設定
こちらも下記4つの手順が必要です。

2-1.必要なGemのインストール
Gemファイルに下記Gemを追加して、ターミナル上でインストールします。

Gemfile
gem "aws-sdk-s3", require: false
ターミナル
bundle install

2-2.保存先を指定
通常は保存先がlocalになっています。これをamazonに書き換えます。またローカル環境と本番環境では記述するファイルが異なるので注意する。

config/environments/development.rb(ローカル環境)
config.active_storage.service = :amazon
config/environments/production.rb(本番環境)
config.active_storage.service = :amazon

2-3.環境変数を設定

config/storage.yml
local:
 service: Disk
 root: <%= Rails.root.join("storage") %>
-------------------------------下記を追記----------------------------------
amazon:
 service: S3
 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
 region: ap-northeast-1
 bucket: 対象のバケット名

ターミナル上で環境変数を設定する。

ターミナル
vim ~/.zshrc
ターミナル
export AWS_ACCESS_KEY_ID="Access key IDの値をコピー"
export AWS_SECRET_ACCESS_KEY="Secret access keyの値をコピー"

設定できたら再びターミナルで設定を適用する。

ターミナル
source ~/.zshrc

2-4.動作確認
実際に保存してみて、AWS S3のページ対象のバケットにオブジェクトが追加されればOK

以上

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?