Day 29 - 使用 AWS S3 服务

本来没有打算要写这个内容的,但是提到上传图片,好像不能不说一下云端储存,毕竟不能永远在本地端欣赏自己的档案、照片,总有一天还是会碰到上传的问题。而且朋友强烈推荐 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 存放上传图片

学无止尽,每天都要进步一点点!


<<:  以 GraphQL 查询 Neo4j 资料库

>>:  第41篇-尝试建立 java 环境并运行 helloworld

[Day21] Load Balancer

Load Balancer (负载平衡器) 与 Auto Scaling 都算是云端设备中非常重要的...

CSS微动画 - Loading来了!七彩霓虹灯

Q: 今天叫醒你的是什麽? A: 是迷糊中醒来後,看到草稿不见的震撼(✘﹏✘ა) 继上一篇 Loa...

Day16-Kubernetes 那些事 - Resource Quotas

前言 昨天的文章讲完 Deployment 以及 ReplicaSet 後相信大家应该对於如何产生更...

Day-15 FrameLayout

FrameLayout(帧布局) FrameLayout是布局当中最简单的一个, 在未设定的情况下,...

Day16:今天来聊一下如何使用njRAT RAT Trojan控制Windows电脑攻防

攻击者会使用Trojan horses(木马程序)来诱骗使用者在电脑上执行预先设计的操作, 一旦木马...