先日のHokkaido.pmの帰りに時間が余ってしまったので、新千歳空港のロビーでダラダラしながら、SisimaiをAzure Functionsで動作させてみました。
Azure FunctionsでPerlが動く
Azure Functions上では、制約がありながらもPerlが稼働します。これは既にHokkaido.pmで発表した通りです。
Sisimaiとは
Sisimaiとは、バウンスメールの解析を行い、その情報を取得したりJSONに変換するためのライブラリです。 Perl版とRuby版が二条項BSDライセンスにて提供されており、GitHub上で開発されています。
本エントリではこれ以降、単にSisimaiと表記する場合は、特筆がない限りPerl版のp5-Sisimaiを指すものとします。
小さく堅牢なSisimaiに注目
ちょうどHokkaido.pmにSisimai作者のazumakuniyukiさんがいましたので、Sisimaiの依存モジュールについて聞いてみました。
わいとん:Sisimaiって依存モジュールどのくらいあるんです?
azumakuniyukiさん:確かJSONとClass::Accessor::Liteくらいだったんちゃうかなぁ・・・「小さく堅牢に」っちゅうのを心がけてるんで、そのくらいやったと思います。
実際metacpanのdependencyを見ても非常に依存が少なく、またXSを利用したモジュールに依存していません。Azure Functionsで稼働させる対象としては適任であると考えられます。
実際に作った
実は去年の夏にSisimaiに関連したエントリを公開しております。
当時はSisimaiが稼働するDockerコンテナを作りましたが、今年はSisimaiが稼働するサーバレスシステムを作りました。
Azure Portalにアクセスできる状態なら、Deploy to Azureボタンを押すだけでデプロイできるようにしてあります。
デプロイが終わったら、適宜バウンスメールが含まれたMailbox形式のファイルを以下のようにPOSTしてみてください。
1 | ENDPOINT_URL="https://yourfuncname.azurewebsites.net/api/sisimai?code=..." |
以下が動作イメージです。
作る上でキモとなった点
Sisimaiをどうやってインストールするか
まずローカル環境でcpanfile
を作って以下のような内容とします。
1 | requires 'Sisimai'; |
あとはcpm install
するとlocal
以下にSisimai
とその依存モジュールが入ってきます。
これだけです。
それらをどうやってアップロードするのか
基本的にはGitHubにあがっていれば、Functionsにそのまま落としてくることが可能ですので、ひとまずGitHubにおきました。
Azure Functions の継続的なデプロイというエントリにそのやり方が書いてありますので、開発中はこの方法でデプロイ済みのAzure Functionsにファイルをアップロードしていきました。
ARM Template
これが一番難しかったのですが、以下のドキュメントを読みながら地道に作っていきました。
- Azure リソース マネージャーのテンプレートの作成
- Export an Azure Resource Manager template from existing resources
- リソース マネージャーのプロバイダー、リージョン、API のバージョン、およびスキーマ
まとめ
小さく堅牢に作られたSisimaiをAzure Functionsにデプロイする方法を自動化し、数クリックでデプロイできるようにしました。またそのデプロイボタンを一般公開しました。
エラーメールの解析をサービスとして展開できるので、ぜひお試しいただけると幸いです。