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】AWS Simple Storage Service をpython で

Last updated at Posted at 2021-07-04

はじめに

これからAWSで使ったシステム構築を行うことになりそうです。(^^)/
そこでpython で端末からstorage に直接に、(WEBを通さずに)ファイルをやり取りできるか調査したので、そのまとめメモです。

GCPとAWS

そもそも、おじさんはGCP で Google Cloud Storage を使ってきました。ユーザから見ると、AWS S3はCloud Storage とほとんど同じ感じがします。
GCPの解説ページでは、分散オブジェクト ストレージでAWSとの比較を紹介しています。

  • object (blob)としてデータを保存する 分散object storage である
  • ファイルとmetadata でobject を構成。key value に対応する。
  • オブジェクトのkey はファイルパスのようにする (e.g., foo/bar.txt)
  • bucket にobject を入れて保存する

違いは権限の管理、課金方法にあるようです。今回の実装に関係する認証関係の設定は以下の通りです。

  • GCPでは、私は担当サービス用のユーザをIAMで作り、そのユーザkey を使用しています。ユーザに対して bucket の権限を設定します。端末やサーバでは、ユーザのkey を用いて(ユーザの権限で)storage にアクセスします。
  • AWSでは、まだ始めたばかりですが、IAMで作成した作業用ユーザに対して S3やbucket へのアクセスを設定するようです。端末では、アクセスIDとそれに対応するシークレット・アクセス・キーを指定しました。

Storage の操作方法

コンソール(ブラウザ経由)で操作する方法以外に、実際に使うには、

の2つの方法があるようです。

作業内容

コンソールでの動作確認

これはチュートリアルに書いてある通りにできました。bucket を作り、ファイルをupload/download する操作は、ブラウザから行えます。Google と同じ。

Google と違ったのは、bucket name に制約があることです。bucket を作る機会は少ないかもしれないので、プログラムでなくここで操作しても良いかも。使えない文字列だとすぐに教えてくれます。

AWS SDKの用意

AWS CLI

AWS CLIをインストールします。GCPのgcloud みたいなもののイメージです。
AWSのページに書かれている通り、Linux環境(Windows ノートPCで WSL2)に下記でインストールできました。割と時間がかかりました。

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

こんな感じになりました。

$ aws --version
aws-cli/2.2.16 Python/3.8.8 Linux/5.4.72-microsoft-standard-WSL2 exe/x86_64.ubuntu.20 prompt/off

AWS SDK for python (boto3)

boto3 というのをpipするでけでした。

$ python -m pip install boto3

Access ID、それに対応する Secret Access Key をIAMで発行しましょう。これをセットします。

$ aws configure

でインタラクティブに入力しました。以下にあるファイルに設定が書かれるようです。

/home/user0001/.aws/
├── config
└── credentials

コードを動かす

これもチュートリアルにとおりで、何事もありませんでした。

まず、アクセスIDとシークレットアクセスキーは設定してある状態です。

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************R7UK shared-credentials-file
secret_key     ****************/OCE shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config

以下で不通に作成したbucket のリストを表示できました。

import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
     print(bucket.name)

ファイルのupload も問題なくできました。

data = open('test.txt', 'rb')
ret = s3.Bucket('xxxx-yyyyy-bucket-20210704').put_object(Key='test.txt', Body=data)
print(ret)

s3.Object(bucket_name='xxxx-yyyyy-bucket-20210704', key='test.txt') と表示されました。コンソール(ブラウザ)でbucket を除くと、確かにファイルがupload されていました。

まとめ

AWS の分散object storageにpython スクリプトでファイルをアップロードすることができた。今後考えなければいけないのは、

  • 複数の端末で実行するとき、アクセスキーをどうするのか。複製はしない方がよいとなると、それぞれ作るのかな。それらをdeploy するときにはどうしたらよいのだろう。きっとノウハウがあるんだろうな。
  • 今回はAWS CLIで access IDの設定をしたが、プログラム内で行いたい。(AWS CLI無しで動かしたい)
  • REST APIを試す。結局、RestAPIがプログラミング言語に依存せず、最強ではないかと思う。

とまぁ、いろいろあるが、とりあえず、python でプロト実装すると思います。
以上、おじさんメモでした。
(2021/07/04)

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?