LoginSignup
5
6

More than 3 years have passed since last update.

【Ruby + AWS】Amazon EC2インスタンスでLINE Bot Server構築してみた

Last updated at Posted at 2019-05-23

はじめに

こんにちは。ここ最近ですが、仕事でLINE Botを作ることになりましたので、必要な設定を共有できればと思います。
なお、この記事ではあくまで概念とLINE Bot Serverを構築するまでの準備のレベルを書こうと思うので、あえてBot Server部分のコードは省略します(というか、書き始めたばかりなので新規に埋め込んだコードがほとんどない)。

追記

よくよく考えたら、概念図のポンチ絵、左部分おかしいですね、、、
LINEのネイティブ・WebアプリケーションがあってそこにユーザとBotがいるので、本来は入れ子にするべきでしたね。後日、修正します。

LINE Botの概念図

手書きのポンチ絵なのて、字が下手な部分はご愛嬌...
なお、このポンチ絵は以下の3つの資料を参考に書きました。

https://developers.line.biz/ja/docs/messaging-api/overview/
https://developers.line.biz/ja/docs/messaging-api/getting-started/
https://developers.line.biz/ja/docs/messaging-api/building-bot/

57748388-ba4a6600-7714-11e9-8fde-2082f833de7b.jpg

当初、弊社のWebアプリケーション用のサーバとは別にLINE PFがアクセスするエンドポイント用のサーバを用意する必要があったので、スクリプト言語で書く必要もないかなと考えGoでやろうかと言っていましたが、それほど大規模なアクセスを想定していないこと、既存のアプリケーションと一旦統合するような設計を採る事にしたため、RubyでBot Serverを作る事にしました。

環境の確認

  • OS: Amazon Linux AMI release 2018.03
  • Nginx: 1.14.1
  • Ruby: 2.4.6

Route 53でコールバック用に使うレコード名を登録 || セキュリティグループの設定

上記のLINE PF(プラットフォーム)がコールバック用のエンドポイントとなるURLにアクセスできるようにレコード名を登録してあげます。また、グローバルにアクセスできるようにSecurity Groupの設定も行って下さい。

EC2インスタンス上でLINE Bot Serverを設定

Bot Server検証用の環境を構築しようとした矢先に気づいたのですが、LINE Botではコールバック用のURLはHTTP over SSLしか対応していない事が発覚し、検証環境でもSSL証明書を導入する必要が出てきました。そのため、EC2インスタンス単体で証明書をインポートする機構が必要だったため、今回はLet's Encryptで導入する形を採りました。

SSL証明書の導入(Let's Encrypt)

基本的には、下記の部分のコマンドの引用です。

https://certbot.eff.org/lets-encrypt/centosrhel6-nginx

  • certbot-autoの導入
% wget https://dl.eff.org/certbot-auto
% sudo mv certbot-auto /usr/local/bin/certbot-auto
% sudo chown root /usr/local/bin/certbot-auto
% sudo chmod 0755 /usr/local/bin/certbot-auto
  • 証明書の発行
% sudo /usr/local/bin/certbot-auto --nginx certonly --debug
  • NGINXをリバースプロキシとして設定し、SSL証明書をインポート
server {
    listen       80;
    server_name  ***.***.***;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }
}

server {
    listen 443;
    ssl on;
    server_name ***.***.***;
    ssl_certificate /etc/letsencrypt/live/***.***.***/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/***.***.***/privkey.pem;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:3000;
    }
}
% sudo service nginx restart

RubyによるBot Serverの構築

LINEリポジトリから公式に提供されているhttps://github.com/line/line-bot-sdk-rubyというRuby用のBot Kitをインストールします。
なお、Bot Kitは、他にも多くの言語をサポートしている模様ですので、基本的なLINE Botの作り方は採用する言語に合わせてBot Kitを用意すればOKです。

echo botによる動作確認

各Bot Kitリポジトリのexamplesディレクトリ配下にサンプルコードが用意されています。今回は、echobotでユーザメッセージをそのまま鸚鵡返しするBot Serverを採用し、動作確認を行います。

https://github.com/line/line-bot-sdk-ruby/tree/master/examples/echobot

IMG_1413.jpg

echo Botによる動作確認が取れました。

まとめ

これまた、設定部分の所しかかけていませんが、これからどんどんコードを書いていこうと思います。

因みに、line-bot-sdkの事を、Bot Kitって言っているのは、プラモデルを作るのと同じように、「部品が用意されていて、それを組み合わせて静的なモデルを完成させる」感覚になっているので、ライブラリというよりツールキット(Bot用だからBot Kit)という言い方しています。

まぁ、そんな与太話はどうでもいいと思うので、中身を詳細に書き次第、改めて記事を書いていきます。
それではまた。

参考文献

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6