やりたいこと
Ruby を利用して Aws lambda function からS3にあるJsonファイルを読込したい。
手順
Rubyコード
require 'aws-sdk'
require 'time'
def lambda_handler(event:, context:)
# Set region
region = 'us-east-1'
# API client for S3
s3 = Aws::S3::Client.new(region: region)
##### 引数を格納
# S3のバケット名
bucket_name = event['bucket_name']
execute_day = Time.parse(event['execute_day']).strftime("%Y%m%d")
# S3Pathを生成する [my_folder/20230303/index.json]
obj_key = 'my_folder/' + execute_day.to_s + '/index.json'
# S3にあるJsonファイルを読込
resp = s3.get_object(bucket: bucket_name, key: obj_key)
data_json = JSON.parse(resp.body.read)
# Jsonを返す
return { statusCode: 200, body: data_json}
end
上記でS3にあるJsonファイルの読み込みができます。
続いて「data_json」の中身を確認しましょう!
data_jsonがHash型でデータを持っているためキーを指定してデータが取れます。
例:
puts data_json["user"]
# output:↓
# [{"user_id"=>3, "name"=>"John Smith", "email"=>"johnsmith@test.com"}, {"user_id"=>2, "name"=>"Cherry", "email"=>"cherry@test.com"}, {"user_id"=>2, "name"=>"Starry ", "email"=>"blue@test.com"}]
例:
puts data_json["order"]
# output:↓
# [{"order_id"=>1, "user_id"=>"3", "order_detail_id"=>"1001"},{"order_id"=>2, "user_id"=>"3", "order_detail_id"=>"1002"}]
プライベートテストイベントを作成
- Lambda Function の[Test] (テスト) タブを選択します。
- [Test event] (テストイベント) で、次の作業を行います。
- [Template] (テンプレート) を選択します。
- テストの [Name] (名前) を入力します。
- イベント JSONに渡したいパラメータを用意します。
- 保存をクリック
3.[Test] (テスト) をクリックする。
4.テスト結果を確認するには、[Execution result] (実行結果) で、[Details] (詳細) を展開します。
上記でテスト準備ができます。
参考リンク
テストを試しましょう
テストする前にDeployをしないと作成したコードが反映されないので、テスト前にDeployを押してください。
[Test] (テスト) をクリックする。
結果:
Test Event Name
test
Response
{
"statusCode": 200,
"body": {
"user": [
{
"user_id": 2,
"name": "John Smith",
"mail": "johnsmith@test.com"
},
{
"agency_id": 3,
"name": "Cherry",
"mail": "cherry@test.com"
}],
"order": [
{
"order_id": 1,
"user_id": 2,
"order_detail_id": "1001"
},
{
"order_id": 2,
"user_id": 3,
"order_detail_id": "1002"
}
]
}
}
以上。