Blogは株式会社BuySellTechnologiesのエンジニア達が知見・発見を共有する技術ブログです。nmu0テクノロジー開発部の村上です。現在はアーキテクチャ周りを担当しています。botを作成したので、その紹介をしたいと思います。(マスターデータ参照用)となりまして、今回は1から4までの紹介となります。それを見ていただければと思います。パラメータストアを使用する環境変数を使うと毎回Lambda関数をデプロイする必要があるので、パラメータストアをプログラムで読み込むようにするです。紹介したいことは多いのですが、今回は以下に絞って説明したいと思います。Bot作成の全体の流れ検証リクエストのハンドリングパラメータストアnlopes/slackをSlackのAPIを叩くために採用しました。Botのセットアップの流れまず最初にBotをどう作成するかを説明します。以下の流れとなります。URIと、どの種類のイベントを購読するか設定しますBotに反応させたいイベントを規定するということですBotをWorkspaceにインストール注意点としては、トークンはAppをインストール後に生成されるということです。このトークンは認証のためにBotのプログラム内で使用するものです。Tokenから得られます。必要な検証には以下の2種類があります。Slack1つ目はnlopesのリポジトリに例が掲載されているので、その通りにすれば大丈夫です。(events.go)リクエストのjsonに格納されているchallengeというキーの値を、text形式でステータスコード200で返すという流れになります。Gatewayを使用しているので、以下のようになります。nil}2つ目は、Slackの検証方法が今年から変わったらしく、より厳格なものを採用します。Secretとリクエストのbodyやtimestampを組み合わせて生成されたものがリクエストのヘッダーに含まれます。それはHMAC-SHA256を通した署名となっているので、各リクエストが漏れても安全となっています。Secretとリクエストの内容を使って自分で作成した署名が一致するか検証することです。Secretを渡していけば検証が出来ます。以下のような実装になりまして、errorがnilの場合は検証して問題なかったということなのでSlackへのレスポンスを作成していくという流れになります。リクエストのハンドリングこれまでで検証が終わったということで、実際にリクエストをハンドリングしてレスポンスを作成していきます。先程も出てきたevents.goにハンドリングの例が掲載されていて、ほぼそのままで大丈夫です。ハンドリングの流れとしては、slackevents.ParseEventの戻り値でイベントの大分類を判定するslackevents.URLVerificationやslackevents.CallbackEventなどですslackevents.CallbackEventはBotへのリクエストとなるので、さらにリクエストの種類を小分類で判定するslackevents.AppMentionEventやslackevents.MessageEventなどですslackevents.MessageEventの場合、チャンネルへのメッセージやダイレクトメッセージなどの判定を更に行うとなります。今回はBotへのメンション付きリクエストとダイレクトメッセージを受け取りたいので、以下のようなコードとなります。}}注意すべき点が1つありまして、ダイレクトメッセージにはBot自体の投稿も含まれるのでその制御をしないとループしてしまいます。今回は単純に、投稿にキーワードを含むかで判定しています。Botの投稿はこちらが完全に制御しているので、キーワードを含む恐れがないからです。error)のような関数を実装すればOKです。その関数の中身をこれまで説明した内容を使って実装します。SlackへのレスポンスはAPIで行うので、events.APIGatewayProxyResponseはステータスコード200を返すようにすれば何でも大丈夫です。パラメータストア最後にパラメータストアについて説明します。最初に述べましたように、設定を変えるためだけにデプロイし直したくない場合にパラメータストアは便利です。CLIで簡単に値を変えられるからです。その値の取得方法は以下のようになりまして、github.com/aws/aws-sdk-goを使用しています。nil}ストアは階層構造に出来るという特徴があるので、/cleaningにまとめています。ひとつ注意しておきたいのは、レスポンスがスカラ値のポインタで返ってくるので、aws.StringValueのように変換メソッドを使って値に変換する必要があるという点です。このことは、github.com/aws/aws-sdk-go/awsのDocに書かれていて、AWSのAPIで共通なようです。--overwriteのようなコマンドを叩きます。して、パラメータストアを使うことで、EnabledやInitialOffsetの値で動作を変えられるようになりました。まとめ今回はnlopes/slackの使い方とパラメータストアに絞って説明させていただきました。業務ではGolangをまだ使用していないのですが、型があるのとコードが読みやすいのでAPIの理解が非常にしやすい印象を受けました。nlopes/slackは、テストコードや例を見るととてもわかりやすいです。GolangでLambdaを使用する部分はほぼ割愛させていただきましたが、資料の章に非常にわかりやすいページを掲載しましたので、そちらを参考にしていただければと思います。14:21バイセルテクノロジーズではエンジニアを募集しています!興味がありましたら以下のリンクからご応募ください。上で実行する高速エンハンス開発を可能にするテスト手法フルスクラッチで開発。マイクロサービスについてSpinnakerをTLS(SSL)対応させる月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。