はじめに
Python を使って AWS S3 にファイルをアップロードしてみたいと思い、
boto3 ライブラリと .env ファイルを活用して安全にアクセスキーを管理しながら、
最小構成でアップロードスクリプトを作成してみました。
🎯 やりたいこと
• Python スクリプトから S3 にファイルをアップロード
• .env ファイルでキー管理を行い、セキュリティを確保
• S3 バケットに公開アクセスを許可し、アップロード後の URL を取得
🛠️ 使用技術
• macOS(Apple M1)
• Python 3.10
• boto3
• python-dotenv
• AWS IAMユーザー(アクセスキー管理用)
• S3(公開バケット)
📦 成果物の構成
aws-s3-practice/
├── .env
├── upload_to_s3.py
└── cat.jpg(アップロード対象ファイル)
✅ 実装コード
import os
import boto3
from dotenv import load_dotenv
# .envファイルを読み込む
load_dotenv()
# 環境変数からAWSキー情報を取得
ACCESS_KEY = os.getenv("AWS_ACCESS_KEY_ID")
SECRET_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
REGION = os.getenv("AWS_REGION")
BUCKET = os.getenv("S3_BUCKET_NAME")
# boto3クライアント作成
s3 = boto3.client(
"s3",
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
region_name=REGION
)
# アップロード関数
def upload_file(file_path, s3_key):
try:
s3.upload_file(
Filename=file_path,
Bucket=BUCKET,
Key=s3_key
)
print("✅ アップロード成功!")
print(f"🌐 URL: https://{BUCKET}.s3.amazonaws.com/{s3_key}")
except Exception as e:
print("❌ アップロード失敗:", e)
# 実行:ローカルのcat.jpgをアップロード
upload_file("cat.jpg", "cat.jpg")
🧠 注意点
問題 | 原因 | 解決策 |
---|---|---|
No such file or directory |
対象ファイルが存在しない |
cat.jpg を同じフォルダに置く |
セキュリティリスク | Root Access Key を使っていた | IAM ユーザーを作成してアクセスキーを再発行 |
🔐 セキュリティのポイント
• Root Key は絶対使わない
• .env を .gitignore に入れる
• 公開アクセスは「バケットポリシー」で設定する(ACL不要)
✍️ まとめ
AWS S3 の操作は GUI で簡単にできる一方で、コードから安全に操作しようとすると、意外と細かい設定や構成理解が必要になります。
boto3 を使うことで、クラウド操作をスクリプト化・自動化できるようになるのはとても大きなメリットだと感じました。
🔗 参考リンク