[Python]boto3でAWSを操作する(S3, DynamoDB, Lambda)
はじめに
副業で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」というキーを指定して、その値を取得しています。
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」で指定した値を挿入しているコードです。
ほかにも、テーブルの作成、データの新規登録、削除などの様々な機能があります。
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」で関数に引数を渡しています。
まとめ
今回はS3、DynamoDB、Lambdaの3つの操作について書きましたが、boto3はたくさんのAWSの機能を呼び出すことができます。
以下が、boto3を使用して呼び出せるAWSの機能の一覧です。
Discussion