質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

受付中

S3に保存されているJSONファイルをDBへ取り込む方法

akira777
akira777

総合スコア6

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0回答

-1評価

0クリップ

161閲覧

投稿2022/06/23 01:01

S3に保存されているJSONファイルを「DocumentDB」「DynamoDB」などのAWSのDBへ取り込む方法として
下記の記事を参考に実施いたしましたが、ClodWatchで下記のエラーが発生してしまいます。
他にも方法がございましたら、ご教示をお願いします。
https://qiita.com/yifey/items/cd97445ecd7085cea444

lambdaのテンプレコードで変更した個所は下記となります。
YOUR_DYNAMO_TABLE_NAME → test-jsonlog
DynamoDBのパーティションキーは同じなので「name 」で変更しておりません。

よろしくお願いいたします。

'Records': KeyError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 16, in lambda_handler
bucket = event['Records'][0]['s3']['bucket']['name']
KeyError: 'Records'

import boto3
import json
import urllib.parse
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

dynamodb = boto3.client('dynamodb')
s3 = boto3.client('s3')

def lambda_handler(event, context):
#target dynamo table name
dynamotable = 'test-jsonlog'

#get bucket name and file name by s3 put event bucket = event['Records'][0]['s3']['bucket']['name'] filename = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') #get uploaded text file contents try: res = s3.get_object(Bucket=bucket, Key=filename) except Exception as e: return logger.error("Failed to get uploaded file: {}".format(e)) # file type check if (res['ContentType'] == 'text/plain'): # get body body = res['Body'].read() bodystr = body.decode('UTF-8') lines = bodystr.split('\r\n') # for windows line endings #get items of each line for item in lines: data = item.split(' ') name = data[0] age = data[1] #register data to the dynamo db try: dynamodb.put_item( TableName = dynamotable, Item = {'name':{'S':name},'age':{'N':age}}, Expected = {'name':{'Exists':False}} ) except Exception as e: print(e) else: logger.error('Invalid File Type: ' + res['ContentType'])

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yu_1985

2022/06/23 05:31

ちゃんと実際にS3にファイルをputして動作確認しましたか? イベントに対してRecordというキーがないと言われていますが…。
akira777

2022/06/27 08:17

ありがとうございます。 解決いたしました。
akira777

2022/06/27 08:24

追加で質問ですが、こちらの関数ですとテキスト以外のファイルには対応していないということで鎧いでしょうか? 例えば、CSVファイルやJSONファイルなど・・・ また、下記のようなテキスト内容の場合、Lambda関数の健康個所は「Item = {'name':{'S':name},'age':{'N':age}},」の個所のみでよろしいのでしょうか? Agent,First name,Last name,Routing profile,Log in,Log out,Duration,Agent Hierarchy Level One,Agent Hierarchy Level Two,Agent Hierarchy Level Three,Agent Hierarchy Level Four,Agent Hierarchy Level Five taro.suzuki,太郎,鈴木,TEST Routing Profile,2022-06-07T00:40:19.155Z,2022-06-08T04:31:20.286Z,100261,-,-,-,-,- testSV,SV,テスト,Basic Routing Profile,2022-06-08T01:47:19.271Z,-,-,TEST01,-,-,-,- よろしくお願いいたします。
yu_1985

2022/06/27 08:35

解決したのなら、何をどうして解決したのかを自己解決の回答として記載しておくと後から見る人に親切です。 追加の質問は、元ネタのLambda Functionが何をしているのかを一から説明するだけになるので詳細は省きます。 結論だけ言うとそこだけ直してもダメです。元のLambda Functionはスペース区切りのテキストを前提としているので、jsonを対象にしたいならjsonの構造を、csvを対象にしたいならcsvの構造を読み取って自分の登録したいように整形してデータ投入するように実装してください。
akira777

2022/06/28 08:42

ありがとうございます。 テキストファイルの内容が、全然違う形式の文字列なのが原因でした。 また、CSVファイルの整形は下記と思われますが、③の変更箇所のトリガーが分かりません。 ①スペース区切りは「data = item.split(' ')」→「data = item.split(',')」 ② テキストからCSV形式は「if (res['ContentType'] == 'text/plain'):」→「 if (res['ContentType'] == 'csv/plain'):」 ③DynamoDBの「Item = {'name':{'S':name},'age':{'N':age}},」の「S」と「N」の個所が不明です。 お手数をおかけしますが、よろしくお願いいたします。
yu_1985

2022/06/29 07:15

ここは無償デバッグサイトではないのでそこはさすがに自分で調べてやってほしいですね…。 > csv/plain そんなContent−Typeはないです。調べてみてください。 https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types また、適当に値を設定するのではなく実際のレスポンスの中身を見て実装することを強くお勧めします。 実際に動かしながら直していくとわかりやすいでしょう。
akira777

2022/06/30 08:21

ありがとうございます。 Lambda関数のコードを変更したところ、下記のエラーが発生してしまいました。 下記はどのようなエラーなのでしょうか? よろしくお願いいたします。 -------エラー内容------------------------ list index out of range: IndexError Traceback (most recent call last): File "/var/task/lambda_function.py", line 36, in lambda_handler First = data[1] IndexError: list index out of range ---------Lambdaコード-------------------------- #get items of each line for item in lines: data = item.split(',') Agent = data[0] First = data[1] Last = data[2] Routing = data[3]
yu_1985

2022/07/01 02:03

当初と質問内容が変わってます。 プログラムを逐一デバッグする作業をここに投げるのではなく、エラーメッセージを調べながらやってみてください。 変数に何が入っているか表示しながら動かしてデバッグしてみると良いでしょう。 以後は回答しません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。