SlideShare a Scribd company logo
1 of 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
と考えると
わかりやすい

More Related Content

Viewers also liked

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
 

Viewers also liked (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
 

Recently uploaded

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Recently uploaded (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

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