iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 29

Day 29 - 使用 AWS S3 服務

  • 分享至 

  • xImage
  •  

本來沒有打算要寫這個內容的,但是提到上傳圖片,好像不能不說一下雲端儲存,畢竟不能永遠在本地端欣賞自己的檔案、照片,總有一天還是會碰到上傳的問題。而且朋友強烈推薦 AWS S3 服務,所以就來說下這個服務吧。

是說,什麼是 Amazon S3

這是 Amazon 提供雲端儲存服務,全名是 Simple Storage Service,簡稱為「S3」,可利用此服務來存放和保護任意數量的資料,例如網站、行動應用程式、備份和還原、存檔、企業應用程式、IoT 裝置及大數據分析。

要不要錢呢?
新的 AWS 客戶在第一年每月可以獲得 5 GB 的 Amazon S3 標準儲存、20,000 次 Get 請求、2,000 次 Put 請求、15 GB 的資料傳入、15 GB 的資料傳出。

打開google,搜尋 AWS,然後註冊吧!

因為前天有講到怎麼上傳圖片,而 CarrierWave 在 GitHub 的文件下方就有提到使用 S3 服務的說明,來動手做做看!

安裝套件

# Gemfile
gem 'fog-aws', '~> 3.6', '>= 3.6.7'

記得 bundle install

建立 carrierwave.rb

打開 config/intializers,在這個資料夾中新增一個檔名稱為 carrierwave.rb
把這段複製貼上到新建的檔案中
這邊先做初始化設定,必須提供你的 fog_credentials 和 fog_directory (也就是 bucket)

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:              'AWS',                        # required
    aws_access_key_id:     'xxx',                        # required unless using use_iam_profile
    aws_secret_access_key: 'yyy',                        # required unless using use_iam_profile
    use_iam_profile:       true,                         # optional, defaults to false
    region:                'eu-west-1',                  # optional, defaults to 'us-east-1'
    host:                  's3.example.com',             # optional, defaults to nil
    endpoint:              'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = 'name_of_bucket'                                      # required
  config.fog_public     = false                                                 # optional, defaults to true
  config.fog_at

仔細一看,其中有好多項目要填,而且都是比較機密的資訊,總不能把這些 id、金鑰等以明碼的方式跟著程式碼一起推上 GitHub 吧?其實昨天講述的 figaro 都只是鋪梗,一切都是為了使用別人的服務,通常在引入他人的服務時,都會需要一些驗證方式,所以正適合使用隱藏金鑰的環境變數。

接著於 uploader 的檔案中設定儲存到 Amazon 的 S3

class AvatarUploader < CarrierWave::Uploader::Base
  storage :fog  # to AWS S3
end

到 AWS 的官網註冊,並設定 Bucket

註冊完之後,搜尋 S3 的服務,點擊右上橘色的建立按鈕

bucket 命名必須是唯一的,不能和所有人的 bucket 名稱重複,地區選擇了最近的南韓

這邊是設定公開或私有,但因為僅是單純的個人 side project,所以就不多做設定,如果是重要或隱密的文件,建議不要這樣操作

版控、標籤、加密也都視個人需求選用,注意有些服務是需要額外付費的,可以點進“進一步了解”,參考說明和付費標準

送出表單後,導回剛剛的畫面,就建立完第一個 bucket 了!

點擊熱騰騰的 bucket,進到以下畫面,試著上傳一份檔案或圖片

打開剛剛上傳的圖片

有產生一格物件的 URL,可以知道 bucket 的名稱、地區

取得金鑰

回到主頁,點擊右上帳戶,「我的安全登入資料」

選「存取金鑰」、並且「建立新的存取金鑰」

複製或下載金鑰檔案都可以

回到專案中設定

打開 config/application.yml 新增金鑰,你可以自己決定要放在哪個環境中(production、test、development)

AWS_ACCESS_KEY_ID: '存取金鑰 ID'
AWS_SECRET_ACCESS_KEY: '私密存取金鑰'
S3_BUCKET_NAME: '儲存庫名稱'

(一個不小心手殘按錯,把第一次截圖的金鑰給刪除了,再重新創建一筆,所以兩張截圖的金鑰才會是不同的! 如果你沒發現就算了 )

將參數部署到 Heroku:

設定:

$ figaro heroku:set -e production

進到 heroku config 查詢是否設定成功

$ heroku config
heroku run rails c

ENV[“AWS_ACCESS_KEY_ID”]   # 分別印出相應的亂數即為成功
ENV[“AWS_SECRET_ACCESS_KEY”]
ENV[“S3_BUCKET_NAME”]

參考資料:
GitHub-CarrierWave Using Amazon S3
rails 上傳圖片超簡單
使用 Carrierwave 與 Figaro套件,在Heroku 部署 Rails 專案結合 AWS S3 存放上傳圖片

學無止盡,每天都要進步一點點!


上一篇
Day 28 - 重要的鑰匙要藏好
下一篇
Day 30 - 莫忘初衷
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言