はじめに
本記事ではGASからAPI GatewayのREST APIをコールする処理を実装していきます。
ゴール
- GASのスクリプトを実行して、スプレッドシートから取得した値をAPIにPOSTする
- APIからステータス200でレスポンスが返ってくることを確認する
GASのログイメージ
Response: {"statusCode": 200, "body": "test1 を受け取りました。"}
作るもの
- 処理フロー:スプレッドシート→GAS→API Gateway→Lambda
1. Lambdaの準備
簡単なLambda のソースとして、本記事では下記のものを使用します。
lambda_function.py
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': f"{event['data']} を受け取りました。"
}
2. API Gateway のエンドポイント作成
コールする用の REST API のエンドポイントを作成します。
下記の設定でメソッドを作成し、リソースをデプロイしておきます。
- メソッドタイプ:POST
- 統合タイプ:Lambda 関数(上記1で作ったLambdaを指定)
1. スプレッドシートの準備
サンプルとして、APIにPOSTする用の値を A1:A5
に記載しておきます。
サンプル
test1
test2
test3
test4
test5
3. GASのスクリプトを作成
GASのスクリプトを作成します。
main.gs
function sendDataToApiGateway() {
const SPREADSHEET_ID = 'スプシのID';
const API_ENDPOINT = 'APIのエンドポイント';
try {
// スプシ
const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = spreadsheet.getActiveSheet();
// A1:A5の範囲の値を取得
const values = sheet.getRange('A1:A5').getValues();
for (let i = 0; i < values.length; i++) {
if (values[i][0]) {
const requestOptions = {
'method': 'POST',
'headers': {
'Content-Type': 'application/json'
},
'muteHttpExceptions': true,
'payload': JSON.stringify({
'data': values[i][0]
})
};
// API Gatewayにリクエストを送信
const response = UrlFetchApp.fetch(API_ENDPOINT, requestOptions);
// レスポンスの内容をログに出力
Logger.log('Response: ' + response.getContentText());
}
}
} catch (error) {
Logger.log(error);
}
}
- UrlFetchApp:https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app?hl=ja
- openById(id) :https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=ja#openbyidid
4. スクリプト実行
GASの 実行
ボタンを押下してスクリプトを動かすと、API Gatewayからステータス200でレスポンスが返ってくることを確認できました。
参考