O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

203.781 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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 と考えると わかりやすい

×