対象者
AWS S3にpythonを用いてファイルをアップロードしたい方
EC2からS3にオブジェクトをアップロードしたい方
S3とは
AWS のストレージサービスです。要領は無制限で保存容量、アクセス数に合わせて課金されます。
正直、爆安です。詳しい料金は以下を参照ください
https://aws.amazon.com/jp/s3/pricing/
アップロード機能作成手順
ここからは、具体的にアップロード機能を作成するにはどういう手順を行えばいいかを記載します。
S3設定
AWSのS3の画面を開き下記の画像のオレンジのボタン、バケットを作成をクリックします。
また、作成したバケットを開き、アクセス許可をクリックします。
今回は、ウェブブラウザからS3の画像を直接参照することを想定して作成するため、不特定多数の方からS3のファイルを参照できる様に下記の様に設定します。
EC2の設定
EC2からS3に読み書きできる様にEC2にIAM roleを設定します。
IAM roleはユーザごとにつける権限とは異なりEC2の様なAWSのサービスに権限をつける際に使用します。
まずは、EC2に付与するためのIAM ロールを作成します。
AWSの画面のサービス検索でIAMと検索してください。
次に左のアクセス管理→ロールを選択してください。そして、下記のロールの作成ボタンをクリックします。
開いた画面のユースケースでEC2を選択後、次のステップをクリックしてください。
Attach アクセス権限ポリシー 画面が表示されます。検索ウィンドウでS3と記載し、AmazonS3FullAccessにチェックし、次のステップをクリックしてください。
次のタグの追加画面では何もせずに次のステップをクリックしてください。
最後にロール名に任意の名前を記載しロールの作成をクリックしてください。
ロールの作成が完了します。
次にAWS画面のサービスからEC2を検索してください。
表示されたインスタンス一覧からIAMロールを設定するインスタンス(S3にアクセスするインスタンス)にチェックを入れ、下記の画像の様にクリックし、IAMロールの変更を行います。
開いた画面で先ほど作成したIAMロールを選択し、保存をクリックし、設定完了です。
Pythonによる実装
pythonでS3にアクセスするためにまず、boto3をインストールします。
pip install boto3
インストール環境後、pythonでは下記の様に実装します。
まずは、boto3をimportします。
import boto3
次に、初期設定を行います。
s3 = boto3.resource('s3')
bucket_name = '作成したバケット名'
ファイルをアップロードします。
#file_nameにはS3にアップロードする際に付与するファイル名を指定します。
obj = s3.Object(bucket_name, file_name)
#ACL='public-read'はアップロードするオブジェクトに付与する権限です。
obj.put(ACL='public-read',Body=アップロードするファイルオブジェクト)
#公開時のオブジェクトのURLを取得
#このURLで対象のオブジェクトにアクセスできます。
location = boto3.client('s3').get_bucket_location(Bucket=bucket_name)['LocationConstraint']
object_url = "https://%s.s3-%s.amazonaws.com/%s" % (bucket_name,location, file_name)
以上でpythonの実装は完了になります。
ブラウザにS3の画像を表示したい場合は、
<img src="object_urlに格納したURL">
imgタグに対象の公開 URLを記載します。
簡単ですね。
S3使ってみてください。
今回は以上です。
コメントを書く