【備忘録】AWS Lambda,API GatewayとSlackを用いてbotを作成していたらハマった(未解決)
【備忘録】AWS Lambda,API GatewayとSlackを用いてbotを作成していたらハマった(未解決):
下記リンクを参考にして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するところに問題がありそうである。
解決はしていない。
プロジェクト実行環境 JavaSE-1.8(Java8)
Mac OS High Sierra 10.13.6
Garoon SOAP API
AWS Lambda $LATEST
AWS API Gateway
未検証。次回取り組む。
下記の記事を読んでみると、実際にPOSTされるときにマッピングテンプレートを用いて、SLackからのリクエストをはJSOM形式変更しないといけないらしい。
参考(とてもわかり易かった)
https://qiita.com/exabugs/items/e868df55333d0805acb2
しかし変更後も動作がなかった。
AWSを使ってSlackbotを作ろうと思ったのだが、API GatewayとLambdaを接続したあとにSlackにAPI Gatewayを通じてLambdaからのレスポンスを投稿する方法がわからなかった。
Mac OS High Sierra 10.13.6
Garoon SOAP API
AWS Lambda $LATEST
AWS API Gateway
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を用いてリクエスト先に返す方法
https://dev.classmethod.jp/server-side/serverless/aws-reinvent2017-api-gateway-access-log/
参考にしているのはこれ→
https://qiita.com/G-awa/items/fc803c285cb560dab796
既にテストでAPI GatewayからLambdaへのPOST,レスポンスを得るところまでは確認できている。
確認すべきはAPIGatewayへSlackからPOSTできていない場合なのか、POSTできているがポリシー関連で弾かれているのか。
実際のエンドポイントを用いてRestlet CLIENTで確認してみた。
するとレスポンスとして下記が帰ってきた。
どうやら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を動作させてみるとしっかりレスポンスが帰ってきた。
つまり現在Slack上で動作が確認できないのはAPIGatewayからSlackにPOSTするところ。
下記で示すとここになる。
ググっているとトークンが必要なケースがありそうである。
https://qiita.com/komeda-shinji/items/bd7bb3c2680e20218023
API Gatewayのログを確認した際、Restlet CLIENTからのリクエストは確認できたものの、SlackのOutgoingWebhooksを用いたリクエストは反応していなかったのが気がかりである。
【備忘録】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.6Garoon 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
既にテストでAPI GatewayからLambdaへのPOST,レスポンスを得るところまでは確認できている。
確認すべきはAPIGatewayへSlackからPOSTできていない場合なのか、POSTできているがポリシー関連で弾かれているのか。
実際のエンドポイントを用いてRestlet CLIENTで確認してみた。
するとレスポンスとして下記が帰ってきた。
どうやら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を動作させてみるとしっかりレスポンスが帰ってきた。
つまり現在Slack上で動作が確認できないのはAPIGatewayからSlackにPOSTするところ。
下記で示すとここになる。
検証3.Slack投稿時にSlackで発行したトークンが必要なケース
ググっているとトークンが必要なケースがありそうである。https://qiita.com/komeda-shinji/items/bd7bb3c2680e20218023
API Gatewayのログを確認した際、Restlet CLIENTからのリクエストは確認できたものの、SlackのOutgoingWebhooksを用いたリクエストは反応していなかったのが気がかりである。
コメント
コメントを投稿