Mawa Town

Mawaという人が作る小さな町でMawaTownです。技術と音楽が好き。

Python(Django)でAWS boto3を使う際のエラー```Unable to locate credentials```対応法

Django

Django

どんなにときにエラーが出るか

今までエラーが出なかったんです。それでついいつもどおり使っているとエラーが出てしまったので調べたところ・・・対応策がわかりました。まずは通例を提示します。

よくある例

import boto3

s3 = boto3.client('s3')

s3.upload_file(....続く

AWS Lambdaの場合はこれで動きました。 多分AWS内部で動くコードだから(クレデンシャル情報省いて大丈夫だったのか?!)

動かない場合

herokuのサーバーに上げると、直接AWSじゃないからか、Unable to locate credentialsエラーがでて、動きませんでした。

解決策

次のようにクレデンシャルキー情報を引数に入れると無事エラーなく動きました^^ ちなみにこれはDjangoのコード(くわしくはmodels.py)で動作確認済みです。

import boto3

s3 = boto3.client('s3',
        aws_access_key_id=***key***, #Djangoならsettingsから引っ張ってきたり、環境変数登録で隠せます
        aws_secret_access_key=***key***, #Djangoならsettingsから引っ張ってきたり、環境変数登録で隠せます
        region_name='****region***' #東京リージョンならap-northeast-1
        )

s3.upload_file(....続く

参考

inokara.hateblo.jp