77688


### 環境

ruby 2.6.5  
rails 6  
MySQL  
M1チップ搭載macOS

### 解決したいこと

Dockerコンテナで既存アプリを起動しましたが投稿がうまくいかず、画像が表示できません。  
AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY  
AWS_REGION  
をdocker-compose.ymlに記述しましたが、エラーになりました。

secret_access_key: AWS_SECRET_ACCESS_KEY  
secret_access_key=AWS_SECRET_ACCESS_KEY  
secret_access_key='AWS_SECRET_ACCESS_KEY'  
secret_access_key : ${AWS_SECRET_ACCESS_KEY}  
色々書き方を試しましたが未だにうまくいきません。  
わかる方がいらしたら教えてください！  
よろしくお願いします。

### 発生している問題・エラー

[code]

    Aws::Sigv4::Errors::MissingCredentialsError in Items#index
    
    Showing /fridge_app/app/views/items/_item.html.erb where line #5 raised:
    
    Cannot load `Rails.config.active_storage.service`: 
    missing credentials, provide credentials with one of the following options:
     - :access_key_id and :secret_access_key
     - :credentials
     - :credentials_provider
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/21nUP.png)](https://i.stack.imgur.com/21nUP.png)

### 該当するソースコード

**Dockerfile**

[code]

    FROM ruby:2.6.5
    
    RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && apt-get install -y yarn
    
    RUN apt-get update -qq && apt-get install -y nodejs yarn
    RUN mkdir /fridge_app
    WORKDIR /fridge_app
    COPY Gemfile Gemfile.lock /fridge_app/
    ENV BUNDLER_VERSION 2.1.4
    RUN gem update --system \
        && gem install bundler -v $BUNDLER_VERSION \
        && bundle install -j 4
    COPY . /fridge_app
    
    RUN yarn install --check-files
    RUN bundle exec rails webpacker:install
    
    ENV PATH $PATH:/usr/local/src/bin
    
    COPY entrypoint.sh /usr/bin/
    RUN chmod +x /usr/bin/entrypoint.sh
    ENTRYPOINT ["entrypoint.sh"]
    EXPOSE 3000
    
    CMD ["rails", "server", "-b", "0.0.0.0"]
    
[/code]

**docker-compose.yml**

[code]

    version: '3'
    services:
      db:
        image: mysql:5.6
        platform: linux/x86_64
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: root
        ports:
          - "3306:3306"
        volumes:
          - ./tmp/db:/var/lib/mysql
    
      web:
        build: .
        environment:
          region: ap-northeast-1
          access_key_id: AWS_ACCESS_KEY_ID
          secret_access_key: AWS_SECRET_ACCESS_KEY
        command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
        volumes:
          - .:/fridge_app
        ports:
          - "3000:3000"
        depends_on:
          - db
    
    
[/code]


CC BY-SA 4.0
2021-06-21T14:50:53.530
77687
2021-06-22T04:01:23.953
2021-06-22T04:01:23.953
3068
44865
question
docker amazon-s3
Dockerコンテナで既存アプリを起動しましたが投稿がうまくいかず、画像が表示できません。


`Aws::Sigv4::Errors::MissingCredentialsError` は環境変数などで AWS
のクレデンシャルが与えられていないときに出るエラーです。

おそらくローカルで動かす際は環境変数もしくは `~/.aws/credentials`
に設定がされており動いていたものが、コンテナの上で動かす際は一切設定されていないのでエラーとなったのではないでしょうか。

`AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` を適切に取得し、`AWS_REGION`
と共に設定するようにしてみてください。この際 `AWS_SECRET_ACCESS_KEY` は秘匿値であることにご注意ください。

更に、もしこの後このアプリを AWS 上で動かすのであれば、IAM Role をアタッチしてクレデンシャルを生の値では扱わないのがお勧めです。

公式ドキュメントはこちらです: <https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/v3/developer-
guide/setup-config.html>


CC BY-SA 4.0
2021-06-21T15:09:12.413
77688
2021-06-21T15:09:12.413
19110
77687
answer