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

Weitere ähnliche Inhalte

Andere mochten auch

Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜鉄次 尾形
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTmaka2donzoko
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osakaazumakuniyuki 🐈
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuningrisou
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用純生 野田
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるレガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるsairoutine
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerlcharsbar
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたおさ OSA
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなしMITSUNARI Shigeo
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャazuma satoshi
 
マーケットプレイス・ガイドブック
マーケットプレイス・ガイドブックマーケットプレイス・ガイドブック
マーケットプレイス・ガイドブックMikihiro Yasuda
 
今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10Daiki Ichinose
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかIchito Nagata
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたTatsuro Hisamori
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれTatsuro Hisamori
 

Andere mochten auch (20)

Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LT
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れるレガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみた
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
マーケットプレイス・ガイドブック
マーケットプレイス・ガイドブックマーケットプレイス・ガイドブック
マーケットプレイス・ガイドブック
 
今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10今だからこそ振り返ろう!OWASP Top 10
今だからこそ振り返ろう!OWASP Top 10
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 
Riakmeetup2forupload
Riakmeetup2foruploadRiakmeetup2forupload
Riakmeetup2forupload
 
Html5j 8
Html5j 8Html5j 8
Html5j 8
 
YAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきましたYAPC::Europe 2014 に行ってきました
YAPC::Europe 2014 に行ってきました
 
YAPCEurope2014-myfinder
YAPCEurope2014-myfinderYAPCEurope2014-myfinder
YAPCEurope2014-myfinder
 
今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ今更聞けないストリーム処理のあれとかこれ
今更聞けないストリーム処理のあれとかこれ
 
Mashup Awards 2016
Mashup Awards 2016Mashup Awards 2016
Mashup Awards 2016
 

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