もくじ
- 【AWS】S3でBucketを作成
- 【AWS】IAMでポリシーを作成
- 【AWS】IAMでユーザーを作成
- 【Rails】S3関連の設定を追加・変更
1. 【AWS】S3でBucketを作成
ファイルを格納するS3 Bucketを作成します。
設定した「バケット名」はこのあとの手順(IAMポリシー作成、ActiveStorage設定)でも利用するので、メモなどに記録しておきます
2. 【AWS】IAMでポリシーを作成
作成したS3 Bucketへの読み書きが設定されたポリシーを作成します。
補足:既に存在しているポリシー、ユーザーを利用する場合はこの手順はスキップ可能です
入力するJSONは以下のフォーマットになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<バケット名>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::<バケット名>/*"]
}
]
}
参考:Amazon S3: 特定の S3 バケットへの読み取りと書き込みアクセスを許可する - AWS Identity and Access Management
「ポリシー名」はこのあとの手順(IAMユーザー作成)でも利用するので、メモなどに記録しておきます。
3. 【AWS】IAMでユーザーを作成
Railsアプリで利用するユーザーを作成します。
ユーザーを作成する手順の中で事前に用意したポリシーをアタッチします。
補足:既に存在しているポリシー、ユーザーを利用する場合はこの手順はスキップ可能です
補足:事前に作成しておいた「ポリシー」を選択します。
「アクセスキーID」「シークレットアクセスキー」はこのあとの手順(ActiveStorage設定)でも利用するので、メモなどに記録しておきます。
4. 【Rails】S3関連の設定を追加・変更
ActiveStorageから事前に作成したS3 Bucketへファイルを保存するように設定を追加・変更します。
Gemfile
RailsからS3の機能を利用するためにgemを追加します。
gem 'aws-sdk-s3'
config/storage.yml
amazon
の設定はデフォルトではコメントアウトされているので、コメントアウトを外して、「リージョン」と「バケット名」を設定します。
補足
regionにはS3 Bucketを作成したリージョン名を指定する
アジアパシフィック(東京)で作成した場合は、ap-northeast-1
となる
bucketにはS3の「バケット名」を指定する
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: ap-northeast-1
bucket: <バケット名>
credentials.yml.enc
credentials.yml.encに「アクセスキーID」「シークレットアクセスキー」を設定します。
# credentials.yml.enをviで開く
$ EDITOR="vi" bin/rails credentials:edit
aws
の設定はデフォルトではコメントアウトされているので、コメントアウトを外して、access_key_id
とsecret_access_key
を設定します。
aws:
access_key_id: <アクセスキーID>
secret_access_key: <シークレットアクセスキー>
config/environments/xxx.rb
デフォルトではファイルの保存先にローカル(:local
)が指定されているので、:amazon
に変更します。
config.active_storage.service = :amazon
実装&動作確認
あとはローカルにファイルを保存するときと同じようにActiveStorageを利用した機能を実装するだけで、ファイルがS3へ保存されるようにります。