しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

Functions

Azure Functions で ReadyToRun を有効化してコールドスタートの高速化を図る

以前に Azure Functions のアップデートで ReadyToRun が使えるようになったと書きましたが、64bit OS 上では win-x64 向けの ReadyToRun コンパイルしか行えなかった問題が直ったので真面目に計測しました。ReadyToRun の説明は既に何回か書いたので省略し…

Azure Functions におけるスケーリングの基本的な考え方

最近は Azure Functions でのスケーリングに関する質問をよくされるのと、自分自身が仕事で効率良くスケーリングが可能な Function 実装を行う必要が多かったのでまとめておきます。今回はスケールアップではなく、スケールアウトの方を指しています。事前に…

Azure Functions におけるロガーの扱いとフィルタの注意点

最近の Azure Functions 開発ではバインディングやトリガーなどに必要なものだけをメソッドのパラメータとして定義して、それ以外は全て DI を使ってコンストラクタから取るようにしていますが、Azure 上のみロガーから Application Insights に送信されない…

Visual Studio で Azure Functions を作成すると文字化けする問題を EditorConfig で直す

Visual Studio や Azure Functions Core Tools などで新しい Azure Functions を作成すると、一般的な C# クラスとは異なり UTF-8 BOM 無しのファイルが生成されます。UTF-8 BOM が必要なのかどうかは議論しませんが、C# では UTF-8 BOM が無いとマルチバイ…

2020 年 8 月の Azure Functions Live で発表されたアップデート

2020/8 の Azure Functions Live でかなりインパクトの大きいアップデートについて話があったので、触れておきたいと思います。Azure Functions でイマイチだと思っていた部分がかなり改善されているので、今後は使うのが当たり前になりそうな機能ばかりです…

アプリを Azure Government と Azure China に対応させつつ ARM Template でデプロイする

日本在住であれば関わる機会がほぼないと思われる Azure Government と Azure China ですが、OSS で Azure 向けアプリを出していると稀に対応せざるを得ないときがあります。今回は App Service と Key Vault の Acmebot で対応する機会がやってきました。普…

Azure Functions (Premium / ASP) から Private Endpoint を使う際に必要な設定

Twitter にて SQL Server と金麦で有名なムッシュが Premium Plan で WEBSITE_VNET_ROUTE_ALL が使えないと呟いていて、いろいろ気になったので環境を作って試してみました。WEBSITE_VNET_ROUTE_ALL は Private Link や Route Table などを使う際に必要とな…

2020 年 10 月に既存の Azure Functions v2 は v3 (.NET Core 3.1) に更新されます

Azure Functions v2 もサポートが継続されるみたいな話を見た気がしますが、既存の Function v2 は使用している .NET Core バージョンの EOL に伴って v3 にアップグレードされるようです。今年の 10 月に行われる予定のようですが、例によってリージョンに…

Azure Functions に Options のバリデーションを追加する

ASP.NET Core で導入された Options パターンを使ったアプリケーション設定ですが、IConfiguration と DI を導入すれば使えるので最近は Azure Functions の Trigger に関係ない部分で使っています。Azure Functions では IConfiguration を簡単に取れないの…

Durable Functions の E2E 分散トレーシングは最高だった話

恐らく最初に話をしてから 2 年近く経過している気がしますが、ついに待望の Durable Functions での E2E 分散トレーシングがプレビューとしてリリースされました。牛尾さんの努力の結晶とも言います。α リリースと言われていますが、現時点での完成度はかな…

Azure Functions でカスタム HTTP ヘッダーや HSTS のグローバル設定を行う

ドキュメント化されていないようですが、Azure Functions でも host.json によるカスタム HTTP ヘッダーの追加と HSTS の設定が行えるようようになっていました。Function App 全体で適用されるので、セキュリティに関係するヘッダーを追加するには最適です…

Azure App Service へのカスタムドメイン追加方法が変更されているので注意

何気なく Azure Portal から App Service を開いてみると、カスタムドメインのブレードに見慣れぬ Custom Domain Verification ID という項目が増えていました。一昨日ぐらいまでは出ていなかったので、本当に最近追加されたようです。タイミング的に Build …

Durable Functions の Status Query API を独自に実装する

Durable Functions は最強に便利なので適した部分にはガンガン使っていっているのですが、REST API として提供したい場合には Internal な API が漏れ出てきてしまうので、実行結果のレスポンスが微妙にハンドリングしにくいと思うことが増えてきました。具…

Azure Functions SDK 3.0.4 以降を使う場合は依存関係に注意

今月頭にリリースされた Azure Functions SDK 3.0.4 では Function Runtime が持っているアセンブリを、Function のデプロイパッケージから除外するという実装が追加されています。ASP.NET Core 周りの明らかに必要ないだろうというアセンブリがごっそり除外…

Azure Functions v3 で快適に REST API を書くためのライブラリを公開した

前にサンプルコード的に書いた REST API を作りやすくするコードを、ちゃんとライブラリとして切り出して NuGet で公開するようにしました。使い方とかは前回と変わっていないので、新規追加した点についてだけ書きます。リポジトリは前回と同じなので、興味…

Durable Functions を使って実行時間が長い処理の進捗をクライアントに返す

既に何回も書いていますが Durable Functions は非常に便利で、並列処理や時間のかかる処理をスケーラブルかつ高い信頼性を保ったまま実行できます。並列処理の場合は全体として処理時間は短くなる傾向にあるのでまだ良いのですが、時間のかかる処理を書いた…

Azure Functions v3 向けに REST API を作りやすくするサンプルコードを書いた

最近は Azure Functions でサクッと HttpTrigger を使って REST API を書くことが多いですが、ASP.NET Core のように API 実装に必要な機能が揃っていないので、毎回同じようなコードを書いて対応してました。具体的にはリクエストをモデルにバインドする部…

Azure App Service の .NET Core 3.1 対応と Azure Functions v3 が Go Live リリース

.NET Core 2.2 と 3.0 の EOL が近づいてきていますが、App Service と Azure Functions は無事に年内に LTS となる .NET Core 3.1 への対応が完了しました。特に 2.2 の EOL は今年中なので、サクッと .NET Core 3.1 へのアップデートを行っておくと良いで…

Azure Functions v3 で .NET Core 3.1 が利用可能になった

Ignite 2019 のタイミングで Azure Functions v3 のプレビューが正式に公開されましたが、Azure Functions SDK 側の問題で .NET Standard 2.1 ターゲットのライブラリ*1が使えなかったので弄って来ませんでした。その後 Runtime も一時的に非公開になりまし…

Azure Functions と Append Blob の組み合わせは相性が良かった話

ここ最近は Azure Functions と Append Blob を組み合わせて、非常に便利かつスケーラブルな処理をシンプルなコードで書くことが多かったので紹介します。割と地味な立ち位置の Append Blob ですが、Serverless や Event-driven なコードとの相性が良かった…

Ignite 2019 で発表された Azure App Service のアップデート

Surface Pro X を買うためにハワイに行ってたのでキャッチアップが遅れましたが、個人的な興味を持っている App Service 周りに関して Ignite 2019 での発表を軽くまとめました。App Service Team のブログに関連するセッションリストが載っているので楽です…

ARM Template を使って Azure Web Apps / Azure Functions の作成と同時に Zip Deploy まで行う

昔から ARM Template では Web Deploy を使ったトラディショナルなデプロイに対応していましたが、ちょっと前に Windows の Web Apps と Azure Functions では Zip Deploy が使えるようになっていたようです。ちなみに Web Deploy を使ったデプロイは、昔か…

Easy Auth を有効にした Azure Functions と ClaimsPrincipal バインディングの挙動を確認した

API Management を使えば Azure AD を使った認証をサクッと有効化出来ますが、もっとライトに組み込みたいと思ったので Azure Functions の機能を使って同じように実現できるかを調べました。当然ながら Easy Auth は App Service の機能なので、Azure Funct…

.NET Core 3.0 をインストール後に Azure Functions のデプロイが失敗するケースがある

タイトルの通りですが、.NET Core 2.2 では問題なくデプロイ出来ていた Azure Functions のプロジェクトが、.NET Core 3.0 のインストール後に失敗するケースが一部で発生するようです。先に解決策を書いておきますが、Microsoft.NET.Sdk.Functions を最新版…

Azure Functions でも appsettings.json と User Secrets を使った設定とシークレットの管理を行う

前に設定周りを全て App Configuration と Key Vault に一元化する方法を紹介しましたが、ローカル環境ではデバッグの度に Access Token と値の取り直しが必要になるので、そこそこオーバーヘッドが大きいです。ちなみにデプロイすると起動のタイミングで 1 …

ASP.NET Core / Azure Functions で App Configuration と Key Vault を使って設定を一元化する

アプリケーションが 1 つとかの場合は App Service の App Settings や Connection Strings を使って設定すれば良いのですが、数が多くなったり環境が増えてくると大体管理しきれなくなって破綻する傾向にあります。Infrastructure as a Code の考えで ARM T…

Durable Functions v2 を使った非同期 HTTP API の実装と利用

Durable Functions v2 beta 2 で Durable HTTP という機能が追加されました。クリス氏が Tweet で説明しているように、アクティビティ関数無しでよい感じに 202 Accepted のポーリングを行ってくれる便利機能です。非同期処理の開始を 202 Accepted で通知し…

Azure Pipelines を使った Azure Web Apps / Azure Functions (Linux) へのデプロイを試した

Run From Package に関するドキュメントを眺めていたら、Linux の Premium Plan に対して Run From Package が使えそうな記述があったので試しました。暫く Linux の App Service を触っていなかったので、知識のアップデートを兼ねてます。まずは Linux の …

ASP.NET Core と Azure Functions でのローカライズについて一通り試した

Twitter で ASP.NET Core / Azure Functions のローカライズに関する話になった時に、そういえば試してなかったなと思ったので一通り触って理解を深めておきました。考えられる部分、全て触ってみたので非常に長くなりました。概要を先にまとめます。 規約ベ…

Task ベースの初期化が必要なクラスを .NET Core の DI で利用する

.NET Core / ASP.NET Core で追加された Dependency Injection は Task ベースの Factory は用意されておらず、ドキュメントではサービスの解決は同期的に行うよう推奨されています。とはいえ、Task ベースでの初期化が必要な場面がちょいちょいあるので、何…