久しぶりの 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に相当する機能もないので、仕方なく証明書をあげたりすることになります。メンドクサイ。
監視ソフトウェアやエクセルで確認とか無理ですし、OpenSSL もなしでしょう。C# で一発で行きましょう。
サイト証明書の有効期限を確認
肝心のサイトの証明書状態の確認は非常にシンプルです。
TimerTrigger による定期実行
TimerTrigger を使えば、外部からのイベントやリクエストなしにFunctions を実行できます。function.json をファンクション名のフォルダ直下に作成します。
日付は、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/439github.com
これは先日のUI変更で、App Service Editor (以前の Visual Studio Online) のアクセスがほしいというものです。もちろん結局のところはUI変更に至るでしょうが、Azure Portal の最大の短所である遷移の遅さは苦しいので楽したいですね。
https://github.com/projectkudu/AzureFunctionsPortal/issues/535github.com
まとめ
SSL 証明書をはじめとしてドメインの期限など定期的に、でもめったにないもの。というのはまさにFaaS の出番です。動的にも確認でき、最も好ましい方法として定着すると嬉しいですね。
Runtime 0.5 から F# も第一級サポートになったのでなんか適当に書いてみましょうかね。