投稿

11月, 2018の投稿を表示しています

DynamoDBへのJSON投入用のLambda

前回 にJSON作成用のEXCEL作成して DataPipeLineでのデータ投入 を試したけれど 全然うまくいかないのでムキーという状態になったのですが、発想を変えてLambdaで S3に保存されたファイルをトリガーに自動実行 させて SNS で メールすれば いいじゃん。 と考えて、試してみました。 S3に保存されたファイルをDynamoDBに取込むところまでは何とか準備できた。 んでこれをどう加工するかですな。SNS側も何とかできました。 が、S3保存トリガーだとなぜかメールが2通飛ぶんだよなぁ。LambdaのWebエディタからだと1回なのに、、S3トリガーだと2通飛ぶ、これ何でだろうなぁ。 誰か親切な方、教えていただけると幸いです、 そして相変わらずコードベタ貼り、SAMとか使っていないからGit管理できていないのが その理由です。(苦笑 import logging import datetime import logging import json import os import urllib import boto3 LOGGER = logging.getLogger() LOGGER.setLevel(logging.INFO) dynamodb = boto3.resource('dynamodb') s3_res = boto3.resource('s3') s3_cl = boto3.client('s3') client = boto3.client('lambda') # DynamoDBに書込み def put_item(writeitems,writetable): try: table = dynamodb.Table(writetable) with table.batch_writer() as batch: for i in range(len(writeitems)): batch.put_item( Item=writeitems[i] ) LOG

DynamoDB初期データ投入用JSON作成用マクロ作成

DynamoDB 用のJSONを作成して DataPipeline に流すのに JSONがいるので色々と調べながら作成してみた。 EXCEL VBAなのは編集するときに色々と融通を利かせたいからです。 本当はかっちょよいWebのやつとかで作れればいいんですけど そこまでのスキルがないのですよ。それはご愛敬だww そして Git やってみました。色々と分からないことだらけですが とりあえず、上げてみた。 https://github.com/Otazoman/excel_tool.git        処理の流れとしては 1.EXCELのシートで元シートを作成 2.元シートにデータを投入 3.EXCELでJSONデータを生成し WinSCP で S3 にアップロード エラーハンドリングはほとんど考慮できていないし しょぼいコードなので何とも言えない。 ちなみにIDとPW設定はWinSCPのものに依存するので S3側にアクセスできるユーザをあらかじめ IAM で作成しておく必要が あります。 ◆投入用JSONデータフォーマット参考 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SampleData.LoadData.html まだDynamoにデータ投入していないので、きちんと動くかは これから検証してみる必要ありなんですが。 検証してみて不具合出てきたら更新はしていく予定です。 フォーマット変わらない限りは使えるかなぁと思っていますが、どうだろうか。

EXCELでJSON形式の中の要素数を数える

とりあえず、JSON形式なデータがEXCELに格納されているので JSONの中に何個要素があるかをカウントするマクロです。 カウントしたいデータのデータ形式 {"key1":"value1","key2":"value2","key3":"value3","key4":"value4"} まぁ参考にすらならないかもですが、、、 DynamoDBのファイル作るときに役に立つかも Function operationCheck() Dim ts As Worksheet Dim i As Long Dim j As Long Dim fRow As Long Dim wStr As String Dim wArray() As String Dim wVal As String Set ts = ThisWorkbook.Worksheets("Sheet1") fRow = ts.Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 2 To fRow - 1 wStr = Replace(ts.Range("B" & i).Value, "{", "") wStr = Replace(wStr, "}", "") 'カンマ区切りの文字を1個ずつ配列に格納 wArray = Split(wStr, ",") For j = 0 To UBound(wArray) Select Case j Case Is = 0 wVal = "0" Case Is = 1

AWS Lambdaのpythonで複数テーブル引いてきて検索するやつ作った

ちょっと融通の利く検索システムがほしかったので作成、 無謀にもpython3.6で挑戦、 ここ を参考にスタートしたのはいいものの 初心者の上あほなので調べながらやってたのでここまでで1週間位かかっている。 DynamoDBのテーブル構造は以下の通りです。 テーブル1のKEYで検索した結果を使ってテーブル2のPKを特定し そして検索結果をJSONで返すというやつです。 テーブル1でカテゴリから商品コードを引いてきて、その商品コードと Webから受け取ったパラメータで検索を行って検索結果を一覧で 表示するとかいう内容を想定しています。こうしておけば VALUEの部分が可変でも対応できるので柔軟かなぁと考えてのことです。 テーブル1: ---------------------------------- KEY,VALUE ---------------------------------- テーブル2: ---------------------------------- VALUE[n],SEARCHKEY,VALUE ---------------------------------- ※VALUE[n]はテーブル1のVALUEです。 イメージとしては[KEY]→テーブル1からVALUE取得 [VALUE[n]]+[SEARCHKEY]→テーブル2からVALUE取得 LambdaはWebのエディタで作るという無謀感が半端ない。メンテナンス性とか全く考慮なし。本当は こういうの でやるべきですが、使い方が分かりません。 どなたか親切な方、教えてください。 でお約束のソース共有 import logging import json import os import re import boto3 from boto3.dynamodb.conditions import Key class InternalFunctionError(Exception): def __init__(self, code, messages): self.code = code self.messages = messages def __str__(self): exob