しばやん雑記

ASP.NET Core とメイドさんが大好きなフリーランスのプログラマーのブログ

Functions

Durable Functions の Activity を安全に呼び出すためのプロキシを作った

Durable Functions が相変わらず凄く便利なので、いろんな部分で使っています。しかしヘビーに使うにつれて、アクティビティ関数を呼び出す部分で事故ったり、非常に冗長だと感じるようになってきました。新しい Function をテンプレートから作成すると、以…

Azure Functions Consumption と SQL Database Serverless の組み合わせは相性が良い

プレビュー中の SQL Database Serverless は設定した時間アイドルが続くと、自動的に停止するように構成できます。Serverless Tier の説明はドキュメントや SE の雑記を見てください。アイドルが続くと停止してしまいますが、新しく接続したタイミングで復帰…

Durable Functions v2 で追加される Durable Entities を実際に動かして学んでみた

Build 合わせでリリースされた Durable Functions v2 ですが、Typed Invocation が入ったバージョンを待ってたら 1 ヵ月が過ぎようとしてたので、諦めて現行バージョンで Durable Entities を学ぶことにしました。ちなみに Durable Entities 以外に Storage …

Azure Functions 向けに App Center Push を簡単に扱える拡張を作った

de:code 2019 の準備からの逃避として App Center Push を扱う Azure Functions 向けの拡張を書きました。単に IAsyncCollector<T> を提供して、REST API を呼ぶだけの簡単な実装です。SignalR Service の実装を調べながら作ったので構造はほぼ同じです。Azure </t>…

Azure Functions v2 の Dependency Injection を使って設定値を上手く扱いたい

Build 2019 に合わせて Azure Functions v2 で Dependency Injection が正式にサポートされましたね。これまでも static を外して WebJobsStartup を書けば使えていましたが、DI 向けに整理されました。ドキュメントがあるのでそっちを読んでおいてください…

Azure Functions の Premium Plan が Public Preview に

去年から Private Preview になっていた Azure Functions の Premium Plan が Public Preview に移行しました。ベースとなっている Premium V2 とはスケーリングの仕組みと課金体系が異なっているので、Consumption だとパフォーマンス不足なので App Servic…

Durable Functions のエラーハンドリングと向き合う

Durable Functions は async / await で複雑なフローを簡単に書けるので便利ですが、エラーハンドリング周りに少し癖があるので基本的な処理方法をまとめておきます。ドキュメントはありますが、基本的すぎることしか書いてないです。以下の内容は Durable F…

Durable Functions のオーケストレーターが失敗したことをキャッチしたい

Durable Functions ではアクティビティが失敗した場合にはオーケストレーターで例外が投げられるので、try ~ catch を使って簡単にハンドリングしたり、アクティビティの実行に CallActivityWithRetryAsync を使えばいい感じにリトライもしてくれます。以下…

Azure Functions v2 でインスタンスメソッドも Function として利用可能に

先週リリースされた Azure Functions Runtime 2.0.12265 からは、インスタンスメソッドでも Function として扱われるようになりました。これまでは静的メソッドしか使えなかったので、モックしにくいとかいろいろ言われていたと記憶しています。リリースノー…

Azure Functions Proxies で実現出来ること

前にハッカソンを行った時に Azure Functions Proxies 周りの挙動が気になったので、一通り確認して気になったことを軽くメモとして残します。まずは公式ドキュメントと牛尾さんの Qiita を読めば大体は理解できるはずです。Azure Functions Proxies は名前…

Azure Functions でも HttpTrigger でモデルバインディングを使って楽をしたい

ASP.NET Core MVC だと普通に使っているモデルバインディングですが、Azure Functions の HttpTrigger でも近い形で使えるようになってます。テンプレートでは HttpRequest から自前でパースしてますが、ランタイムに任せることが出来ます。使い方は Core MV…

あえて Durable Functions でオーケストレーターの完了まで待つ Web API を作る

通常 HttpTrigger で起動する Durable Functions を作成すると CreateCheckStatusResponse を使って、インスタンス管理用のエンドポイントを含んだレスポンスを返すと思います。テンプレートから作成したコードも以下のようになっているはずです。 [Function…

Azure Functions v1 から v2 への移行手順メモ

Azure Functions のランタイムは v1 がほぼ更新が無くなり、最近は v2 の更新ばかりなので、近いうちに v1 の実質 EOL のお知らせとかが出るのではないかなと思ってます。v2 ランタイムは安定したものになっているので、早めに移行しておいた方が良いでしょ…

Azure Functions v2 は .NET Standard から .NET Core へ

ちょっと前に Azure Functions v2 で netcoreapp2.1 が使えるようになったと書きましたが、気が付いたらテンプレートもアップデートされ、デフォルトが netcoreapp2.1 になっていました。当時はデバッグに問題がありましたが、最新のツールへアップデートす…

Azure Functions v2 で netcoreapp2.1 が使えるようになった

.NET Standard 2.0 で書く必要があった Azure Functions v2 ですが、最新版の SDK を使うと .NET Core 2.1 向けにビルド出来るようになりました。正確には netcoreapp2.1 をターゲットに設定出来ます。先に SDK をリリースして、問題なければテンプレートも …

Azure Functions の各 Trigger の動作が不安定な時にやること

最近、新しくデプロイした Azure Functions の TimerTrigger が何故か発火してくれない現象に悩んでいました。実際に Monitor で実行ログを確認すると、時間がめちゃくちゃになっています。Consumption の場合は App Service Plan とは違う仕組みで動いてい…

Azure Key Vault を使って Let's Encrypt 周りを自動化する Function を作った話

Twitter で世界のやまさが Azure Front Door を試していて、Key Vault 向けにも Let's Encrypt の証明書を自動でいい感じに出来れば良いみたいなオーラを感じ取ったので、前に作った App Service 向けのものからコピペで新しく Key Vault 向けを作ってみまし…

Azure Functions v2 が GA しました

Ignite 2018 で大方の予想通り Azure Functions v2 ランタイムが GA しましたね。実際には先週に GA 版と思われるランタイムがデプロイされていたので、App Settings の設定を間違えていなければ既に GA 版ランタイムで動いているでしょう。v2 では .NET Cor…

Azure Functions で SendGrid の Dynamic Templates を使う

この間書いた SendGrid の Dynamic Templates ですが、今朝に対応した SendGrid の C# クライアントがリリースされていたので、早速 Azure Functions の SendGrid バインディングで使ってみました。Dynamic Templates 自体については前回のエントリを参照し…

Azure Functions の Key Management について調べた

Azure Functions で HTTP Trigger や Webhook を使う時に指定する API Key ですが、主に Durable Functions を使う時に悩んだのでメモとして残しておきます。Portal で適当な関数を選んで URL を取得する時に、どのキーを使うか選べます。このキーはユーザー…

Durable Functions v1.6 の Rewind API を使うと失敗した関数から再実行が可能に

Azure Functions v2 の Breaking changes に合わせて Durable Functions v1.6 がリリースされました。今回の Breaking changes は Run From Package で配布している場合に地味に大変でしたが、その話はまた今後どこかで書こうかと思いますが需要なさそう。If…

Let's Encrypt 周りの自動化を行う Azure Functions の正式版をリリースした

前に作った Let's Encrypt の自動化を行う Azure Functions ですが、あれからもちょいちょい弄り続けた結果、先日やっと正式版を出せました。いろんなバグやよくわからない Azure REST API の仕様などを乗り越えてきました。今回の正式版リリースでは以下の…

Azure Functions の新しい Run-From-Zip の仕組みと活用方法

Visual Studio 2017 の 15.8 で Azure Functions の Zip Deploy と Run-From-Zip に対応したので、そろそろちゃんとブログにまとめておこうかと思いました。デプロイのタスク定義は Azure Functions の SDK に含まれているので、他のプロジェクトでは Zip De…

Azure Functions と Application Insights を同時に ARM Template でデプロイする

今の Azure Functions は Application Insights が無いとモニタリング周りが成り立たないですが、ARM Template を使うと単独でデプロイされるので同時に Application Insights を作るようにします。Azure Functions の Consumption Plan で作る場合のサンプ…

Azure Functions v2 で .NET Core (netcoreapp2.0) が使いたい

絶賛プレビュー中の Azure Functions v2 では .NET Standard 2.0 を使って開発が出来ますが、最近は .NET Standard 2.0 では API が不足していて困るケースが出てきました。具体的には TFM として netcoreapp2.0 となる .NET Core App を使いたいわけです。…

AppVeyor と CircleCI 2.0 を使って Azure Functions v2 の CI/CD を行う

GitHub を使って Azure Functions の管理をしている場合には、やはりデプロイは自動化しておきたいです。VSTS は標準で対応してるみたいですが、AppVeyor は見た記憶がないので試しました。少し試した感じでは WebDeploy Package を Azure Functions プロジ…

Azure Functions のコールドスタートを Application Insights で確認してみる

何かと(一部?で)話題になる Azure Functions のコールドスタートが非常に遅いという話ですが、App Service Team Blog にてどのような動きとなっているか解説記事が公開されていました。ぶちぞう RD のアンテナは高いので、フォローしておくと有益な情報が…

Application Insights を利用した Durable Functions の診断を試してみた

仕事でも Durable Functions を使っていますが、一般的な HttpTrigger などと異なり Durable Functions は実行される仕組みが特殊なので、Azure Functions のログだけでは分かりにくいことが多いです。なので、とりあえず Application Insights は有効にして…

Azure Functions v2 でアプリケーション設定と接続文字列を読み込む

.NET Framework 版では ConfigurationManager を使っておけば、アプリケーション設定と接続文字列を App Service がいい感じに環境変数からオーバーライドしてくれましたが、.NET Core 版の Azure Functions を使っている場合はクラスが無いので調べました。…

Durable Functions を使って時間のかかる処理を非同期で行う

前回は Durable Functions について大雑把に試したりしていましたが、ちょうど今仕事で Durable Functions を適用するのにちょうどよいタスクがあったので、実際に使ってみることにしました。内容はタイトルの通りです。Durable Functions については前回の…