Advent of Code 2018 Day1 で OpenResty に入門した
Advent of Code [https://adventofcode.com/] というものを教えてもらったので, 良い機会なので Lua で書いて OpenResty に入門した.
問題の解説とかは特にしない.
公式ドキュメントの「Getting Started」のプラスアルファくらいの内容.
ロジックが書ける Nginx くらいの認識だったが, 色々調べてみて夢広がった.
この感動をみなさんに伝えたかった.
環境
- Mac(OS X 10.13.6)
- OpenResty(1.13.6.2)
- 必要なものが全部(Nginx とか Lua とか)入ってるのが OpenResty の良いところ.
- 公式ドキュメントを参考に(https://openresty.org/en/installation.html)
- もし Mac を使っていれば Homebrew でもインストールできる
- 私は asdf を利用した
- https://github.com/smashedtoatoms/asdf-openresty
- もし Mac を使っていれば Homebrew でもインストールできる
本編
ディレクトリ構成
├── input.txt
├── logs
├── conf
│ └── nginx.conf
└── lua
└── part1.lua
- input.txt
- Advent of Code の input データ
- OpenResty とは関係ない
- Advent of Code の input データ
- logs
- nginx のログ出力先ディレクトリ
- error.log とか access.log とか
- conf/nginx.conf, lua/part1.lua
- 下記で説明
conf/nginx.conf
nginx の設定ファイル.
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
server {
listen 8080;
location / {
default_type text/html;
# lua ファイルパス指定
# nginx の起動オプション(p)にカレントディレクトを指定するため,
# カレントディレクトリからの相対パス
content_by_lua_file lua/part1.lua;
}
}
lua/part1.lua
ngx.req.read_body()
local d = ngx.req.get_body_data()
local result = 0
for v in string.gmatch(d, "(.-)\n") do
result = result + tonumber(v)
end
ngx.say(result)
実行
nginx 起動
$ openresty -p `pwd`/ -c conf/nginx.conf
リクエスト
$ curl -X POST --data-binary @input.txt http://localhost:8080/
445
感想
- 単一機能のマイクロサービスとかは OpenResty で良さそう
- OpenResty の Github とか awesome-resty を見てると夢が広がる
- OpenResty[https://github.com/openresty]
- awesome-resty[https://github.com/bungle/awesome-resty]