Rails 앱에서 이미지 저장 대상을 S3으로 변경합니다. 그 1

4369 단어 S3RailsAWS

소개



이미지를 저장하는 기능을 가진 앱의 경우 앱 디렉토리에 이미지가 저장되었습니다.
이번 기사에서는 이미지의 저장처를 S3로 변경해 보겠습니다.

버킷 만들기



버킷은 S3에서 이미지가 저장되는 곳입니다. 먼저 버킷이라는 것을 만듭니다.
먼저 AWS에 액세스하고 서비스에서 S3을 선택합니다.

전환 대상에서 버킷을 만듭니다.

버킷의 이름을 입력합니다. 이 이름은 고유해야 하므로 앱 이름 + 숫자와 같은 이름을 추천합니다.

이 화면은 편집 불필요하므로 "다음"을 누르십시오.

다음 화면에서 빨간색 테두리 없음 확인란을 선택합니다.

버킷 만들기를 클릭하면 완성입니다!


IAM 사용자



AmazonS3FullAccess 권한을 부여한 IAM 사용자의 ARN을 확보해 둡시다.
아래 이미지의 빨간색 테두리를 클릭하면 얻을 수 있습니다.


버킷 정책 설정



이어서 버킷 정책 설정입니다.
방금 만든 버킷을 클릭하여 정책 설정 화면으로 이동합니다.


빨간색 테두리에 버킷 정책을 입력합니다. 내용은 아래 코드를 참고하십시오.

{
    "Version": "2012-10-17",
    "Id": "Policy1544152951996",
    "Statement": [
        {
            "Sid": "Stmt1544152948221",
            "Effect": "Allow",
            "Principal": {
                "AWS": "ユーザーのARN"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::バケット名"
        }
    ]
}

이것으로 버킷 관련 설정이 완료됩니다.

다양한 설정 파일 수정



fog-aws를 설치하므로 Gemfile에 "gem 'fog-aws'"를 추가하여 설치합시다.
개발, 테스트, 프로덕션 환경 모두 사용할 수 있도록 group ~ end로 둘러싸여 있지 않은 부분에 추가합니다.
~中略〜
gem 'fog-aws' 

image_uploader.rb에서 파일 업로드에 fog를 지정합니다.
아래와 같이 쓰면 프로덕션 환경과 로컬 환경에서 업로드 방법을 구분할 수 있습니다.
  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

다음은 carrierwave.rb라는 파일을 만들고 fog 업로드 대상을 설정합니다.
carrierwave.rb는 config/initializers 바로 아래에 작성하십시오.
여기서도 if 문으로 프로덕션 환경의 경우와 로컬 환경의 경우에서 처리를 나누고 있습니다.
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
      aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
      region: 'ap-northeast-1'
    }

    config.fog_directory  = 'バケット名'
    config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名'
  else
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end

일단 여기까지



조만간 계속을 씁니다.

7/27 업데이트
계속을 썼습니다!
Rails 앱에서 이미지 저장 대상을 S3으로 변경합니다. 그 2

좋은 웹페이지 즐겨찾기