86
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

はじめに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
86
Help us understand the problem. What are the problem?