[python3]超簡単boto3を利用してs3にファイルアップロードする

AWS s3

前提条件

・AWSのec2を利用している人
・python3をそこそこ使ったことがある人
AWSのec2とpythonを利用しますので上記条件がマストです。

【下準備】 AWSでアクセスキーとシークレットアクセスキーを取得する

boto3を利用するためにはアクセスキーとシークレットアクセスキーが必要です。

まずはアクセスキーとシークレットアクセスキーを取得方法を説明します。
① [I AM Management Console] ② サイドバーから[ユーザー]を選択し[ユーザーの追加]をクリック
③ お好きなユーザー名を入力して
プログラムによるアクセス
AWS API、CLI、SDK などの開発ツールの アクセスキー ID と シークレットアクセスキー を有効にします。
にだけチェックします。

④ [既存のポリシーを直接アタッチ]を選択
⑤ s3で検索で検索して[AmazonS3FullAccess]にチェックして[次のステップ:確認]へ
⑥ ユーザーの作成
⑦ アクセスキーとシークレットアクセスキーを取得することができます。

【下準備】 AWS CLIを使ってアクセスキーとシークレットアクセスキーを設定する

① pipを使用して[AWS CLI]をインストールします。
sudo pip install awscli

② AWS CLIの設定をします。
aws configure

AWS Access Key ID [None]: アクセスキーを入力してEnter
AWS Secret Access Key [None]: シークレットアクセスキーを入力してEnter
Default region name [None]: ap-northeast-1 Tokyoリージョンは「ap-northeast-1」です。
Default output format [None]: json

【下準備】 S3の設定

① AWSマネージメントコンソールで「s3」で検索します。
② [S3 Management Console]を選択して[パケットを作成する]でパケット作成します。
③ パケット名[例:cdn.hoge.com] リージョン[例:アジアパシフィック(東京)]を設定して[次へ] ④ プロパティの設定は飛ばして[次へ] ⑤  ユーザを管理でとりあえず読み書きアクセス許可をすべてチェックして[次へ]で[パケット作成]します。

【たったこれだけ】s3にboto3を利用してファイルアップロードする

① ec2にアクセスします。
sudo pip intstall boto3でboto3をインストールします。
② 適当な場所(どこでもいいので)でhoge.txtを作成してください。
③ 下記内容のファイルを作成します。(test.py)

ec2の[hoge.txt]というファイルをs3の[cdn.hoge.com]パケットに[fuga.txt]という名前で保存する意味を持っています。
python3 test.py実行します。
⑤ [S3 Management Console]の保存先のパケットを選択して[概要]を見るとファイルがアップロードされていることを確認できます。

上記を試してもs3にファイルがアップロードされない?【解決方法】

エラーもでなくファイルがアップロードされていないようでしたら、
[S3 Management Console][概要]リージョン名の隣に更新マークがあるので押してみましょう。
ファイルが表示されると思います。これを知らなくて結構焦りました。。

そのほかでs3にファイルアップロード出来ない場合は
下記部分を見直すと良いと思います。

・[I AM]のアクセス権限の確認
・パケット名の確認(aws s3 lsで作成したパケット名を確認することができます)
・送るファイルの権限とパスの確認
・アクセスキーやシークレットアクセスキーの確認

s3のおおよその料金

・s3はなんとアップロードは無料です。
・保存する容量(ストレージ)に応じて課金されます。
・データ転送(送信)の容量によって課金されます。

ストレージの価格はかなりやすいと思います。
s3 データ・ストレージ料金 東京

参照 https://aws.amazon.com/jp/s3/pricing/

ポイントはデータ転送量ですね!!

CDN用途で使ったとして、キャッシュとか考えずに適当に計算してみると↓こんな感じ。
※2014/07/04に東京リージョンで計算した値です(前の価格覚えてないけど消費税UPで変わったかもしれないので再計算)。
※2014/12/01にAWS初のデータ転送量値下げキタ!後で再計算予定だけどとりあえず下の表の転送料金部分を25%OFFくらいで見ておけばOK!

GETリクエスト数 平均ファイルサイズ データ転送量 転送料金 リクエスト料金 合計料金
3千万(100万/日) 1KB 28.6GB $5 .55 $11 .10 $16 .65
3千万(100万/日) 1.95KB 55.8GB $11 .01 $11 .10 $22 .11
3千万(100万/日) 50KB 1.4TB $287 .33 $11 .10 $298 .43
3千万(100万/日) 100KB 2.8TB $574 .86 $11 .10 $585 .96
3千万(100万/日) 1MB 28.6TB $5,068 .03 $11 .10 $5,080 .13
3億(1千万/日) 1KB 286.1GB $57 .31 $111 .00 $168 .31
3億(1千万/日) 1.95KB 557.9GB $111 .94 $111 .10 $222 .94
3億(1千万/日) 50KB 14.0TB $2700 .33 $111 .10 $2,811 .33
3億(1千万/日) 100KB 27.9TB $4,960 .54 $111 .10 $5,071 .54
3億(1千万/日) 1MB 286.1TB $40,258 .35 $111 .10 $40,369 .35
30億(1億/日) 1KB 2.8TB $574 .86 $1,111 .00 $1,684 .86
30億(1億/日) 1.95KB 5.4TB $1,121 .18 $1,111 .00 $2.231 .18
30億(1億/日) 50KB 139.7TB $21,113 .33 $1,111 .00 $22.223 .33
30億(1億/日) 100KB 279.4TB $39,386 .31 $1,111 .00 $40,496 .31
30億(1億/日) 1MB 3.1PB お問い合わせ $1,111 .00 お問い合わせ

参照:S3の料金体系が分かりにくいと聞かれたので纏めた