わんくま同盟 熊本勉強会 #08
Azure Functions 使ってみた
関数プロキシを使って
REST APIっぽくを使ってみる
わんくま同盟 熊本勉強会 #08
自己紹介
名前 坂田 憲明
年齢 46歳
会社 ASD株式会社
職業 SE
主な仕事 クラウドを用いたWEBサービス開発
趣味 自転車(ロード) / プログラミング
プログラム歴 36年(無駄に長くやっています)
主に使うのは PHP / Python / Vue.js
過去には COBOL / Perl / FORTRAN なども
変わり種では G言語(NC旋盤用) もやりました
わんくま同盟 熊本勉強会 #08
経 緯
1.業務でAzure使うことなった
2.AzureとAWSでどのくらい違うの
3.とりあえずサーバレスで何か作ってみよう
4.APIならRESTfulだよね
わんくま同盟 熊本勉強会 #08
AWSとAzureのサービス価格比較
AWS
・Lambda
メモリ:128 MB
実行回数:30,000,000 回
実行時間:200 ミリ秒
11.63 USD/月
・API Gateway
最初の3億3,300万コールまで
100万回あたり4.25USD
Azure
・Azure Functions
メモリ:128 MB
実行回数:30,000,000 回
実行時間:200 ミリ秒
11.40 USD/月
・API Management サービス
Developer 48.03USD/月
BASIC 147.17USD/月
Standard 686.71USD/月
Premium 2,795.17USD/月
わんくま同盟 熊本勉強会 #08
料金比較して
関数アプリを作る分では大きな差はない。
規模の大きなサービスを立ち上げる時なら、Azureは
月額の上限が見えるので運用しやすいかも
開発の勉強がてら使用するには
API Managementサービスって高くない?
わんくま同盟 熊本勉強会 #08
代わりに使えるものってないの
AzureでAPI Managementサービス使わないでRESTfulっぽく
実装する方法ってないの?
各関数のfunction.jsonにrouteが定義できるからルーティング設
定でどうにかできないか試してみる。
結果として`/users/{id}`のようになーティングは記述できなかっ
た。
他に何かない?
わんくま同盟 熊本勉強会 #08
関数プロキシ
色々と検索してみたら、関数プロキシなるものを設定することで
RequestURLに含まれるパラメータとして関数に渡せるっぽい
理屈としてはアクセスURLをプロキシを下記のように定義すると
https://xxxx.azurewebsites.net/users/{id}
内部的に
https://xxxx.azurewebsites.net/api/userinfo?id={id}
という形に変換してパラメータを渡してくれるらしい。
わんくま同盟 熊本勉強会 #08
プロキシ設定
Node.jsだとバージョン上がる頻度高いから対応面倒だし、最近
よく使うしってことでPythonで関数を作成しデプロイ
Azureポータルのコンソールからプロキシの設定してみよう
Pyhtonはプレビュー版の為、読み取り専用・・・orz
わんくま同盟 熊本勉強会 #08
proxies.json
コンソールからプロキシ作成できなくても、方法あるはず!
ありましたproxies.jsonに記述してデプロイすれば行ける
とりあえず、パラメータ付きでAPIコールできるようにしよう
わんくま同盟 熊本勉強会 #08
proxies.json サンプル
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"userInfo": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/user/{*id}"
},
"backendUri": "https://xxxx.azurewebsites.net/api/getInfo",
"requestOverrides": {
"backend.request.method": "GET",
"backend.request.querystring.id": "{id}"
}
},
}
※赤文字の部分の記述ではまりました
わんくま同盟 熊本勉強会 #08
テストでもハマった
POSTMANを使ったテストで、GETもPOSTもリクエストパラメー
タを付きで呼び出して期待通りの結果が返ってきてる。
それじゃPOSTタイプの関数にリクエストボディに何か項目を設
定して、ボディの取得やってみるか
関数側にリクエストボディを受け取り、レスポンスでリクエスト項
目を返すように組んでデプロイ!
POSTMANでリクエストボディの項目を設定・送信
Internal ServerError
あれ?
原因はいつものクセでform-dataで送信してたけどそれがダメら
しく、rawでデータ整形して送信したらOKでした。
わんくま同盟 熊本勉強会 #08
今後の課題
・プロキシ使った場合のファイル送信
rawでファイル送信はどうすればいいのか?
base64エンコードとかすればいいの?
・コンソールではどこまでプロキシ設定可能なの?
今回はPythonでの実験だったので
そもそもコンソールを使ってない!
・proxies.jsonでどこまで設定できるのか?
API本体が出来上がってなくても、モック設定して
レスポンスを返したりできるらしい
わんくま同盟 熊本勉強会 #08
ご清聴ありがとうございました。

関数プロキシを使って REST APIっぽくを使ってみる