AWS lambdaで、sshで接続した先にある、テキストファイルを読み込んだあと、中身を書き換え、JSON形式の文字列に成形してS3に保存したいと考えております。
具体的には、test.txtの中身が
a
100 ※計算してintになっているもの
b
200
300 ※計算してintになっているもの
となっているものを、2,4,5行目の数字だけ取り出し、
{"数字1": 100, "数字2": 200, "数字3": 300}
という形に成形したいです。
エラーとしては以下の通りです。
エラーとなっているのは、「file_contents = '{"数字1": ' + lines[1] + ', "数字2": ' + lines[2] + ', "数字3": ' + lines[4] + '}'」のところです。
TypeError: must be str, not int
実際のコードは以下の通りになります。
python
1import paramiko 2import boto3 3import datetime 4import os 5 6print('Loading testdata lambda function') 7today = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y%m%d') 8#now = datetime.datetime.now() 9yesterday = (datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))) - datetime.timedelta(days=1)).strftime('%Y%m%d') 10 11def lambda_handler(event, context): 12 13 #接続先情報の設定 14 client = paramiko.SSHClient() 15 client.set_missing_host_key_policy(paramiko.WarningPolicy()) 16 user = os.environ['ID'] 17 passwd = os.environ['PASS'] 18 ip = os.environ['IP'] 19 client.connect(ip,port=22,username=user,password=passwd) 20 21 #接続先サーバー実行コマンド 22 stdin, stdout, stderr = client.exec_command('cat /home/tmp/test.txt') 23 24 # アップロードファイルの内容格納 25 lines = stdout.read() 26 file_contents = '{"数字1": ' + lines[1] + ', "数字2": ' + lines[2] + ', "数字3": ' + lines[4] + '}' 27 print(file_contents) 28 file_contents = file_contents.replace('\n','') 29 print(file_contents) 30 client.close() 31 bucket = os.environ['BUCKET'] 32 33 #取得ファイルの保存 34 key = 'Testdata/' + 'json/' + today + '/' +'testdata_' + yesterday + '.json' 35 print(key) 36 s3 = boto3.resource('s3') 37 obj = s3.Object(bucket,key) 38 obj.put(Body=file_contents) 39 return
ご教授のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/14 03:20