実現したいこと
AWS Lambda上でGlue Data Catalogに格納されたテーブルのカラム・データ型の情報を取得し、
DynamoDBに作成したテーブル情報を持ってきて、Glueから取り出した要素を更新(追加)したい。
手順としては、GlueクラスのgetColumnsメソッドから取り出したカラムを使って配列を作っていく。辞書型で作成している配列から要素を取り出して変数を作って配列を作ってprintして表示する。
発生している問題・分からないこと
・Glueからテーブル情報の取得、表示→できた
・'item'に手入力した要素をDynamoDBのテーブルにupdate→できた
・Glueから取得したテーブル情報をDynamoDBのテーブルにupdate→よく分からない
該当のソースコード
python
1import json 2import boto3 3 4def lambda_handler(event, context):5 6 dynamodb = DynamoDB()7 dynamodb_table_name='test_TTTTT'8 glue = Glue()9 database_name='DDDDD'10 table_name='TTTTT'11 item = ['3','TSUNA','KOORI']12 13 columns = glue.getColumns(database_name, table_name)14 column = columns[0]15 response = dynamodb.updateItems(item,dynamodb_table_name)16 17 #print(columns)18 print(column)19 20class Glue:21 def __init__(self):22 self._client = boto3.client('glue')23 24 def getColumns(self, database_name, table_name):25 table = self._client.get_table(DatabaseName=database_name, Name=table_name)['Table']26 return table['StorageDescriptor']['Columns'] 27 28class DynamoDB:29 def __init__(self):30 self._client = boto3.client('dynamodb')31 32 def updateItems(self, item, dynamodb_table_name):33 response = self._client.update_item(34 TableName=dynamodb_table_name,35 Key={36 'id':{'S': item[0]}37 },38 UpdateExpression='SET Column_Name = :Column_Name, Data_Type = :Data_Type',39 ExpressionAttributeValues={40 ':Column_Name': {'S':item[1]},41 ':Data_Type': {'S':item[2]}42 }43 )44 return response 45 46 def getItems(self, dynamodb_table_name):47 items = self.scan(dynamodb_table_name)48 return items 49 50 def scan(self, dynamodb_table_name):51 options = {52 'TableName':dynamodb_table_name 53 }54 ret = []55 while True:56 res = self._client.scan(**options)57 ret += res.get('Items')58 if 'LastEvaluatedKey' not in res:59 break60 options['ExclusiveStartKey'] = res['LastEvaluatedKey']61 return ret 62 63 def typeDeserializer(self, item):64 deserializer = TypeDeserializer()65 items = {66 key: deserializer.deserialize(value)67 for key, value in item.items()68 }69 return items
試したこと・調べたこと
上記の詳細・結果
上記のソースコードを実行した結果は以下になります。
Test Event Name
(unsaved) test event
Response
null
Function Logs
START RequestId: 7007475b-a145-4966-b0ea-29cd3f4d0809 Version: $LATEST
{'Name': 'filename', 'Type': 'varchar(256)'}
END RequestId: 7007475b-a145-4966-b0ea-29cd3f4d0809
REPORT RequestId: 7007475b-a145-4966-b0ea-29cd3f4d0809 Duration: 2564.42 ms Billed Duration: 2565 ms Memory Size: 128 MB Max Memory Used: 79 MB Init Duration: 399.58 ms
Request ID
7007475b-a145-4966-b0ea-29cd3f4d0809
※現状ソースコード11行目の「item」内に手入力した要素はDynamoDB内のテーブルにupdateできる。
getClumnsメソッドで取得したカラム・データ型の情報をupdateできるようにしたい。
補足
Lambdaで使用しているレイヤー
・aws
・awswrangler
Lambdaの実行ロール
・ConvertCsv2ParquetStack-convertparqetprodapprole7CD-ei9sCH1ULCmp
0 コメント