0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASとChalice (lambda) を連携させて、Payloadの値を取得してみた

Posted at

概要

Google Apps Script (GAS) から AWS Lambda の Chalice フレームワークを通じて POST リクエストを送信し、値を取得する方法について調べました。特に、Chalice 側で送信された JSON ペイロードの処理方法に焦点を当てています。

結論

Chalice で受信した JSON ペイロードからデータを取得するためには、実装がこちらです。

app.current_request.json_body.get(key)

前提

  • AWSアカウントを所持していること

手順

Chalice のインストールと環境構築

Chalice をインストールします。

pip install chalice

プロジェクトを作成します。

chalice new-project chalice-sample

Chalice アプリの修正

次に、Chalice 側のアプリケーション (app.py) を編集し、POST リクエストを受け取るルートを定義します。

from chalice import Chalice

app = Chalice(app_name='sample')

@app.route('/post', methods=['POST'])
def post_handler():
    request = app.current_request
    json_body = request.json_body

    payload_value = json_body.get('B3')
    return {'message': 'Success!', 'B3': payload_value}

ポイント解説

  • json_body.get('B3') は、POST リクエストの JSON ペイロードから B3 というキーの値を取得しています
  • app.current_request は Chalice が提供するオブジェクトで、現在の HTTP リクエストにアクセスできます

Chalice デプロイ

$ chalice deploy

以下のように返ってくればOKです

スクリーンショット 2024-09-11 17.52.05.png

補足

Chalice を使用すると、AWS Lambda を使用する Python アプリケーションをすばやく作成してデプロイできます。Chalice CLI を使用すると、数分で REST API を Amazon API Gateway と AWS Lambda にデプロイできます。

AWS コンソール画面

lambda がデプロイしていること、API Gatewayに連携していることを確認します

スクリーンショット 2024-09-11 18.01.16.png

GAS のスクリプト実装

次に、GAS から Chalice のエンドポイントに対して POST リクエストを送信するスクリプトです。このスクリプトは、Google スプレッドシートの特定のセルの値を取得し、それを Chaliceで作成したREST API に送信します。

function sendPostRequest() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート1');
  const b3Value = sheet.getRange('B3').getValue();  // B3セルの値を取得
  var url = 'https:// xxx .amazonaws.com/api/post'; // Chalice デプロイ時に出力された Rest API URL
  var payload = {
    'B3': b3Value,
  };

  var options = {
    'method': 'post',
    'contentType': 'application/json',  // JSON ペイロードを送信
    'payload': JSON.stringify(payload)  // JSON に変換して送信
  };

  try {
    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText());  // レスポンスをログに出力
    sheet.getRange('C3').setValue(response.getContentText());  // C3セルにレスポンスを書き込む
  } catch (error) {
    Logger.log('Error: ' + error.toString());
  }
}

ポイント解説

Google スプレッドシートからのデータ取得
sendPostRequest 関数は、スプレッドシートの B3 セルから値を取得し、それを JSON 形式で Chalice のエンドポイントに送信します

POST リクエストの送信
GAS の UrlFetchApp を使って、取得した値を Chalice に送信します。送信されるペイロードは、{'B3': b3Value} というシンプルな JSON 形式です

レスポンスの処理
Chalice からのレスポンスを取得し、それをログに出力しつつ、スプレッドシートの C3 セルに書き込んでいます。

検証

buttonを押下

スクリーンショット 2024-09-11 17.01.02.png

スクリーンショット 2024-09-11 20.12.04.png

outputが出力されれば成功です!!

まとめ

GAS から Chalice (AWS Lambda) を経由してデータを送信・受信することは、シンプルな POST リクエストのやり取りで実現できます。Chalice 側では、app.current_request.json_body.get('key') でペイロード内の特定のキーを簡単に取得できます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?