0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSのS3に画像やstaticファイルをアップロードする方法

Posted at

AWSコンソールでS3を作成

  1. AWSのコンソールにログイン
  2. S3にアクセス
  3. バケットを作成をクリック
  4. バケット名を入れて、後はデフォルトの設定でバケットの作成をします。
  5. 作成されたバケットをクリックして詳細画面へ
  6. アクセス許可のタブを開きます
  7. Cross-Origin Resource Sharing (CORS)の中身を以下に編集します。
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "POST",
            "GET",
            "PUT"
        ],
        "AllowedOrigins": [
            "*"
        ]
    }
]

AWSコンソールでIAMユーザーの作成

次にS3を操作できる権限を持ったユーザーを作るためにIAMを使います。
image.png

ユーザー名とアクセスの種類の両方に✔して次のステップへ行きます。

image.png

既存のポリシーを直接アタッチからS3と検索してAmazonS3FulAccessにチェックを入れます。
後は、次のステップに進み続けてユーザーを作成します。

その際にACCESS_IDSECRET_KEY(重要)が出てくるのでそれを控えておいてください。
控えておかないと新しいユーザーを作成しなおさなければなりません。

必要なパッケージをインストール

$ pip install django-storages
$ pip install boto3

settings.pyの設定

INSTALLED_APPSにstoragesを追加します。

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # My apps
    'blog',
    'searches',
    # aws
    'storages', #追加します。
]

settings.pyの一番下で作成したS3バケットの設定を書きます。

settings.py
# S3 BUCKETS CONFIG
"""
AWS_ACCESS_KEY_ID = '***********' # Iamのuserid
AWS_SECRET_ACCESS_KEY = '**********' # Iamのuser key
AWS_STORAGE_BUCKET_NAME = 'renren-django-blog' #S3バケットの名前
AWS_S3_FILE_OVERWRITE = False #同じ名前のファイルを上書きするか?
AWS_DEFAULT_ACL = None # 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
"""

より細かい設定についてみたい方は公式ドキュメントをみてください。

実際にS3にアップロード
表示されない場合はinspectモードを起動(windowsならF12)し、ファイルのパスを調べる
python manage.py collectstaticで自動でAmazonに上げてくれる

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY等は機密情報として.envファイルに書きそれを参照するのが推奨されます。以下のサイトを参考にして設定してください。
参考サイト:【Django】環境変数を効率的に管理する「django-environ」の使い方

結論だけ言うとsettings.pyファイルが以下のようになります。

setting.py
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY') 
AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
 .env
AWS_ACCESS_KEY_ID=***********
AWS_SECRET_ACCESS_KEY=**********
AWS_STORAGE_BUCKET_NAME=**************

S3バケットへのアップロード

python manage.py collectstaticを実行することで、今現在ローカルのstaticフォルダにあるファイルが全てS3上にアップロードされます。
mediaフォルダに画像がある場合は最初だけ手動でアップロードする必要があります。

参考

公式ドキュメント
File Storage with AWS S3 Buckets Upload | Django (3.0) Crash Course Tutorials (pt 22)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?