SlideShare a Scribd company logo
1 of 174
Download to read offline
サーバーレスで作る  
チャットBot
ハンズオン
イントロダクション
⾃自⼰己紹介
▸ 伊藤博司(いとうひろし)  
▸ 株式会社オプティマ  
▸ 島根開発センター所属  
▸ ソフトウェアエンジニア  
▸ 好きなAWSサービス→  Lambda,  API  Gateway
2
イントロダクション
アジェンダ
▸ 使⽤用するAWSサービス  
▸ サーバーレス・アーキテクチャーとは  
▸ ハンズオンの注意  
▸ ハンズオン  
▸ 1-‐‑‒1  天気予報  API  の作成  
▸ 1-‐‑‒2  天気予報  API  の修正    
▸ 2-‐‑‒1  Bot  の作成    
▸ 2-‐‑‒2  Bot  との連携  
▸ 2-‐‑‒3  Slack  との連携  
▸ 3-‐‑‒1  Citiesテーブルの作成    
▸ 3-‐‑‒2  Botの修正1  
▸ 3-‐‑‒3  Botの修正2  
3
イントロダクション
使⽤用するAWSサービス
▸ AWS  Lambda  
▸ サーバーのプロビジョニング(準備)をせずにコードを実⾏行行  
▸ 最⼤大5分まで実⾏行行可能  
▸ 利利⽤用可能な⾔言語  
▸ Node.js(v0.10  および  v4.3)  ・  Python  ・  Java8  
▸ AWS  API  Gateway  
▸ RESTfulAPIの作成と管理理  
▸ Lambda・外部  WEB  サービス(Proxy)・AWS  のサービスAPIを呼び出し可能  
▸ Amazon  DynamoDB  
▸ マネージドな  NoSQL    データベースサービス  
▸ スキーマレス
4
サーバーレス・アーキテクチャーとは
サーバーレス・アーキテクチャーとは
従来型の⼀一般的なアーキテクチャー
6
サーバーレス・アーキテクチャーとは
従来型の⼀一般的なアーキテクチャー
7
常時稼働
障害の考慮
負荷分散
ロギング・モニタリング
パッチの適⽤用
サーバーレス・アーキテクチャーとは
従来型の⼀一般的なアーキテクチャー
8
常時稼働
障害の考慮
負荷分散
ロギング・モニタリング
パッチの適⽤用
メンテナンスやキャパシティに気を配る必要があり、運⽤用負荷が⼤大きい  
未使⽤用のリソースがあり、コスト効率率率が良良くない
サーバーレス・アーキテクチャーとは
サーバーレス・アーキテクチャー
9
サーバーレス・アーキテクチャーとは
サーバーレス・アーキテクチャー
10
障害の考慮  
→AWS任せ
負荷分散  
→AWS任せ
ロギング・モニタリング  
→AWS任せ
パッチの適⽤用  
→AWS任せ
常時稼働  
イベント起動
サーバーレス・アーキテクチャーとは
サーバーレス・アーキテクチャー
11
フルマネージド・サービスを使って、運⽤用管理理はAWSにおまかせ  
イベント発⽣生分の使⽤用料料を⽀支払えば良良いので、コスト効率率率が良良い  
障害の考慮  
→AWS任せ
負荷分散  
→AWS任せ
ロギング・モニタリング  
→AWS任せ
パッチの適⽤用  
→AWS任せ
常時稼働  
イベント起動
サーバーレス・アーキテクチャーとは
特徴
▸ イベントドリブン型のアーキテクチャー  
▸ サーバーを稼働し続けず、必要な時にリソースを使う  
▸ 使った分だけ課⾦金金されるため、コスト効率率率が良良い  
▸ メンテナンスやキャパシティーの⼼心配事から開放される  
▸ 運⽤用に関わるコストを削減できる
12
ハンズオン
ハンズオン
⽤用意するもの
▸ AWS  アカウント  
▸ https://portal.aws.amazon.com/gp/aws/developer/
registration/index.html  
▸ Slack  チーム  
▸ https://slack.com/
14
ハンズオン
ハンズオンの⽬目的
▸ Slack  のメッセージに反応する簡単な  ChatBot  作成を通して、
API  Gateway  /  Lambda  /  DynamoDB  の理理解を深める  
▸ サーバーレスアーキテクチャーの具体例例を体験する
15
ハンズオン
ハンズオンの注意点
▸ ハンズオンで使⽤用するリソース名などは、誤って設定すると  Bot  が正しく動作しません。  
  直接⼊入⼒力力せずに、以下ページからコピペしてください。  
▸ https://github.com/s1hit/20160604_̲aws_̲handson  
▸ 当ハンズオンの⼿手順は、以下5つのリージョンで実施可能ですが(2016/6/4現在)  
  資料料上は「バージニア北北部」にて説明しています。  
▸ バージニア北北部  
▸ オレゴン  
▸ アイルランド  
▸ フランクフルト  
▸ 東京
16
ハンズオン#1-‐‑‒1  天気予報  API  の作成
ハンズオン#1-‐‑‒1  天気予報  API  の作成
概要
▸ API  Gateway  で天気予報  API  を作成する  
▸ livedoor  社の「お天気Webサービス」にリクエストし、レ
スポンスをそのまま返却(Proxy)  
▸ 地域は「松江市」固定
18
API  Gateway
お天気Webサービス  
@livedoor
クライアント  
(ブラウザ)
1 2
34
ハンズオン#1-‐‑‒1  天気予報  API  の作成
「⽶米国東部(バージニア北北部)」リージョンを選択
19
ハンズオン#1-‐‑‒1  天気予報  API  の作成
API  Gateway  を開く
20
ハンズオン#1-‐‑‒1  天気予報  API  の作成
今すぐ始める  もしくは  API  の作成をクリック
21
ハンズオン#1-‐‑‒1  天気予報  API  の作成
「ChatBot」  API  を新規作成
22
「ChatBot」
ハンズオン#1-‐‑‒1  天気予報  API  の作成
API  のメソッドを追加
23
ハンズオン#1-‐‑‒1  天気予報  API  の作成
GET  を選択
24
チェックボタンで確定
ハンズオン#1-‐‑‒1  天気予報  API  の作成
バックエンド(HTTP  Proxy)の設定
25
https://github.com/s1hit/20160604_̲aws_̲handson#p25  よりコピペ
ハンズオン#1-‐‑‒1  天気予報  API  の作成
メソッドの実⾏行行画⾯面の説明
26
クライアント
API  Gateway  からクライアントへの  
レスポンスの設定
バックエンドから  API  Gateway  への  
レスポンスの設定
バックエンド
API  Gateway  からバックエンドへの  
リクエストの設定
クライアントから  API  Gateway  への  
リクエストの設定
ハンズオン#1-‐‑‒1  天気予報  API  の作成
統合レスポンスの設定を開く
27
ハンズオン#1-‐‑‒1  天気予報  API  の作成
本⽂文マッピングテンプレートを変更更
28
ハンズオン#1-‐‑‒1  天気予報  API  の作成
レスポンスの  JSON  を編集
29
https://github.com/s1hit/20160604_̲aws_̲handson#p29よりコピペ
※マッピングテンプレートを編集せずともレスポンスは  
表⽰示されますが、ブラウザ上にUTF-‐‑‒8のエスケープシーケンスが  
そのまま表⽰示されてしまうため、⼀一⼿手間かけます。
ハンズオン#1-‐‑‒1  天気予報  API  の作成
マッピングテンプレートを保存
30
ハンズオン#1-‐‑‒1  天気予報  API  の作成
マッピングテンプレートを保存
31
上の保存もクリックしないと、画⾯面遷移で  
下のエディタ部分が元に戻ってしまうので  
必ずクリックする
ハンズオン#1-‐‑‒1  天気予報  API  の作成
メソッドの実⾏行行画⾯面へ戻る
32
ハンズオン#1-‐‑‒1  天気予報  API  の作成
メソッドレスポンスの設定を開く
33
ハンズオン#1-‐‑‒1  天気予報  API  の作成
レスポンスヘッダーの  Content-‐‑‒Typeを変更更
34
ハンズオン#1-‐‑‒1  天気予報  API  の作成
レスポンスの⽂文字コードを  utf-‐‑‒8  に
35
https://github.com/s1hit/20160604_̲aws_̲handson#p35  よりコピペ
ハンズオン#1-‐‑‒1  天気予報  API  の作成
戻る
36
ハンズオン#1-‐‑‒1  天気予報  API  の作成
API  のテスト
37
ハンズオン#1-‐‑‒1  天気予報  API  の作成
レスポンスを確認
38
ハンズオン#1-‐‑‒1  天気予報  API  の作成
API  のデプロイ
39
ハンズオン#1-‐‑‒1  天気予報  API  の作成
ステージの新規作成
40
ハンズオン#1-‐‑‒1  天気予報  API  の作成
「prod」ステージとしてデプロイ
41
ハンズオン#1-‐‑‒1  天気予報  API  の作成
デプロイされた  API  の  URL
42
ハンズオン#1-‐‑‒1  天気予報  API  の作成
ブラウザで開いて確認
43
ハンズオン#1-‐‑‒2  天気予報  API  の修正
ハンズオン#1-‐‑‒2  天気予報  API  の修正
概要
▸ 天気予報の地域をクライアントから指定できるようにする  
▸ API  Gateway  の  GET  メソッドにパラメータを追加  
▸ 結果レスポンスを、天気予報タイトルと天気概要のみにする  
▸ 天気  API  からのレスポンス内容を  API  Gateway  で編集  
45
API  Gateway
お天気Webサービス  
@livedoor
クライアント  
(ブラウザ)
リクエストパラメータで地域を指定 地域を引き渡し
結果をフォーマット
ハンズオン#1-‐‑‒2  天気予報  API  の修正
Resources  画⾯面に戻る
46
ハンズオン#1-‐‑‒2  天気予報  API  の修正
GET  メソッドを選択
47
ハンズオン#1-‐‑‒2  天気予報  API  の修正
メソッドリクエストの設定を開く
48
ハンズオン#1-‐‑‒2  天気予報  API  の修正
URL  クエリ⽂文字列列  パラメータの追加
49
ハンズオン#1-‐‑‒2  天気予報  API  の修正
パラメータ「city」を定義
50
ハンズオン#1-‐‑‒2  天気予報  API  の修正
統合リクエストの設定を開く
51
ハンズオン#1-‐‑‒2  天気予報  API  の修正
Endpoint  URL  を変更更
52
“?city=320010”  を削る
ハンズオン#1-‐‑‒2  天気予報  API  の修正
「city」パラメーターが追加されていることを確認
53
ハンズオン#1-‐‑‒2  天気予報  API  の修正
統合レスポンスの設定を開く
54
ハンズオン#1-‐‑‒2  天気予報  API  の修正
本⽂文のマッピングテンプレートを変更更
55
ハンズオン#1-‐‑‒2  天気予報  API  の修正
「title」と「text」のみを返却する  JSON  に変更更
56
https://github.com/s1hit/20160604_̲aws_̲handson#p56  よりコピペ
ハンズオン#1-‐‑‒2  天気予報  API  の修正
統合レスポンス設定の保存
57
ハンズオン#1-‐‑‒2  天気予報  API  の修正
テスト
58
ハンズオン#1-‐‑‒2  天気予報  API  の修正
テスト
59
「320010」を⼊入⼒力力
ハンズオン#1-‐‑‒2  天気予報  API  の修正
再度度デプロイ
60
ハンズオン#1-‐‑‒2  天気予報  API  の修正
今回は「dev」ステージに対してデプロイ
61
ハンズオン#1-‐‑‒2  天気予報  API  の修正
開発⽤用  URL  にアクセス
62
ハンズオン#1-‐‑‒2  天気予報  API  の修正
ブラウザで開いて確認
63
「city」パラメーター未指定のため返却値なし
ハンズオン#1-‐‑‒2  天気予報  API  の修正
ブラウザで開いて確認
64
「?city=320010」を追加
ハンズオン#1-‐‑‒2  天気予報  API  の修正
「prod」ステージに対しても同様の内容をリリース
65
「prod」ステージの  API  バージョン
ハンズオン#1-‐‑‒2  天気予報  API  の修正
「prod」ステージに対しても同様の内容をリリース
66
最新のデプロイバージョンを選択
ハンズオン#1-‐‑‒2  天気予報  API  の修正
本番⽤用  URL  で確認
67
ハンズオン#2-‐‑‒1  Bot  の作成
ハンズオン#2-‐‑‒1  Bot  の作成
概要(ハンズオン#2-‐‑‒1〜~2-‐‑‒3)
▸ Botを作成する  
▸ Slack  から受け取ったメッセージをそのまま返却するLambdaファ
ンクションを作成(エコーBot)  
▸ API  Gateway  から  Lambda  ファンクションを呼び出し  
▸ Slack  の  OutgoingWebhooks  で  API  Gateway  を叩く
69
API  Gateway Lambda(Bot)Slack
メッセージ:”TEST”
メッセージ:”TEST”
1 2
34
ハンズオン#2-‐‑‒1  Bot  の作成
Lambdaを開く
70
ハンズオン#2-‐‑‒1  Bot  の作成
Get  Started  Now  もしくは  Create  a  Lambda  function  をクリック
71
ハンズオン#2-‐‑‒1  Bot  の作成
BluePrint  はスキップ
72
ハンズオン#2-‐‑‒1  Bot  の作成
名前をつけ、リンク先のコードをペースト
73
「SlackBot」
https://github.com/s1hit/20160604_̲aws_̲handson#p73  よりコピペ
ハンズオン#2-‐‑‒1  Bot  の作成
SlackBot  のソースコード
74
トークンが不不正
Botからのメッセージ
エコーを⾏行行う
ハンズオン#2-‐‑‒1  Bot  の作成
Lambda  ファンクションの実⾏行行ロールを作成
75
ハンズオン#2-‐‑‒1  Bot  の作成
Lambda  ファンクションの実⾏行行ロールを作成
76
Lambda  ファンクション実⾏行行に必要な権限
ハンズオン#2-‐‑‒1  Bot  の作成
実⾏行行ロールを指定
77
ハンズオン#2-‐‑‒1  Bot  の作成
作成される  Lambda  ファンクションの内容を確認
78
ハンズオン#2-‐‑‒1  Bot  の作成
Bot  の作成が完了了
79
C
ハンズオン#2-‐‑‒2  Bot  との連携
ハンズオン#1-‐‑‒1  天気予報  API  の作成
API  Gateway  を開く
81
ハンズオン#3-‐‑‒2  Botの修正1
ChatBotを開く
82
ハンズオン#2-‐‑‒2  Bot  との連携
Slack  ⽤用リソースを追加
83
ハンズオン#2-‐‑‒2  Bot  との連携
Slack  ⽤用リソースを追加
84
「slack」と⼊入⼒力力
ハンズオン#2-‐‑‒2  Bot  との連携
POST  メソッドを追加
85
ハンズオン#2-‐‑‒2  Bot  との連携
POST  メソッドを追加
86
ハンズオン#2-‐‑‒2  Bot  との連携
先ほど作成した  Lambda  ファンクションを指定
87
ハンズオン#2-‐‑‒2  Bot  との連携
API  にBot  の実⾏行行権限を与える
88
ハンズオン#2-‐‑‒2  Bot  との連携
統合リクエストの設定を変更更
89
ハンズオン#2-‐‑‒2  Bot  との連携
Slack  からのリクエストをBot  に渡す設定
90
テンプレートが定義されていない場合のみ  
バックエンドにリクエスト本⽂文を渡す(推奨)
ハンズオン#2-‐‑‒2  Bot  との連携
Slack  からのリクエストをBot  に渡す設定
91
https://github.com/s1hit/20160604_̲aws_̲handson#p91  よりコピペ
ハンズオン#2-‐‑‒2  Bot  との連携
Slack  からのリクエストをBot  に渡す設定
92
https://github.com/s1hit/20160604_̲aws_̲handson#p92  よりコピペ
ハンズオン#2-‐‑‒2  Bot  との連携
「prod」ステージにデプロイ
93
ハンズオン#2-‐‑‒2  Bot  との連携
「prod」ステージにデプロイ
94
ハンズオン#2-‐‑‒2  Bot  との連携
Botのデプロイ完了了
95
ハンズオン#2-‐‑‒3  Slack  との連携
ハンズオン#2-‐‑‒3  Slack  との連携
Bot専⽤用Channelを作成
97
+マークをクリック  
ハンズオン#2-‐‑‒3  Slack  との連携
Bot専⽤用Channelを作成
98
任意のChannel名  
ハンズオン#2-‐‑‒3  Slack  との連携
「https://{チーム名}.slack.com/apps/new/A0F7VRG6Q-‐‑‒outgoing-‐‑‒webhooks」にアクセス
99
ハンズオン#2-‐‑‒3  Slack  との連携
API  Gatewayへメッセージ連携するためのOutgoing  WebHooks
100
ハンズオン#2-‐‑‒3  Slack  との連携
Botと連携させるチャンネル情報の設定
101
先ほど作成したChannel名  
すべてのメッセージに反応させるため  
空にしておく  
ハンズオン#2-‐‑‒3  Slack  との連携
BotのURLを指定
102
API  GatewayのエンドポイントURL  
〜~/prodのあとに/slackを忘れずに  
ハンズオン#2-‐‑‒3  Slack  との連携
Bot  がリクエスト元を特定するための  Token  を控えておく
103
クリップボードにコピーしておく  
ハンズオン#2-‐‑‒3  Slack  との連携
Botの表⽰示名を設定して保存
104
お好みで  お好みで  
ハンズオン#2-‐‑‒3  Slack  との連携
API  Gatewayに戻り、prodステージのステージ変数を追加
105
ハンズオン#2-‐‑‒3  Slack  との連携
slack  token  を設定
106
「slackToken」と⼊入⼒力力  
※Tのみ⼤大⽂文字
先ほどコピーしたtokenをペースト
ハンズオン#2-‐‑‒3  Slack  との連携
Bot  の設定が全て完了了
107
ハンズオン#2-‐‑‒3  Slack  との連携
Bot連携の設定をしたチャンネルでテスト
108
正しく設定できていれば  
Botからのレスポンスが来る  
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
概要
▸ Citiesテーブルを作成する  
▸ 全国地点定義表のデータを格納(142件)  
▸ 地域名(e.g.  松江)と地域ID(e.g.  320010)の対応  
▸ Lambda  から初期化⽤用データを投⼊入
110
Lambda  
(データ投⼊入⽤用ファンクション)
DynamoDB  
(Citiesテーブル)
データ投⼊入
テーブル作成
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDBを開く
111
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
Create  table  もしくは  テーブルの作成  をクリック
112
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDB  テーブルを作成
113
「Cities」と⼊入⼒力力  
「cityName」と⼊入⼒力力  
チェックを外す  
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
書き込みキャパシティを変更更
114
データ投⼊入⽤用ファンクションの  
タイムアウト防⽌止のため「10」に変更更  
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDB  テーブルを作成中・・・
115
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDB  テーブルの作成完了了
116
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
Lambdaを開く
117
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDBへのデータ投⼊入を⾏行行うファンクションを作成
118
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
blueprint  は  simple-‐‑‒mobile-‐‑‒backend  を選択
119
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
ファンクション名を⼊入⼒力力
120
「PutCityData」と⼊入⼒力力
※データ投⼊入ファンクションは⽇日本語を含むコードとなっており、  
このタイミングでペーストすると⽂文字化けしてしまうため  
ひとまずサンプルコードのまま作成する
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDBにアクセス可能なロールを作成
121
Basic  with  DynamoDB  を選択
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDBにアクセス可能なロールを作成
122
DynamoDB  へのアクセス権限
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
ロールの確認とタイムアウト値の変更更
123
1分に変更更
作成したロールが設定される
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
ファンクションの内容を確認
124
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
リンク先のコードで上書き
125
https://github.com/s1hit/20160604_̲aws_̲handson#p125をコピペ
ハンズオン#2-‐‑‒1  Bot  の作成
PutCityData  のソースコード
126
地点定義データ
地点定義データ分ループし、DynamoDB
へのputItem命令令を配列列に⼊入れる
putItemを実⾏行行
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
保存&テストを⾏行行う
127
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
テスト⽤用パラメーターは変更更せずに実⾏行行
128
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
データ投⼊入処理理完了了
129
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
DynamoDBを開く
130
ハンズオン#3-‐‑‒1  Citiesテーブルの作成
データ確認
131
ハンズオン#3-‐‑‒2  Botの修正1
ハンズオン#3-‐‑‒2  Botの修正1
概要
▸ Botの修正  
▸ @bot  というメンション付きのメッセージにのみ反応  
▸ @bot  に続くコマンドを認識識して処理理を分ける  
① 「/echo  メッセージ」の場合、メッセージをそのまま返却    
② 「/city  地域名」の場合、地域IDを返却
133
API  Gateway Lambda(Bot)Slack
①メッセージ:@bot  /echo  テスト  
②メッセージ:@bot  /city  松江
①メッセージ:テスト  
②メッセージ:松江のIDは320010です。
DynamoDB(Cities)
①ー1
②ー1
①ー4
②ー6
①ー2
①ー3
②ー5
②ー2
②ー3 ②ー4
ハンズオン#3-‐‑‒2  Botの修正1
Lambdaを開く
134
ハンズオン#3-‐‑‒2  Botの修正1
Lambdaファンクションを作成
135
ハンズオン#3-‐‑‒2  Botの修正1
blueprint  は  simple-‐‑‒mobile-‐‑‒backend  を選択
136
ハンズオン#3-‐‑‒2  Botの修正1
ファンクション名を⼊入⼒力力
137
「SlackBot2」と⼊入⼒力力
※データ投⼊入ファンクションは⽇日本語を含むコードとなっており、  
このタイミングでペーストすると⽂文字化けしてしまうため  
ひとまずサンプルコードのまま作成する
ハンズオン#3-‐‑‒2  Botの修正1
ロールを設定
138
「lambda_̲dynamo」を選択  
(先ほど作成したものを流流⽤用)
ハンズオン#3-‐‑‒2  Botの修正1
内容を確認
139
ハンズオン#3-‐‑‒2  Botの修正1
リンク先のコードで上書き
140
https://github.com/s1hit/20160604_̲aws_̲handson#p140  よりコピペ
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot2  のソースコード(1/4)
141
SlackBotと同様
メンション(@bot)つきで  
呼ばれているかのチェック
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot2  のソースコード(2/4)
142
Botの処理理を呼び出し  
※「@bot」以降降の⽂文字列列を渡す
Botに対するメッセージで
はないのでスキップ
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot2  のソースコード(3/4)
143
コマンドによる振り分け  
・/echo  
・/city  
※コマンドの後ろの⽂文字列列をメッセージとして渡す
Botクラス
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot2  のソースコード(4/4)
144
メッセージテキストをそ
のまま返信
DynamoDB内を地域名で検索索
し、地域IDを返信
ハンズオン#3-‐‑‒2  Botの修正1
保存
145
ハンズオン#3-‐‑‒2  Botの修正1
API  Gateway  を開く
146
ハンズオン#3-‐‑‒2  Botの修正1
ChatBotを開く
147
ハンズオン#3-‐‑‒2  Botの修正1
POST  の統合リクエストを開く
148
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot2と紐紐付け
149
ハンズオン#3-‐‑‒2  Botの修正1
権限追加
150
ハンズオン#3-‐‑‒2  Botの修正1
prod  へデプロイ
151
ハンズオン#3-‐‑‒2  Botの修正1
Bot  の修正が完了了
152
ハンズオン#3-‐‑‒2  Botの修正1
slack  で動作確認
153
ハンズオン#3-‐‑‒3  Botの修正2
ハンズオン#3-‐‑‒3  Botの修正2
概要
▸ Botの修正  
▸ 「/weather  地域名」の場合、その地域の天気予報を返す
155
API  Gateway Lambda(Bot)Slack
メッセージ:@bot  /weather  松江
メッセージ:[島根県  松江  の天気]  島根県は、  
⾼高気圧に覆われて晴れています。
DynamoDB(Cities)
お天気Webサービス
1
8
2
7
3
6
4
5
ハンズオン#3-‐‑‒3  Botの修正2
LambdaファンクションのZipをダウンロード
156
▸ https://raw.githubusercontent.com/s1hit/20160604_̲aws_̲handson/master/lambda.zip  
※Lambdaで⽤用意されている標準module以外を使⽤用する場合は、  
  moduleごとZip化したものをデプロイする必要がある。  
  (今回はサードパーティー製のHTTPクライアントを使⽤用)
▸ Zip化の注意  
▸ フォルダごと圧縮しない  
▸ 圧縮⽅方法→  $  zip  -‐‑‒r  lambda.zip  index.js  node_̲modules/  
ハンズオン#3-‐‑‒3  Botの修正2
Lambdaを開く
157
ハンズオン#3-‐‑‒3  Botの修正2
Lambdaファンクションを作成
158
ハンズオン#3-‐‑‒3  Botの修正2
blueprint  は  スキップ
159
ハンズオン#3-‐‑‒3  Botの修正2
ファンクション名を⼊入⼒力力し、Zipをアップロード
160
「SlackBot3」と⼊入⼒力力
ハンズオン#3-‐‑‒3  Botの修正2
ロールを設定
161
「lambda_̲dynamo」を選択
ハンズオン#3-‐‑‒3  Botの修正2
内容を確認
162
ハンズオン#3-‐‑‒3  Botの修正2
Botのデプロイ完了了
163
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot3  のソースコード(1/2)
164
/weatherコマンドを追加
ハンズオン#3-‐‑‒2  Botの修正1
SlackBot3  のソースコード(2/2)
165
お天気APIへのアクセス
地域IDの取得
ハンズオン#3-‐‑‒3  Botの修正2
API  Gateway  を開く
166
ハンズオン#3-‐‑‒3  Botの修正2
ChatBotを開く
167
ハンズオン#3-‐‑‒3  Botの修正2
POST  の統合リクエストを開く
168
ハンズオン#3-‐‑‒3  Botの修正2
SlackBot3と紐紐付け
169
ハンズオン#3-‐‑‒3  Botの修正2
権限追加
170
ハンズオン#3-‐‑‒3  Botの修正2
prod  へデプロイ
171
ハンズオン#3-‐‑‒3  Botの修正2
Bot  の修正が完了了
172
ハンズオン#3-‐‑‒3  Botの修正2
slack  で動作確認
173
お疲れ様でした
お疲れ様でした
▸ 本ハンズオンで作成した以下のリソースについて、⽚片付けを
お願いします。  
▸ AWS  API  Gateway  
▸ AWS  Lambda  
▸ Amazon  DynamoDB
174

More Related Content

Viewers also liked

Slack 簡介
Slack 簡介Slack 簡介
Slack 簡介Fenix Wu
 
Create Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptCreate Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptRob Scaduto
 
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦20170222【ppt】 礦業漏洞又一樁我家地下在挖礦
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦Ray Reng
 
DeepLearning 中心に見る最近の論文事情
DeepLearning 中心に見る最近の論文事情DeepLearning 中心に見る最近の論文事情
DeepLearning 中心に見る最近の論文事情Yuta Yamashita
 
How to build a slack-hubot with js
How to build a slack-hubot with jsHow to build a slack-hubot with js
How to build a slack-hubot with jsJuneyoung Oh
 
正しい開発をする
正しい開発をする正しい開発をする
正しい開発をするHonMarkHunt
 
新人研修チーム開発演習発表資料
新人研修チーム開発演習発表資料新人研修チーム開発演習発表資料
新人研修チーム開発演習発表資料Ryota Sakamoto
 
Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築崇之 清水
 
新日本プロレスに学ぶエンジニアのキャリアプラン
新日本プロレスに学ぶエンジニアのキャリアプラン新日本プロレスに学ぶエンジニアのキャリアプラン
新日本プロレスに学ぶエンジニアのキャリアプランHonMarkHunt
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Takakiyo Tanaka
 
LINE Messaging apiと戯れる
LINE Messaging apiと戯れるLINE Messaging apiと戯れる
LINE Messaging apiと戯れるHonMarkHunt
 
2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料buty4649
 
機械学習を用いた会議診断システムの開発
機械学習を用いた会議診断システムの開発機械学習を用いた会議診断システムの開発
機械学習を用いた会議診断システムの開発Takahiro Kubo
 
全脳アーキテクチャ実現への長き道のりをいかに支えるのか
全脳アーキテクチャ実現への長き道のりをいかに支えるのか全脳アーキテクチャ実現への長き道のりをいかに支えるのか
全脳アーキテクチャ実現への長き道のりをいかに支えるのかドワンゴ 人工知能研究所
 
Bot mashup world LT Bot ✖️ HMM
Bot mashup world LT  Bot ✖️ HMMBot mashup world LT  Bot ✖️ HMM
Bot mashup world LT Bot ✖️ HMMRyota Sakamoto
 
実践的! 人工知能X機械学習 〜iettyの場合〜
実践的! 人工知能X機械学習 〜iettyの場合〜実践的! 人工知能X機械学習 〜iettyの場合〜
実践的! 人工知能X機械学習 〜iettyの場合〜takemi.ohama
 

Viewers also liked (20)

ChatOps@研究室
ChatOps@研究室ChatOps@研究室
ChatOps@研究室
 
Slack 簡介
Slack 簡介Slack 簡介
Slack 簡介
 
銀行ロビーアシスタント
銀行ロビーアシスタント銀行ロビーアシスタント
銀行ロビーアシスタント
 
Create Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScriptCreate Your Own Chatbot with Hubot and CoffeeScript
Create Your Own Chatbot with Hubot and CoffeeScript
 
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦20170222【ppt】 礦業漏洞又一樁我家地下在挖礦
20170222【ppt】 礦業漏洞又一樁我家地下在挖礦
 
20160717 csc sec_bd
20160717 csc sec_bd20160717 csc sec_bd
20160717 csc sec_bd
 
DeepLearning 中心に見る最近の論文事情
DeepLearning 中心に見る最近の論文事情DeepLearning 中心に見る最近の論文事情
DeepLearning 中心に見る最近の論文事情
 
How to build a slack-hubot with js
How to build a slack-hubot with jsHow to build a slack-hubot with js
How to build a slack-hubot with js
 
正しい開発をする
正しい開発をする正しい開発をする
正しい開発をする
 
新人研修チーム開発演習発表資料
新人研修チーム開発演習発表資料新人研修チーム開発演習発表資料
新人研修チーム開発演習発表資料
 
Python webinar 2nd july
Python webinar 2nd julyPython webinar 2nd july
Python webinar 2nd july
 
Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築
 
新日本プロレスに学ぶエンジニアのキャリアプラン
新日本プロレスに学ぶエンジニアのキャリアプラン新日本プロレスに学ぶエンジニアのキャリアプラン
新日本プロレスに学ぶエンジニアのキャリアプラン
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
LINE Messaging apiと戯れる
LINE Messaging apiと戯れるLINE Messaging apiと戯れる
LINE Messaging apiと戯れる
 
2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料
 
機械学習を用いた会議診断システムの開発
機械学習を用いた会議診断システムの開発機械学習を用いた会議診断システムの開発
機械学習を用いた会議診断システムの開発
 
全脳アーキテクチャ実現への長き道のりをいかに支えるのか
全脳アーキテクチャ実現への長き道のりをいかに支えるのか全脳アーキテクチャ実現への長き道のりをいかに支えるのか
全脳アーキテクチャ実現への長き道のりをいかに支えるのか
 
Bot mashup world LT Bot ✖️ HMM
Bot mashup world LT  Bot ✖️ HMMBot mashup world LT  Bot ✖️ HMM
Bot mashup world LT Bot ✖️ HMM
 
実践的! 人工知能X機械学習 〜iettyの場合〜
実践的! 人工知能X機械学習 〜iettyの場合〜実践的! 人工知能X機械学習 〜iettyの場合〜
実践的! 人工知能X機械学習 〜iettyの場合〜
 

Similar to 【JAWS-UG Shimane vol.5 】[ハンズオン]サーバーレスで作るチャットBot

ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法Kenichiro Nakamura
 
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~Osamu Monoe
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAmazon Web Services Japan
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンEiji KOMINAMI
 
.NET ラボ 勉強会 C# でラインプラットフォーム開発
.NET ラボ 勉強会 C# でラインプラットフォーム開発.NET ラボ 勉強会 C# でラインプラットフォーム開発
.NET ラボ 勉強会 C# でラインプラットフォーム開発Kenichiro Nakamura
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリKohei Kadowaki
 
Kubernetes Operator for vSphere VM
Kubernetes Operator for vSphere VMKubernetes Operator for vSphere VM
Kubernetes Operator for vSphere VMMasanori Nara
 
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」fukuoka.ex
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】Ryu Yamashita
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】JOYZO
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
OpenShift v3 Technical Overview
OpenShift v3 Technical OverviewOpenShift v3 Technical Overview
OpenShift v3 Technical OverviewNakayama Kenjiro
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますfukuoka.ex
 
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdfSumihiro Kagawa
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送Google Cloud Platform - Japan
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようTakuji Kawata
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 

Similar to 【JAWS-UG Shimane vol.5 】[ハンズオン]サーバーレスで作るチャットBot (20)

ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法
 
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
Movable Type から BOT を作ろう! ~ Data API と Microsoft BOT Framework ~
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
.NET ラボ 勉強会 C# でラインプラットフォーム開発
.NET ラボ 勉強会 C# でラインプラットフォーム開発.NET ラボ 勉強会 C# でラインプラットフォーム開発
.NET ラボ 勉強会 C# でラインプラットフォーム開発
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
Kubernetes Operator for vSphere VM
Kubernetes Operator for vSphere VMKubernetes Operator for vSphere VM
Kubernetes Operator for vSphere VM
 
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
OpenShift v3 Technical Overview
OpenShift v3 Technical OverviewOpenShift v3 Technical Overview
OpenShift v3 Technical Overview
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみよう
 
20121220cmblog seminar 03-fukuda
20121220cmblog seminar 03-fukuda20121220cmblog seminar 03-fukuda
20121220cmblog seminar 03-fukuda
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 

【JAWS-UG Shimane vol.5 】[ハンズオン]サーバーレスで作るチャットBot