Slackのスラッシュコマンドで長い処理をして、応答を返したい!

テクログ

新人が

「それLambdaでできるんじゃないですか?」

って言い出したのが最近のヒットです。

 

さて、表題の通りですが、まずは

「Slackのスラッシュコマンドってなんですか?」

あっ、こちらです。

 

で、コアテックではカスタムコマンドにてAWSのLambda(Python)に連携をさせて、いろいろやっております。

でも受けてから3000msでSlackに応答をかえさないとタイムアウトしてしまうのです。

その制限を突破する方法です。(Lambda側でのはなし)

具体的な設定とかそういうのはできている前提です。

なんだ?コード書いてないからポエムか?とか思うかもしれませんが全て実用されてまーす。

—————

・概要

(1)コマンドを受けて最低限のことだけをするフロントをつくり、すぐSlackに応答を返す。

(2)フロントはバックに情報をわたし、バックがそれなりの時間で全部処理をしたら、改めてSlackに返答をする。

—————

・詳細

(1)コマンドを受けて最低限のことだけをするフロントをつくり、すぐSlackに応答を返す。

 

必要最低限のバリデーションくらいは時間がかかりませんのでやります。

で、すぐに「受け付けました!終わったら返答するのでちょっと待ってください!」

などと返せば、当然タイムアウトはしませんね?

バック側にどうやって渡すかというと、Amazon Simple Notification Service (SNS)で次のLambdaを呼びます。

(これがキモであり、もうこれでOK)

 

(2)フロントはバックに情報をわたし、バックがそれなりの時間で全部処理をしたら、改めてSlackに返答をする。

 

スラッシュコマンドで受けた情報を全てバックのLambdaに渡し、

それなりに時間がかかる処理を行います。

受けた情報にはレスポンスURL(response_url)も入っていますので、処理が終わったらそちらへ必要な情報を返せばOKです。

response_urlの有効期限については、軽く見たところだと30分でしょうか。30分は使えそうです。

(そんなに長くやらないと思いますが、やるのであればちゃんとマニュアルとかみてください)

—————

・利点

SNSでファンクションをどんどん呼べるので、Lambdaの5分制限も超えられます。

5分こえたらそもそもLambdaでやるのに適してない、EC2でやれ、という話もあります!!

さらに、SNSなのでAWSアカウントをまたいで実行させることもできますよ!!

 

ではよいLambdaライフを。

▼ ほどよくテクってる 関連記事