はじめに
- S3 Object Lambdaを使って、大量のテキスト文を並列で形態素解析します。
- 形態素解析については別で記事を書いています
S3 Object Lambdaとは
S3 Object Lambda を使用すると、クライアントアプリケーションによって S3 からオブジェクトを取得するときに、Lambda 関数を使用してデータを処理および変換できます。
S3にあるオブジェクトにGetアクセスした際に、裏側でLambdaが起動して処理した結果をレスポンスとして受け取ります。
S3 Object Lambdaを使った並列処理
実際に書いてみる
- Lambda処理
def handler(event:, context:)
object_get_context = event['getObjectContext']
request_route = object_get_context['outputRoute']
request_token = object_get_context['outputToken']
s3_url = object_get_context['inputS3Url']
# S3のオブジェクトからテキストを取得
uri = URI.parse(s3_url)
res = Net::HTTP.get(uri)
text = JSON.parse(res)
# テキストを形態素解析処理
## 省略
# S3 Object Lambdaのレスポンスとして返す
s3_client.write_get_object_response(
request_route: request_route,
request_token: request_token,
body: text
)
{ 'statusCode': 200 }
end
- Client
# 並行で以下の処理を実行
# S3にオブジェクト配置
s3_client.put_object(bucket: s3_lambda_bucket, key: s3_object_key, body: "This is test text")
# Lambdaで加工されたレスポンスを取得
res = s3_client.get_object(
bucket: s3_lambda_bucket,
key: s3_object_key
)
最後に
株式会社SARAHではサーバレスアーキテクチャを積極的に採用して、プロダクト開発を行っています。