rails로 만든 앱의 프로덕션 환경의 이미지 저장 대상을 S3로 변경

4676 단어 S3AWS

개발 환경



Mac OS Catalina 10.15.7
루비 2.6계
rails 6.0계

프로덕션 환경



nginx 1.18.0
AWS(EC2, S3, ALB, Route53)

전제


  • capistrano의 자동 배포를 도입했습니다.
  • 무료 프레임 관계로 프로덕션 환경에만 S3을 도입합니다.
  • AWS에 등록되었습니다.

  • 버킷 만들기



    먼저 AWS에 로그인하고 헤더에서 서비스를 클릭합니다.
    나열된 서비스 이름 중에서 S3을 선택합시다.



    S3을 선택한 후 버킷 만들기를 클릭하여 버킷을 만듭니다.

    원하는 버킷 이름을 입력하고 지역을 '아시아 태평양(도쿄)'로 설정합니다.



    그런 다음 블록 공개 액세스의 버킷 설정을 합니다.
    다음과 같이 확인하십시오.
    맨 위의 "블록 공개 액세스 버킷 설정"을 선택 취소하면 다음 확인란을 선택할 수 있습니다.



    확인할 수 있으면 다른 것은 특별히 변경하지 않고 버킷을 만듭니다.

    버킷 정책 설정



    방금 만든 버킷을 클릭하여 사용 권한에서 버킷 정책을 편집합니다.



    버킷 정책에 다음을 붙여넣습니다.
    {
       "Version": "2012-10-17",
       "Id": "Policy1544152951996",
       "Statement": [
           {
               "Sid": "Stmt1544152948221",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "ユーザーのARN"
               },
               "Action": "s3:*",
               "Resource": "arn:aws:s3:::作成したバケット名"
           }
       ]
    }
    

    가능하면 변경사항 저장을 클릭합니다.

    aws-sdk-s3 도입



    여기에서 rails 쪽입니다.
    먼저 S3을 사용하는 데 필요한 Gemfile을 소개합니다.

    Gemfile에 다음을 추가
    gem "aws-sdk-s3", require: false
    
    #gemfile記述後
    bundle install
    

    production.rb 편집



    production.rb의 이미지 저장 대상을 amazon으로 변경합니다.

    config/environments/production.rb
    config.active_storage.service = :amazon
    

    storage.yml 편집



    strage.yml을 편집합니다. access_key_id와 secret_access_key는 이후 환경 변수로 설정됩니다.

    storage.yml
    local:
      service: Disk
      root: <%= Rails.root.join("storage") %>
    
    ## 以下を追記
    amazon:
      service: S3
      region: ap-northeast-1
      bucket: 作成した自身の「バケット名」を入力
      access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
      secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
    
    

    환경 변수 설정



    터미널에서 환경 변수를 설정합니다.
    이미 설정한 경우 날려 줘도 괜찮습니다.
    vim ~/.zshrc
    

    i를 눌러 인서트 모드로 전환한 후 다음을 추가
    export AWS_ACCESS_KEY_ID="ご自身のCSVファイルのAccess key ID"
    export AWS_SECRET_ACCESS_KEY="ご自身のCSVファイルのSecret access key"
    

    추기 후 esc 키로 인서트 모드를 종료한 후 :wq로 저장합시다.

    그런 다음 터미널에서 다음 명령을 입력합니다.
    source ~/.zshrc
    

    Heroku에 환경 변수 설정 (Heroku를 사용하는 경우)



    Heroku에 올리면 환경 변수를 추가해야합니다. (EC2에 배포하는 사람은 아마 이미 설정되어 있다고 생각합니다)
    # ターミナル
    % heroku config:set AWS_ACCESS_KEY_ID="自身のCSVファイルのAccess key ID"
    
    # ターミナル
    % heroku config:set AWS_SECRET_ACCESS_KEY="自身のCSVファイルのSecret access key"
    
    #ターミナル
    % git push heroku master
    

    EC2이면 다시 배포하면 S3에 이미지가 저장됩니다.
    이상입니다.

    좋은 웹페이지 즐겨찾기