先日、WebPayのアドベントカレンダーにて公開させていただいた組み込みRubyとWebPayでCAT端末の夢をみるという記事のコメントにて@matsumotoryさんから大変嬉しい「触発されて、simplehttpとhttprequestをHTTPSに対応しておきました。」というコメントを頂きましたので、私も触発されて「mruby-simplehttpのhttps対応」で何が変わったのかという話を書きたいと思います。
@matsumotoryさんには、爆速でhttps対応を取り込んでくれたことに心からお礼申し上げます。
それでは本題へと入って行きましょう。
httpsが使えるということ
今までのmrubyでは、私の拙い記事で紹介させていただいたようにSSLとソケット使って自前で通信をする必要があり、世の中にあふれるWebサービスをmrubyから楽しく使うことはできませんでした。
mruby-simplehttpは、今回の変更で以下のような記述でhttpsでホストと通信することが出来るようになりました。
p SimpleHttp.new("https", "www.google.com").request("GET", "/", {"User-Agent" => "mruby-simplehttp"})
WebPayのようなサービスに接続する場合も
p SimpleHttp.new("https", "api.webpay.jp").request("GET", "/api/v1/charges", {"Authorization" => "Bearer test_secret_eHn4TTgsGguBcW764a2KA8Yd"})
私が書いたエントリに比べれば、劇的に簡単にmrubyでWebPayを使えるようになっていますね。素晴らしいですね。
今日の当初の目的としてはここまでなのですが、ここからは@matsumotoryさんに敬意を表して@matsumotoryさんのライブラリ群をフル活用してみたいと思います。
mruby-aws-s3のhttps対応
simplehttpを使っているライブラリの中で以前からhttpsで通信していないことが気になっていたmruby-aws-s3というライブラリです。AWSのアクセスキーを平文でやりとりするというのはセキュリティ的にいただけないのでこれを機会に修正しましょう。githubでPRかけておきます。
で、言いたいことは
mruby-aws-s3というライブラリは、実は使いようによってはかなりの価値のある使い方をすることができます。
というのも、実はS3上のファイルを独自証明書で配信するには、月額600ドルかけてCloudFrontに独自証明書を導入しなければなりません。CDNとして使われる方は、別に大した価格ではないのですが、S3をホスティングや単純なファイルサーバとして使われている方にはかなり大きな金額です。
Custom SSL Domain Names and Root Domain Hosting for Amazon CloudFront
Amazon CloudFront の独自 SSL 証明書
nginxやapache向けに@matsumotoryさんが開発されているmod_mrubyやngx_mrubyとmruby-aws-s3を連携することでs3を使いながら独自証明書を安価に導入することが可能になります。詳しい解説はこれ以上行いませんが、一般的な使い方であればt1.microを利用したりELB使ったとしても600ドルよりは遥かに安価に実現できます。
(当たり前ですが転送量の多い人はメリットないよ)
普通にRubyでSinatraとかRackとかつないだらいいと思う方もいることと思いますが、Webサーバの組み込みモジュールとしてS3と密連携できるようになるのは個人的にはとても良いと思いました。
というわけで、mruby-simplehttpがhttpsに対応したことでよりmrubyの活用の幅が広がりましたね。@matsumotoryさんの活躍をお祈りして今日のアドベントカレンダーを締めくくらせていただきます。