こんにちは、SRE2課の松井(紀)です。
はじめに
サーバーワークスでは、アカウント作成や権限設定などのオペレーションをQuestetraで管理しております。
Questetraの概要については別のブログで紹介しているのでそちらをご覧ください。
https://blog.serverworks.co.jp/tech/2016/12/20/questetra/
社内業務改善のためQuestetraで入力した文字列をAWS Lambdaが受け取り、レスポンスを返す仕組みを検討していました。
Questetra開発経験ほとんどがなく、何から取り組めばよいか分からない状態からのスタートだったので、基本的な確認を行ったので備忘録的にブログに残します。
APIのデータ構造を確認する
QuestetraとAWS Lambdaを連携させるためにはまず
Questetraで入力した文字列がどのような形式でAWS Lambdaに投げられるかデータ構造を確認する必要があります。
AWS Lambdaを作る
QuestetraからAWS Lambdaが呼び出されたら、lambda_handlerに渡された引数eventにトリガーイベントの情報が格納されます。
なので、Questetraで呼び出された際にeventに格納されたデータを出来るようにAWS Lambdaを作りました。
def lambda_handler(event, context): return event
また、QuestetraからAWS Lambdaを呼び出すのにエンドポイントが必要なので関数URLを有効にします。
Questetraアプリを作る
Questetraでは、実行するアプリにデータ項目とワークフロー図とを定義する必要があります。
データ項目
データ構造を確認するために文字を入力する変数と出力を受け取る変数を定義します。
フィールド名は、必ずq_から始まる変数を指定してください。
今回は、データ構造を確認するだけなので入力と出力という変数を作成しました。
出力を受け取る変数は、単一行だとレスポンスを受け取れないので文字(複数行)を選択してください。
ワークフロー図
データ構造を確認するためだけなので、最低限のワークフローを作成します。
<概要>
開始→文字を入力→AWS Lambdaが入力を受け取り結果を返す→出力を確認→終了
青い窓になっているのがヒューマンタスクで、人間が文字入力したり、結果を確認する項目です。
入力工程では、"入力"変数に文字を記載出来るようにしています。
AWS Lambdaを利用する部分は、メールマークのメッセージ送信中間イベント (HTTP)を使用します。
アクセスURLには、AWS Lambdaで設定した関数URLを入れてください。
HTTP Methodは今回GETにして、レスポンスを保存するデータ項目には先程出力を受け取る変数を選択しました。
送信パラメータには、入力した文字列を設定します。
出力工程では、"出力"変数を表示出来るよう設定します。
設定が終わったら、開発中のバージョンのリリースを押して、実行出来るようにします。
出来上がったアプリを実行してみましょう。
入力欄に、testと入力して「入力」処理完了をクリックします。
QuestetraがAWS LambdaにAPIリクエストを投げ、returnされた値を出力が受け取って表示されましたね。
このままだと見づらいので、AWS Lambdaのコードを以下のように修正します。
import json def lambda_handler(event, context): data = json.dumps(event, ensure_ascii=False, indent=2) return data
きれいに出力されましたね
入力した文字列はqueryStringParametersに格納されることが分かりました。
入力された文字列を取り出す
データ構造が分かったので、"入力"で記載された文字列を取り出しましょう。
AWS Lambdaのコードを以下の様に変更しました。
import json def lambda_handler(event, context): input = event["queryStringParameters"]["入力"] result = "入力された文字は" + input return result
Questetraのアプリを実行すると、入力した文字列を取り出して表示することが出来ました。
おわりに
QuestetraとAWS Lambdaの関数URLを利用しAPIのデータ構造を確認し、入力された文字列を取り出す関数を作成しました。
関数URLは、このようにサクッと検証するのにはとても便利ですね!
誰かのお役にたてれば幸いです。
ではまた〜