※この記事はAWSアカウントが作成済みであることを前提としています。
#はじめに
この記事は、2019/2/11に行なった【学生大歓迎】プログラミング未経験者向け Node.js で LINE Bot 開発講座参加者の一部より「botを永続化したい」という要望を受けたため、bot永続化のためのオンラインハンズオンを追加で行なった際に使用した資料です。(2/11のハンズオンの際はngrokを使用したため最長8時間しか動きませんでした。)
#AWS Lambdaとは
AWS (Amazon Web Service)のサービス(Faas)で、サーバレスでNode.jsやPython等を動かす事ができます。
#システム構成
LINEサーバからのwebhookをAPI Gatewayで受け取り、それをLambdaの関数に渡す形になります。
#Botのチャネルを作ろう!
こちらの記事を参考にLINEBotのチャネルを作成して下さい。
#Lambdaの関数を作ろう!
- AWSマネジメントコンソールにアクセスします。
![スクリーンショット 2019-06-10 18.51.39.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F9ce884a5-d90e-d690-42d3-5bde39ae9c25.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c1a3dcb3b0e930b940eeb96ec399147b)
![スクリーンショット 2019-06-10 18.54.15.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fabe4a7e6-729e-3364-3a05-d545507e4e70.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=26ebd1ae0236ae7f1b30dc09c3be67e5)
![スクリーンショット 2019-06-10 18.54.22.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fc10f1d88-9cb9-27e0-ba5b-57c5620ed61d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=33549fe7eb528eead20b2fe5bc345f44)
![スクリーンショット 2019-06-10 18.55.21.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F23888832-4c22-61f3-8a6a-844de4c2b05e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b6c16b33b2096e9d1b1bb4e43621a774)
![スクリーンショット 2019-06-10 18.57.21.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F1764d614-cffa-9250-616d-33db7db1041b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=247b503a232ecfb022a2793f0ef15e95)
#API Gatewayの設定をしよう!
##APIを作成しよう
- 左上の「AWS」を右クリックして新しいタブで開きます。
![スクリーンショット 2019-06-19 20.51.49.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F7ef79766-a251-cbc0-9019-15f177320d3e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b9755ad3d7c2be0f96d561c996139663)
![スクリーンショット 2019-06-19 20.52.56.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F11b8a719-f65d-4426-2880-9bdaa086fdd6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5068f920472d5ef3c2f2dae1397313c9)
![スクリーンショット 2019-06-19 20.53.04.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F21bcfe4e-b89b-6aff-7dac-03d30d7ca1d3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3f51180fe057305131ef3a7925ed095d)
![スクリーンショット 2019-06-19 20.53.38.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F9cd0c827-e013-7319-f1bf-c961040e3f64.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=98744edcd101ff436e9369f383d135b3)
##APIの設定をしよう!
![スクリーンショット 2019-06-19 20.57.49.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F65d837bd-5a4b-a6f1-7373-e4f44b760148.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=47154a8ceeeb9f279ada8a4847ba549f)
![スクリーンショット 2019-06-19 20.57.56.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fe6821f46-2f57-e97f-2acc-283ff9478f03.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5afa89aec0376963516ef36738fc4a56)
![スクリーンショット 2019-06-19 20.58.00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F4a9b64e3-cd73-c0a6-9fd8-b3f328f3a773.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4296629dcea55e76aa78848dceb436a6)
![スクリーンショット 2019-06-19 21.02.03.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F91e11ea6-7cc4-5c31-b2fe-9fa147ebf806.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a37253b3af4550f7af455545838cba9f)
![スクリーンショット 2019-06-19 21.07.59.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fab01c8de-1c32-968c-e8c8-a0aec2c06ae3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=21bb07f10428e560bfc03405ef743642)
![スクリーンショット 2019-06-19 21.08.55.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F13589d1f-abf3-fcfb-e304-1910a4ffe07c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=93e2d2112bc7f957be2e6a053afc75ac)
![スクリーンショット 2019-06-19 21.09.44.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F9d757a31-440a-ee54-0aaa-adbdbaf8de1d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=74fccb3938738ad4b349dc1d54a840a9)
![スクリーンショット 2019-06-19 21.10.30.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fce7c09d2-50aa-a1c3-097a-a80af2ed7d03.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=887da46ed97f6bbd94179f8ceaacb357)
![スクリーンショット 2019-07-14 20.04.58.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fd8b1bdbc-a750-e7f8-5c52-62f0026ea5c1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=10a8ba555f45577c95b17573dc5cf4d9)
![スクリーンショット 2019-07-14 20.05.29.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F46b9792e-4372-b8b8-137c-82428145a62c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3aa14f6b95b5b38081d2fcaa1db7e628)
![スクリーンショット 2019-07-14 20.33.15.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fccce98a7-bdb7-c9eb-725c-8fce37f51912.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ff2afdd8d6272b9875e21a3950956771)
![スクリーンショット 2019-07-14 20.33.15.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F350254e4-a788-1786-c1ce-310b1f4fc8d4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=28019876a9e8a2c892cee8d2d3f1a300)
※リクエストが本当にLINEから送られてきたものかを確認するために署名検証を行う必要があります。(検証しなくてもBotを動かすことは一応可能です。)
X-Line-Signatureには、その検証を行うための署名が記載されています。
X-Line-Signatureがリクエストヘッダーに含まれていないリクエストはLINEからのものではないため、受け取る必要がありません。なので、APIGateway側であらかじめ弾く設定にしています。
#Botのコードを書こう!
##Lambdaにコードをアップロードしよう!
※Lambdaはインラインエディタを使用してブラウザ上で直接コードを書くことが可能ですが、今回はモジュールが必要になるので纏めてzipでアップロードしていきます。
- いよいよBotのコードを書いていきます。こちらのページを開いて「Clone or download」をクリックし、「Download ZIP」を選択して下さい。
- zipを解凍してください。
- 解凍して出てきたフォルダを開いて、中のファイルを纏めて圧縮します
![スクリーンショット 2019-07-14 19.42.05.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F543d7c81-c538-d354-7397-0f2444edfce3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=14f80fa691a110f83026c257d422cd77)
![スクリーンショット 2019-07-14 19.43.23.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F21f2f1a2-5fda-43ca-de63-4a65bc7ea953.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1e8e37e2941882f05068ac06fa327da0)
![スクリーンショット 2019-07-14 19.37.08.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F56cb3b1e-5877-d1d0-615e-aec6b714f5db.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=32d4f6f770b6eee32517e92011d85acf)
![スクリーンショット 2019-07-14 19.37.11.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F0c0a3afd-77e7-2706-a799-234b8dbd223f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d982c0956137d777aead15524f85f0ce)
![スクリーンショット 2019-07-14 19.40.06.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F469e3360-49a0-f7dc-8ba4-4eef19ec6b9e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8ed641b35a5fad9691550ab37e10602e)
![スクリーンショット 2019-07-14 19.48.14.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F92255e1a-863e-3cb0-0504-0fa38b19abaf.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=723a96c431436cc32fa41f118d3823d2)
![スクリーンショット 2019-07-14 19.48.18.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F8b8ef8a4-83bb-3ba7-6057-5160d46241b2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=116f19a977d1bcae37134ce7a8550a2e)
![スクリーンショット 2019-07-14 19.48.41.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F2b1bfb87-e471-d5dc-2fe0-21f25144dcaf.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d19bbe2a0a107c75ea563a8ad23f6c9b)
##環境変数にアクセストークンとチャンネルシークレットを入力しよう
※コードに直接アクセストークンを書くと精神衛生上良くないので、環境変数を使用します
- LINEDevelopersのBotのページを開き、アクセストークンの項目にある「再発行」を押して下さい
- 特に変更はせず、そのまま「再発行」を押します
- 出てきた文字列をコピーします
- 先ほど作ったLambda関数を開き、下の方にある「環境変数」のキーに
ACCESSTOKEN
と入力して下さい - 「値」には先ほどコピーした文字列を貼り付けます
- Botのページを開き、Channel Secretをコピーします
- Lambdaの下の方にある「環境変数」のキーに
CHANNELSECRET
と入力して下さい - 「値」には先程コピーした文字列を貼り付けます
- 右上の保存を押します
![スクリーンショット 2019-07-14 19.57.26.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F9f2b749f-0868-d9d7-e726-1d46a52febd0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f1424439210c8afaaea0e91174b52ca4)
##Webhook送信をオンにしよう!
※LINEからの通知を先ほど作ったLambda関数が受け取れるように、Webhookの設定をしていきます。
![スクリーンショット 2019-07-14 21.08.56.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F61a26b02-8d85-9524-676c-b0efa3ede477.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=03d16deaf41a886281b22b0a1365244a)
![スクリーンショット 2019-07-14 21.09.53.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fde24a6c9-1929-5aa6-8040-d5096cc4c002.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5f83a3c66aaaf841087824c429b261cf)
![スクリーンショット 2019-07-14 21.11.14.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F9df510b1-8ea9-fc59-f020-296cd37bc4b9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0a35fe5637fb5a557414370fbabc395d)
![スクリーンショット 2019-07-14 21.12.08.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fdeeea093-9a4e-f761-16ce-a9e8c6cd54d9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6d128655655dca2624c84b79772d3b7e)
※たまに反映されていない場合があるので、その場合は再度設定変更を行なって下さい
- 以下のような状態になっていれば設定完了です!
![スクリーンショット 2019-07-14 21.16.17.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2Fdb93d07f-f151-22bd-db35-749ff7ca4634.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=49baa70c28f5e3d656f74224b7939730)
#作ったBotを試してみよう!
- botのページに友達追加用のQRコードが載っているので、そこからbotを友達追加します
![スクリーンショット 2019-07-14 19.59.04.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F260292%2F20d125fa-4b6e-97d4-60ee-952070ef6341.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a955761351a4296a5b0e4cdbd06d44b5)
#おまけ
以下の資料の「おまけ」の手順で、「こんにちは」というメッセージが送られてきたら「Hello World」と返信して、「おはよう」と送られてきおたら「Good Morning!!」と返信するという事が出来ます。
https://qiita.com/shinbunbun_/items/b1d82f5bd85786a7f06e#%E3%81%8A%E3%81%BE%E3%81%91
また、以下の資料の「はじめに」〜「確認テンプレートを返信してみよう!」と同じ手順でテンプレートメッセージを返信することが出来ます。
https://qiita.com/shinbunbun_/items/81db9b7973553b2d665d
#前回ハンズオン参加者の方々へ
messageFuncは前回のハンズオンの際に使用したコードと全く同じになっています。