Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CGI Perlでわかる!サーバレス

203,531 views

Published on

YAPC::Kansai 2017でお話をした、CGIでサーバレスを理解するというトークのスライドです

Published in: Technology
  • Be the first to comment

  • Be the first to like this

CGI Perlでわかる!サーバレス

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

×