🤖

[Python]boto3でAWSを操作する(S3, DynamoDB, Lambda)

2024/04/23に公開

はじめに

副業でPythonを使用してAWSを操作する方法を学んだので、書いていきます。

boto3をインストール

Pythonを使用してAWSを操作するには「boto3」ライブラリをインストールして使用します。

まずは、以下のコマンドでboto3をインストールします。

pip install boto3

次にファイルの先頭でboto3をインポートします。

import boto3

これでboto3を使用する準備は完了です。

サンプルコード

今回は、副業で実際に実装したS3、DynamoDB、Lambda(関数を呼び出す)についてのサンプルコードを書いていきます。
※Codespacesのコンテナ作成時にAWS CLIで、AWSにはログインしている想定です。

S3

S3のオブジェクトを操作するサンプルコードを書きます。
以下は、あるバケットのオブジェクトの一覧を取得するコードです。

client = boto3.client('s3')

# バケット名を指定
bucket_name = 'your-bucket-name'

# バケット内のオブジェクト一覧を取得
response = s3.list_objects_v2(Bucket=bucket_name)
objects = response.get('Contents', [])

for obj in objects:
    print(f"- {obj['Key']}")
else:
    print(f"{bucket_name} バケットにオブジェクトはありません。")

このコードは、「list_objects_v2」で指定したバケットの辞書から「Contents」というキーを指定して、その値を取得しています。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html

DynamoDB

S3を操作するサンプルコードは以下になります。

client = boto3.client('dynamodb')


# 更新対象のテーブル名
table_name = 'sample_table'

# テーブルの取得
table = dynamodb.Table(table_name)

# 更新するアイテムの主キー
primary_key = {
    'user_id': 'value'
}

# 更新するデータ
update_expression = 'SET attribute1 = :val1, attribute2 = :val2'
expression_attribute_values = {
    ':val1': 'new_value1',
    ':val2': 'new_value2'
}

# 更新処理の実行
response = table.update_item(
    Key=primary_key,
    UpdateExpression=update_expression,
    ExpressionAttributeValues=expression_attribute_values,
    ReturnValues='UPDATED_NEW'  # 更新後の値を返す
)

# 更新後のアイテムを出力
print("Updated Item:", response)

こちらのコードは、「sample_table」という名前のテーブルに対して、「user_id」をキーにして、そのキーに一致したデータに対して、「expression_attribute_values」で指定した値を挿入しているコードです。
ほかにも、テーブルの作成、データの新規登録、削除などの様々な機能があります。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html

Lambdaを呼び出す

Lambdaを操作するサンプルコードは以下になります。
以下は、「my-lambda-function」という名前のLambda関数を呼び出しているコードになります。

client = boto3.client('lambda')

# Lambda関数名を指定
function_name = 'my-lambda-function'

# ペイロード(引数)を指定
payload = {
    'key1': 'value1',
    'key2': 'value2'
}

# Lambda関数を呼び出し
response = lambda_client.invoke(
    FunctionName=function_name,
    InvocationType='Event',  # 非同期呼び出し
    Payload=str(payload)  # ペイロードを文字列に変換
)
result = response.get('Payload').read().decode('utf-8')
print(f"Lambda関数の実行結果: {result}")

このコードでは、「FunctionName」で指定した関数名と一致するLambda関数を呼び出し、「InvocationType」で同期か非同期化の指定を行い、「Payload」で関数に引数を渡しています。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html

まとめ

今回はS3、DynamoDB、Lambdaの3つの操作について書きましたが、boto3はたくさんのAWSの機能を呼び出すことができます。
以下が、boto3を使用して呼び出せるAWSの機能の一覧です。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html

Discussion