LoginSignup
93

More than 5 years have passed since last update.

boto3を使ってS3をごにょごにょする

Last updated at Posted at 2017-03-02

はじめに

IoT関係の案件で、ゲートウェイ(以下GW)からS3にあるファイルをダウンロードしたり、アップロードしたりする必要があったので、python(2.7)とboto3(AWS SDK for python)を使って実装してみました。その際の手順を備忘録的に残しておこうと思います。

最終目標

  1. バケット内のファイルをダウンロードできるようになる
  2. 特定のディレクトリへファイルをアップロードできるようになる

さあ、はじめようか

boto3のインストール

GWにssh接続でログインして、pipでboto3をインストールします。(GWはpython2.7 pipはインストール済み)

sudo pip install boto3

特定のバージョンを指定する場合は以下のようにインストールします。

sudo pip install boto3==1.0.0

IAM作成

boto3を利用する際に、IAMにてポリシーを設定する必要があります。今回はS3FullAccessを設定したIAMユーザーを作成しました。
必要に応じて読み込みのみにしたり、アクセスできるバケットを絞ったりなど必要最低限のポリシーを設定するようにしましょう。
※この手順は省略します

AWSCLI設定

先ほど作成したIAMユーザーのアクセスキー情報を設定します。

AWSCLIのインストール

sudo pip install awscli

Configure設定

aws configure
AWS Access Key ID: xxxxxxxxxxxxxxxxx
AWS Secret Access Key: xxxxxxxxxxxxxxxxx
Default region name: ap-northeast-1
Default output format:

これで設定完了です。設定した内容は、「~/.aws/credentials」と「~/.aws/config」で確認することができます。

python内でboto3をimportする

bote3のimportしてS3のファイルをごにょごにょするためには、下記のように書き始めます。

boto3_test.py
# -*- coding: utf-8 -*-

import boto3

s3 = boto3.resource('s3')

ほかのサービスを利用する場合は下記のように書きます。(DynamoDBの例)

boto3_test.py
# -*- coding: utf-8 -*-

import boto3

# S3
s3 = boto3.resource('s3')

# DynamoDB
dynamo = bot3.resource('dynamodb')

実際にS3のファイルをごにょごにょする

S3からのダウンロード

download_file()を使用します。バケット名hoge内のfuga.txtをダウンロードする場合は

boto3_test.py
# -*- coding: utf-8 -*-

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket('hoge')
bucket.download_file('fuga.txt', 'fuga.txt')

バケットは同じで、フォルダhogehoge内のfuga.txtをダウンロードする場合は

boto3_test.py
#---省略---

bucket = s3.Bucket('hoge')
bucket.download_file('hogehoge/fuga.txt', 'fuga.txt')

S3へのアップロード

upload_file()を使用します。バケット名hoge内にfuga.txtをアップロードする場合は

boto3_test.py
#---省略---

bucket = s3.Bucket('hoge')
bucket.upload_file('fuga.txt', 'fuga.txt')

バケットは同じで、フォルダhogehoge内にfuga.txtをアップロードする場合は

boto3_test.py
#---省略---

bucket = s3.Bucket('hoge')
bucket.upload_file('fuga.txt', 'hogehoge/fuga.txt')

これでS3内のファイルをダウンロードしたり、アップロードすることができるようになりました。
ちなみにバケット内の各オブジェクト情報を表示させるのは

boto3_test.py
#---省略---

bucket = s3.Bucket('hoge')
print bucket.name

で一覧が表示されます。

最後に

boto3を使う以前にpython自体あまり触れたことがなかったので少し苦戦してしまいましたが、公式ドキュメントがかなり整っていたので助かりました。というか英語に対する拒否反応を示さない方は公式ドキュメントを読んでいただいたほうがいいと思います。汗

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
93