初めまして
私は、現在オリアプを製作し、herokuを使ってデプロイし、画像はAWS S3を使って保存することをしました。
今回は、AWSアカウント登録、IAMユーザー設定後からの備忘録になります。
S3を何故使うのか
- herokuでデプロイをし、再度デプロイすると画像が消えてしまう
- herokuの仕様で24時間に1回自動で再起動され消えてしまう
- インフラやクラウドについても理解を深めたい
以上の3点のことから「S3」を使うことを決めました!
保存先の作成(バケット作成)
①AWS 「S3」のホームページでバケットを作成します。
②バケット名「任意でおk」、リージョン「東京を選択」
アクセス許可ですが、
③パブリックのアクセスを全てブロックのチェックを外します。
④新規のパブリックバケットポリシー〜、あらゆるパブリックバケットポリシ〜のチェックを外す。
⑤そうすると、下の欄に「警告マークとともにチェック欄」が出てくるのでチェックを入れます。
⑥バケット作成をクリック
この作業によってファイルのアップロードができる様になります!
バケットポリシーの設定をします
①AWS 「S3」のホームページで先ほど作成したバケットを選択します。
②アクセス許可をクリックします。
③画面を少しスクロールすると「バケットポリシー」という画面が出てくるので、「編集する」をクリックします。
④コードブロック内に下記を入力します。
{
"Version": "2012-10-17",
"Id": "Policy1544152951996",
"Statement": [
{
"Sid": "Stmt1544152948221",
"Effect": "Allow",
"Principal": {
"AWS": "ご自身のユーザーのARN"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::作成したバケット名"
}
]
}
⑤変更の保存をクリックすると完了です。
S3の設定
Ruby on rails Gemfileの一番下に
gem "aws-sdk-s3", require: false
上記を追記し、bundle installをします。
ローカル環境で画像の保存先をS3に変更します。
config/environments/development.rb
config.active_storage.service = :local
↓変更する
config.active_storage.service = :amazon
この作業により、画像の指定先がlocalからS3へ変更されます。
storage.ymlにバケット名とリージョン名を記述します。
config/storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
local:
service: Disk
root: <%= Rails.root.join("storage") %>
amazon:
service: S3
region: ap-northeast-1 ← 日本に住んでる方はこちらを選択しているはずです
bucket: ←は自分のバケット名を記入
access_key_id: <%= S3のアクセスキー環境変数 %>
secret_access_key: <%= S3のシークレットアクセスキー環境変数] %>
気をつけていただきたいのは、必ずをアクセスキー、シークレットキーは環境変数にしてからデプロイする様にしてください。
秘密情報の漏洩になるのでご注意を!
本番環境で画像の保存先をS3します。
config/environments/production.rb
config.active_storage.service = :local
↓に変更
config.active_storage.servise = :amazon
ローカルの時と同じです!
herokuでも環境変数を使える様にします。
ターミナルでアクセスキー、シークレットキーをherokuに上げます。
heroku config:set 変数名="アクセスキーの値"
heroku config:set 変数名="シークレットキーの値"
これで本番環境でも使用することができます。
セキュリティ対策として
「git-secrets」というツールを使用して、誤ってAWSの秘密情報をpushしない様設定することもできます。
ホームディレクトリにて
brew install git-secrets
開発中のアプリにて
git secrets --install ←これでgit-secretsを使用できます
git secrets --register-aws --global ←AWS関連の秘密情報を一括で設定できます。
またGitHub Desktopを使用している場合
GitHub Desktopにも適応されます
sudo cp /usr/local/bin/git-secrets /Applications/GitHub\ Desktop.app/Contents/Resources/app/git/bin/git-secrets
今後全てのリポジトリに適応したい場合
git secrets --install ~/.git-templates/git-secrets
git config --global init.templatedir '~/.git-templates/git-secrets'
最後に
初めてクラウドを使ってみた感想は、意外と簡単に実装することができました。
複雑だなと感じた点は、セキュリティ面です。
今後開発していく上、セキュリティやクラウド、インフラは絶対に必要な知識の為、実装をしていく中でどんどん吸収していきたいと思います。
読んでいただきありがとうございました!