APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Python(Boto3)を利用してAmazon S3にファイルをアップロードする【前編】

目次

はじめに

こんにちは、クラウド事業部の丸山です。

プログラムやターミナルなどでデータ操作を行った後、そのままデータをクラウドにアップロードできると非常に便利ですよね。
この前編では、Pythonを使ってローカル環境からAmazon S3にデータをアップロードする方法を紹介します。
これにより、データ管理が簡単になり、手間を減らすことができます。

今回は前編として、シンプルなデータのアップロード方法を試してみました。
後編ではより実践的な利用例に合わせて、個人利用の際に最適なコスト効率の良いDB運用方法を提案します。

どんなひとに読んで欲しい

  • AWSに興味がある方
  • Pythonを使ってAWSと連携する方法に興味がある方
  • 個人利用で冗長性のあるDBデータを扱いたいが、コストを抑えたい方

関連記事

aws.amazon.com

boto3.amazonaws.com

Boto3とは

Boto3とはPythonで利用できるAWS SDKライブラリです。
こちらのライブラリを利用することで、PythonからAWSの各種サービスの連携が容易にできます。

前提

・ Python3をインストール済みの環境で実施。 (記事作成時バージョン3.12.2)
今回は簡易的なテストとするためハードコーディングしたアクセスキーで実装しますが、
AWS CLIのプロファイル設定を利用したセキュアなアクセスも可能です。(後編で実施)

手順

IAMユーザの作成

テスト用のIAMユーザを作成します。
※ここではテスト用のためAmazonS3FullAccessを付与していますが、必要に応じて許可設定を見直す必要があります。

アクセスキーの作成

テスト用のアクセスキーを作成します。

今回はAWS CLI用としています。

S3バケットの作成

テスト用のS3バケットを作成します。
※ここではテスト用のためデフォルト設定としておりますが、必要に応じて許可設定を見直す必要があります。

作成直後のため、何もデータがない状態になります。

S3アップロード用のコード作成

Boto3ライブラリの準備

Boto3ライブラリがインストールされていない場合は、pipコマンドでインストールします。

pip install boto3

※設定環境によってはpip3で実行する必要がある場合があります。

今回実行したコード

import boto3

def upload_to_s3(file_name, bucket, object_name=None):
    """
    ファイルをS3バケットにアップロードする関数

    :param file_name: アップロードするファイル
    :param bucket: アップロード先のS3バケット
    :param object_name: S3オブジェクト名。指定しない場合はfile_nameが使用される
    :return: アップロードが成功すればTrue、失敗すればFalse
    """

    if object_name is None:
        object_name = file_name

    # 直接キーを使用してS3クライアントを作成
    s3_client = boto3.client(
        's3',
        aws_access_key_id='YOUR_ACCESS_KEY', #実際に取得したアクセスキーを入力する
        aws_secret_access_key='YOUR_SECRET_KEY', #実際に取得したアクセスキーを入力する
    )

    try:
        s3_client.upload_file(file_name, bucket, object_name)
        print(f"Successfully uploaded {file_name} to {bucket}/{object_name}")
    except Exception as e:
        print(f"S3 Upload Error: {e}")
        return False
    return True

def main():
    if upload_to_s3('sample.txt', 'db-upload-bucket'):
        print("Upload succeeded.")
    else:
        print("Upload failed.")


if __name__ == "__main__":
    main()

実行画面

(.venv) User@MachineName Directory % python3 /Users/user/Directory/sample_only_upload.py
Successfully uploaded sample.txt to db-upload-bucket/sample.txt
Upload succeeded.
(.venv) User@MachineName Directory % 

上記コードを実行した結果、以下の様にファイルがアップロードされました。

おわりに

とても簡単な流れですが、これだけの手順でプログラム上からAmazon S3にファイルをアップロードすることが可能になります。
次回は後編として、簡単なsqlite3の利用方法に加えて、実際のDBデータをAmazon S3にアップロードする方法を紹介します。
次回もお楽しみに!

お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。

その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp

https://www.ap-com.co.jp/service/utilize-aws/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp