久しぶりのAzureFunctions記事です。この間、グラニでは更にFunctionsが増えてずいぶんと楽になりました。Function as a Service (FaaS) だけでも非常に助かるものです。もちろんLambdaのようなBackend as a Service (BaaS) にはまだまだ足りませんが、それでも素晴らしいサービスです。
さて、最近LambdaではあるのにAzure Functionsでは書いてなかったので、C# でSSLサーバー証明書の有効期限をチェックするものを公開します。
SSL サーバー証明書の確認
SSLサーバー証明書は、独自ドメインでHTTPSなサイトを建てる時などに付きまとうめんどくさい筆頭の1つです。何しろめったにないので殊更に厄介です。個人的に、DV証明書・EV SSL証明書はどうでもいいのですが企業では選択せざるを得ないこともあるでしょう。
グラニでは全面的にAmazon Certificate Managerを活用しており、基本的にAWSにおける証明書問題は生じません。AWS素晴らしいです。使てない方はぜひ検討してください。
しかし、Azure WebSitesが問題です。AzureにはACMに相当する機能もないので、仕方なく証明書をあげたりすることになります。メンドクサイ。
監視ソフトウェアやExcelで確認とか無理ですし、OpenSSLもなしでしょう。C# で一発で行きましょう。
サイト証明書の有効期限を確認
肝心のサイトの証明書状態の確認は非常にシンプルです。
https://gist.github.com/guitarrapc/0f2cfeba09a95647085a1180cf0c24aa
TimerTrigger による定期実行
TimerTriggerを使えば、外部からのイベントやリクエストなしにFunctionsを実行できます。function.jsonをファンクション名のフォルダ直下に作成します。
https://gist.github.com/guitarrapc/90b36ea511f3ede9e3b457e27086cbee
日付は、cron書式でUTCにて指定します。もしLocal Time Zoneで指定したい場合は、App SettingsでWEBSITE_TIME_ZONE
を指定しましょう。
後は先ほどのコードをAzure Functionsに組み込んだrun.csxを置くだけです。今回もAzureFunctionsIntroductionリポジトリにコードを追加しておきました。
実行テスト
Azure Portalで実行してみましょう。
うまく動いていますね。
2016-09-12T19:15:57 Welcome, you are now connected to log-streaming service. 2016-09-12T19:16:02.593 Function started (Id=c2036a4f-848c-4209-aa35-be555d917655) 2016-09-12T19:16:02.593 SSLCertificateExpireCheck timer triggered! 2016-09-12T19:16:02.812 There are no limit SSLs. SSLCertificateChecker finished without sending notification. Message : 2016-09-12T19:16:02.812 Function completed (Success, Id=c2036a4f-848c-4209-aa35-be555d917655)
期限を30日にしていますが、100日など伸ばすことでどうなるかを見ることもできます。
Timer設定も問題ありません。ここ1か月で設定画面に設定したTriggerごとの説明が追加されてわかりやすくなりました。
ちなみにDevelopment画面で、ファンクションのフォルダ内部を見たり直接アップロードも可能になりました。
AzureFunctions へのフィードバック
使っていれば苦しい部分も出てきます。幸いにもAzure Functionsチームは、私が過去に出会ったチームの中でも非常にアグレッシブでポジティブなチームです。つまり、フィードバックを投げれば何かしらの反応と改善が期待できます。
現在、使っていて誰もがである苦しさに関して2つIssueを挙げています。RunTimeのどこで改善が入るかわかりませんが、楽しみに待っていましょう。
これは、Continuous DeliveryをしているとExceptionが発生しても詳細がわからないことのフィードバックです。CD回りはいくつか他にもありますが、チームの温度間として結構クリティカルに感じているようなのでまとめて修正されそうです。
https://github.com/projectkudu/AzureFunctionsPortal/issues/439
これは先日のUI変更で、App Service Editor (以前のVisual Studio Online) のアクセスがほしいというものです。もちろん結局のところはUI変更に至るでしょうが、Azure Portalの最大の短所である遷移の遅さは苦しいので楽したいですね。
https://github.com/projectkudu/AzureFunctionsPortal/issues/535
まとめ
SSL証明書をはじめとしてドメインの期限など定期的に、でもめったにないもの。というのはまさにFaaSの出番です。動的にも確認でき、最も好ましい方法として定着すると嬉しいですね。
Runtime 0.5からF# も第一級サポートになったのでなんか適当に書いてみましょうかね。