【備忘録】AWS Lambda,API GatewayとSlackを用いてbotを作成していたらハマった(未解決)

【備忘録】AWS Lambda,API GatewayとSlackを用いてbotを作成していたらハマった(未解決):


【備忘録】AWS Lambda,API GatewayとSlackを用いてSlackbotを作成していたらハマった(未解決)


何を目的に、何をしたのか。(達成できてない場合は「できてません」も冒頭で)

下記リンクを参考にしてSlackのOutgoing Webhooks→API Gateway→Lambdaを組んだものの作動しないので原因をさがしてみた。
https://qiita.com/G-awa/items/fc803c285cb560dab796

API GatewayとLambdaの連携についてLambda上でのテストで正常に稼働していることを確認したので、問題はOutgoing WebhooksからAPI GatewayにパラメータをPOSTするところにあると思った。


結論やわかったこと

Restlet CLIENTを用いてAPIにアクセスしたところレスポンスは正常に帰ってきたので,恐らくAPI GatewayからSlackにPOSTするところに問題がありそうである。

解決はしていない。


準備(OSのバージョン・環境等)

プロジェクト実行環境 JavaSE-1.8(Java8)

Mac OS High Sierra 10.13.6

Garoon SOAP API

AWS Lambda $LATEST

AWS API Gateway


手順


検証1.Outgoing WebhooksからPOSTする際にRequestトークンを持っていない

未検証。次回取り組む。


検証2.Outgoing WebhooksからPOSTする際に形式がJSON形式になっていないパターン

下記の記事を読んでみると、実際にPOSTされるときにマッピングテンプレートを用いて、SLackからのリクエストをはJSOM形式変更しないといけないらしい。

参考(とてもわかり易かった)
https://qiita.com/exabugs/items/e868df55333d0805acb2

しかし変更後も動作がなかった。



LambdaとAPIGatewayを用いてSlackにメッセージを投稿する仕組みを調査してみた


何を目的に、何をしたのか。(達成できてない場合は「できてません」も冒頭で)

AWSを使ってSlackbotを作ろうと思ったのだが、API GatewayとLambdaを接続したあとにSlackにAPI Gatewayを通じてLambdaからのレスポンスを投稿する方法がわからなかった。


結論やわかったこと


準備(OSのバージョン・環境等)

Mac OS High Sierra 10.13.6

Garoon SOAP API

AWS Lambda $LATEST

AWS API Gateway


手順


1.検証1.Incoming Webhooksで設定したエンドポイントにAPI Gateway、もしくはLambdaからSlackで受け取った値を元に加工したメッセージをpostする方法

WEB APIを用いてSlackへPOSTする記事
https://tech.speee.jp/entry/2018/01/23/105308

WEB APIを用いてSlackへPOSTする記事
https://qiita.com/omd/items/fcbbdb2bcce3edf0d3f5

APIgatewayを用いている(実際はAPIGatewayしか使用していない)
https://qiita.com/exabugs/items/e868df55333d0805acb2

APIgatewayを用いている(実際はAPIGatewayしか使用していない)
https://qiita.com/fk_2000/items/f104b97592a358a11389

どうやらSlackへLambdaからメッセージをポストする方法は下記2つあるようだ。

①WEBAPIを活用するやり方

②JSON形式でAPIGatewayを用いてリクエスト先に返す方法


検証2.アクセスログを検証してみる

https://dev.classmethod.jp/server-side/serverless/aws-reinvent2017-api-gateway-access-log/


結論やわかったこと

参考にしているのはこれ→
https://qiita.com/G-awa/items/fc803c285cb560dab796



image.png


既にテストでAPI GatewayからLambdaへのPOST,レスポンスを得るところまでは確認できている。


image.png


確認すべきはAPIGatewayへSlackからPOSTできていない場合なのか、POSTできているがポリシー関連で弾かれているのか。

実際のエンドポイントを用いてRestlet CLIENTで確認してみた。

するとレスポンスとして下記が帰ってきた。

image.png

どうやらAPIGatewayを使用するにはトークンが必要らしい。

エラーメッセージでググってみると下記公式ドキュメントではトークンの生成ではなく、ステージ設定のことを指している様子だった。未検証。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/amazon-api-gateway-using-stage-variables.html

また、送っているペイロードの形式が異なるケースでも同じエラーメッセージがでるらしい。(しかし今回はGETリクエストなのでそれはないぽい)
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/customize-gateway-responses.html

最後に記事を確認した。どうやらリクエストの形式に対してAPIGateway内に対応したメソッドがない場合はエラーが表示されるとのこと。
http://notwodaily.hatenablog.com/entry/2016/11/27/080000

検証した結果実際にPOSTで上記のRestlet CLIENTを動作させてみるとしっかりレスポンスが帰ってきた。

image.png

つまり現在Slack上で動作が確認できないのはAPIGatewayからSlackにPOSTするところ。



image.png


下記で示すとここになる。


image.png



検証3.Slack投稿時にSlackで発行したトークンが必要なケース

ググっているとトークンが必要なケースがありそうである。
https://qiita.com/komeda-shinji/items/bd7bb3c2680e20218023

API Gatewayのログを確認した際、Restlet CLIENTからのリクエストは確認できたものの、SlackのOutgoingWebhooksを用いたリクエストは反応していなかったのが気がかりである。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)