CGI Perlでわかる!サーバレス
-
Upload
tatsuro-hisamori -
Category
Technology
-
view
287 -
download
0
Transcript of CGI Perlでわかる!サーバレス
![Page 1: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/1.jpg)
CGI/Perl でわかる! サーバレス
Tatsuro Hisamoriid:myfindergithub.com/myfindertwitter.com/myfinder
![Page 2: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/2.jpg)
YAPC::Kansai 2017 のテーマ
温故知新昔の事をたずね求め(=温)そこから新しい知識・見解を導くこと
![Page 3: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/3.jpg)
今日お話しすること
•前半•“ 温故” = CGI / Perl
•後半•“ 知新” = Serverless
![Page 4: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/4.jpg)
今日の想定対象
•サーバレス的なものに触ったことがない人•サーバレスがいまいちわからない人•サーバレス的なものにこれから取組みたい人
![Page 5: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/5.jpg)
Server = サーバ , less = ???
•サーバなきゃサービスできない•あたりまえ•サーバレス ≠ サーバ無し
•よりサーバを意識しない•もっとコードに集中する•そのための環境
![Page 6: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/6.jpg)
サーバレスって盛り上がってるの?
2015/10
2015/11
2015/12
2016/01
2016/02
2016/03
2016/04
2016/05
2016/06
2016/07
2016/08
2016/09
2016/10
2016/11
2016/12
2017/010
2
4
6
Serverless にマッチしたイベント数
イベント数
出典: https://www.dropbox.com/s/3975vp9kmkxg9l1/azure を使った開発でわかったこと .pptx?dl=0
2016 年 8 月 9 月から急に盛り上がり始めた。この頃ちょうど Serverless Meetup が国内でも始まったタイミング。先行した AWS Lambda の事例や、その他クラウドの対応が本格化。
![Page 7: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/7.jpg)
温故知新 の “温故”
CGI で Perl
![Page 8: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/8.jpg)
CGI ?
•Common Gateway Interface•Web サーバでプログラムを動かす仕組み•環境変数と標準入出力が扱える言語なら OK
•RFC 3875
![Page 9: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/9.jpg)
CGI プログラムの動作
Client
- Browser- Program
Server
- HTTPd- inetd
CGI
- perl- etc
サーバ側環境変数
標準入出力リクエスト
![Page 10: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/10.jpg)
例 ) Apache + Perl で CGI• httpd.conf( から読み込まれているもの )
• Directory• どのディレクトリにあるファイルを対象とするか
• Options +ExecCGI• 対象ディレクトリ内のファイルを CGI として実行できるようにする• あと必要なら AddHandler でどの拡張子のファイルが CGI かも指定する
• CGI プログラム• レスポンスヘッダ
• 典型的には Content-type や Content-length など• レスポンスボディ
• Content-type で指定しているデータ本体、典型的には HTML や画像、 JSON等
http://httpd.apache.org/docs/2.0/ja/howto/cgi.html
![Page 11: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/11.jpg)
裏側は何が起こっているのか
• 環境変数• クライアントからわたってくる情報や、サーバ自身がどのように動
いているかの情報が入っている• $ENV{'HTTP_USER_AGENT'};• $ENV{‘REQUEST_URI’};
• 標準入出力• 標準入力からは POST リクエストのデータを受け取る
• read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
• 標準出力へはレスポンスを出力する ( 前述の CGI)• #!/usr/bin/perl
print "Content-type: text/html\n\n";foreach $key (keys %ENV) { print "$key --> $ENV{$key}<br>";}
![Page 12: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/12.jpg)
CGI がやってくれないこと
•認証 (API Key)•スケールアウト•デプロイ環境の整備•実行管理•モニタリング環境の整備
![Page 13: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/13.jpg)
CGI が出てきていた時代
•ずっと起動しているとサーバリソースが mottainai
•利用頻度が不定な業務上必要なプログラムがある•それらはいつ叩かれるか不定•レイテンシの重要度は低かった
![Page 14: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/14.jpg)
温故知新 の “知新”
CGI/Perl で学ぶサーバレス
![Page 15: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/15.jpg)
Perl がちゃんと活躍できそうな基盤と理由
•Microsoft Azure Functions•Bash(MINGW64) 環境•ランタイムがオープンソース= どのようにメッセージが渡ってくるかが公開されている
•Openwhisk•こちらも実装がオープンソース•Docker が使える
![Page 16: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/16.jpg)
Perl+Azure でサーバレスをやる動機
•連携できるサービスが多い•NoSQL, Search, API, Storage, Queue, http(Webhook), Twillio, etc
•面倒なことを面倒見てくれる•スケール•認証•デプロイ環境
![Page 17: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/17.jpg)
Azure Functions の動作 (HTTP トリガの場合 )
Client
- Browser- Program
Trigger
- HTTP- etc
Function
- perl- etc
Function App
環境変数
ファイル- $req- $res
リクエスト
![Page 18: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/18.jpg)
例 ) Azure Functions + Perl でサーバレス• function.json
• bindings -> 連携サービスの記述
• type -> イベントの発火や処理後の出力の記述
• run.sh• 現状エントリポイントの対応が bash で、これは残念ながら決め打ち
• func.pl• 処理本体
![Page 19: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/19.jpg)
裏側は何が起こっているのか
• 環境変数• クライアントからわたってくる情報や、サーバ自身がどのように動
いているかの情報が入っている• REQ_QUERY_*
• クエリパラメタ• REQ_HEADERS_*
• リクエストヘッダ
• ファイル• リクエストファイルからは POST リクエストや、連携するサービス
からのデータを受け取る• 環境変数 $REQ で指定されるファイルパス
• レスポンスファイルへはレスポンスを出力する ( 前述の CGI)• 環境変数 $RES で指定されるファイルパス
https://github.com/Azure/azure-webjobs-sdk-script/wiki/function.json
![Page 20: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/20.jpg)
その他やってくれていること
•認証 (API Key)•スケールアウト•デプロイ環境の整備•実行管理•モニタリング環境の整備
![Page 21: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/21.jpg)
もうちょっとまっとうにデプロイする例
•Sisimai
![Page 22: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/22.jpg)
サーバレスで我々が手に入れるもの
•スケール•真の従量課金•単機能に分離されたシンプルなコード•コーディングレスでの多サービス連携
•必要なコードだけに集中する環境
![Page 23: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/23.jpg)
サーバレスを考えるべき時
•利用頻度が不定な業務上必要なAPI( プログラム ) がある•それらはいつ叩かれるか不定•レイテンシの重要度は低い
•CGI 同様、それでなんでもかんでも解決するわけではない
![Page 24: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/24.jpg)
今日お話ししたこと
•“ 温故知新”•サーバレスは CGI/Perl から紐解く“再発見 +α”と考えると理解しやすいと思う
•古の知識は新しいことを理解するのに役立つ ( こともある )
![Page 25: CGI Perlでわかる!サーバレス](https://reader036.fdocument.pub/reader036/viewer/2022062503/58ce97e71a28ab8c3b8b6b73/html5/thumbnails/25.jpg)
サーバレスとは21 世紀の CGI/Perlと考えるとわかりやすい