ActiveStorage×GCSで画像アップロード
この記事について
ActiveStorageでアップロードした画像をGCSに保存する手順をメモしたものです。 ActiveStorageを使った開発環境での画像の保存は既に出来ているものとします。
参考にした記事
[Rails5.2] Active Storageを使ってGCSに画像を保存・取得する | by Kazuki Shibata | VISITS TechBlog | Medium
アジェンダ
バケットを作成
バケットとは?
オブジェクトを格納する箱みたなイメージ。
オブジェクトとは?
バケットに格納する画像ファイルやテキストファイル。
バケットを作成する
バケットを作成を押下
名前、保存場所、ストレージクラスを決定する
オブジェクトへのアクセスを制御する方法を選択する
- きめ細かい管理
均一
Cloud IAM のみを使用して権限を管理できます。
- 公式では均一が推奨されている。
個人を特定できる情報などの機密データを含むオブジェクトがある場合は、権限の管理を容易にするために、均一アクセス権を有効にしたバケットにそのようなデータを保管することをおすすめします。
- 「あれ、このファイルだけ誰でもアクセス可能になってんじゃん!!」ってならないように均一をお勧めしていると理解した↑
- きめ細かい管理
詳細設定
- ここは特に変更しない
サービスアカウントを作成
サービスアカウントとは?
- アプリケーションからGCPのリソースへアクセスを制御するためのアカウント。
- 今回で言うと、GCE上にデプロイしているアプリケーションからGCSにアクセスし、オブジェクトの保存や取得を行うためのアカウント。
サービスアカウントを作成する
IAMと管理の中のサービスアカウントを押下
アカウント名の入力
- サービスアカウントIDはアカウント名を入力すると自動で入力される
ロールを選択
- 画像の登録・閲覧・削除がしたいためストレージ管理者を選択
ユーザーへのアクセス権の付与(特に何もしない)
権限を編集する
バケットにアクセスするための権限を編集します
メンバーを追加を押下
先程作成したサービスアカウントを追加
これでバケットとそのバケットへのアクセス権を持つアカウントを作成する事が出来ました
サービスアカウントにキーを設定
サービスアカウントのキーとは?
- そのサービスアカウントとしてリソースにアクセスするための情報
- 今回でいうと、先程作成したサービスアカウントとしてGCSにアクセスするための情報
サービスアカウントの詳細から鍵を追加を押下
新しい鍵を追加を選択しJSON形式でダウンロードする
ローカルにサービスアカウントのキー情報がダウンロードされる。 サービスアカウントのキーの設定は完了。
ActiveStorageの設定
先程ダウンロードしたjsonキーをconfig配下に保存
- キーの中身はこんな感じ
- キーは必ずgitignoreに追加する等し、外部に漏れないようにする
storage.ymlの設定
google: service: GCS project: your_project credentials: <%= Rails.root.join("config/XXX.json") %> bucket: XXXXX
capistranoの設定
設定の変更
今回のキーファイルはgit管理対象外とするため、capistranoのlinked_files
に追加する
set :linked_files, fetch(:linked_files, []).push(・・・, 'config/XXXX.json')
shared配下にキーファイルを配置する
- linked_filesに追加したため、shared配下にキーファイルを配置
この状態でデプロイすればgcsへのアクセスが可能になる