初心者SEのつぶやき

初心者SEのつぶやき

ReactでAWS lambdaからレスポンスを受け取る方法

やりたいこと

AWS lambdaで実行した結果がバイナリーデータでしか受け取れず、
戻り値が活用できない。

戻り値を活用できるようにバイナリーデータを変換したい。

実現方法

TextDecoderを利用してASCII形式に変換をする。

実装方法は下記となる。
(lambda実装はReactを使ってAWS lambdaを実行する方法 - 初心者SEのつぶやき の記載参考)

    // lambdaの実行
    const lambdaResponse = await lambda.send(lambdaCommand);
    //「Uint8Array(57) [34, 123, 92, 110, 32, 30.....」のようなデータが出力される。
    console.log("Lambda response:", lambdaResponse.Payload);

    // asciiに変換処理
    const asciiDecoder = new TextDecoder('ascii');
    const data = asciiDecoder.decode(lambdaResponse.Payload);
    console.log("Lambda response body:", data);

lambda側での実装は下記となる。

import json

def lambda_handler(event, context):
  params = {
        'statusCode':200,
        'body': 'success!!'
      }
  resp = json.dumps(params, ensure_ascii=False, indent=2)
  return resp

実行後、下記が出力された。

Lambda response body: "{\n  \"statusCode\": 200,\n  \"body\": \"success!!\"\n}"

感想

lambdaからのレスポンスが受け取れなくて頭を悩ませていたので、
解決ができて安堵している。

今回の内容が参考になったら幸いです。