しばやん雑記

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

Azure, Pipelines の検索結果:

Azure OpenAI Service の GPT-4o Early Access を REST API と Azure SDK から無理やり使ってみた

…せるとして、自分は Azure から利用したいのでその部分に特化して進めます。今回は驚くことに、GPT-4o を OpenAI が公開した直後に Azure OpenAI でも GPT-4o が Early Access Playground という形で公開されました。来週の Build では更に GPT-4o の話が聞けるらしいので、今年も現地参加にして良かったという気持ちしかありません。East US か West US 3 にデプロイした Azure OpenAI St…

GitHub Actions / Azure Pipelines の Windows Runner で Azurite と Cosmos DB Emulator を利用する

…Actions / Azure Pipelines でテストを実行する方法を書きましたが、Ubuntu Runner と Service Containers を利用した方法だったので Windows Runner では実質的には使えない方法でした。理由としては Azurite の Windows 向け Docker Image が公開されていないのと、Cosmos DB Emulator を Windows Containers で動かすのは Linux の数倍時間がかかる…

GitHub Actions を使って Windows Containers のビルドと Web App for Containers へのデプロイを自動化する

…iners 事情と Azure / GitHub での扱いについて再度確認しました。Windows Containers を使って動かしたいアプリケーションは Classic ASP か ASP.NET のどちらかだと思うので、今回は ASP.NET をベースに話を進めていきます。Web App for Containers への ASP.NET アプリケーション移行はいくつかドキュメントが存在しています。App Service を使えば Classic ASP と ASP.…

Azure DevOps で特定のファイルが変更された場合のみ Pipeline を実行させる

Azure Repos を使って Monorepo 構成を採用している場合には、Azure Pipelines はそれぞれのプロジェクト単位で実行させたいので、トリガーの設定でパスを指定して実現します。例として backend というディレクトリが変更された時だけに Pipeline を実行させたい場合には、以下のように paths にディレクトリ以下のワイルドカードを追加して対応します。地味に忘れやすいのが Pipeline の定義ファイルも paths に含めることです。…

Azure Functions (Windows / Linux) へのデプロイを行う方法と挙動の違いをまとめた

… + C# 以外で Azure Functions を作成することが増えてきました。その場合は主に Visual Studio Code を使ってプロジェクト作成からデプロイまで行うのですが、Azure Functions を実行する OS とデプロイに利用する方法で若干挙動が変わるので簡単にまとめました。環境毎に確認した結果は以下の通りになるので、ここだけ読めば大体は問題ありません。ちなみに言語は全て Node.js (TypeScript) で試しています。 Window…

複数の Azure AD テナントに対応した Service Principal を作成して Terraform から利用する

…Service と Azure AD B2C というように Azure AD テナントが分かれている場合には、いつも通りの Service Principal を使った方法だと、当然ながらどちらかのテナントしか操作できません。以前書いたように Azure AD B2C 側のアプリケーションを管理しつつ、App Service Authentication の設定を追加する際には同じ Terraform 定義内で行う必要があります。MSA や組織アカウントで Azure CLI…

2021 年の振り返りとフリーランス 6 年目の終わり

…も三宅さんと一緒に Azure と C# をメインに使って、色々な案件をこなす日々を送っていました。とても嬉しいことに、コロナ禍にもかかわらずたくさんの相談を頂きました。来年もこれまで通り全力で頑張っていくのでよろしくお願いします。 Azure / C# / GitHub で仕事を頑張った 基本的には Azure と C# をメインで仕事をしているので、今年使用したサービスや技術は大体以下のようになりました。今年の Azure は App Service で待望の Avail…

Azure Container Apps の特徴と Azure Web Apps / Azure Functions との違い

…21 で発表された Azure Container Apps について、実際に触って調べたのでいろいろと所感を書きます。特に Web Apps / Azure Functions との違い・使い分けについて重視しました。名前から分かるようにコンテナーの実行に特化したサービスです。既報の通り Kubernetes 上で動作していますが Kubernetes の知識が無くても簡単に扱えるようになっています。最新の Serverless サービスなだけあって、全体的に設計が洗練され…

GitHub Actions / Azure Pipelines 上で Azurite と Cosmos DB Emulator を使ったテストを実行する

GitHub や Azure DevOps を使った開発フローにテスト実行を組み込むのは一般的に行われていると思いますが、Azure Storage や Cosmos DB などに依存するテストを実行する際には、実際のリソースにアクセスさせるのではなくローカルで完結させたいことが多いです。特にテストケースによってはデータが実行毎に揮発してくれた方が都合の良いことが多いので、実際のリソースより気軽に起動とデータの全削除が行える Emulator が便利です。Azure Stor…

Azure Pipelines を使った Terraform 1.0 移行時の注意点

…rraform と Azure の組み合わせを多くのプロジェクトで使ってきたので、0.1x からの State の移行がスムーズに行えるのは非常にありがたいです。最近は新しいプロジェクトでは GitHub と GitHub Actions で Terraform 向けの Workflow を作成することが多いのですが、既に Azure を使っている場合は Azure AD でシームレスにログインが行える Azure DevOps を使った方が便利なことも多いです。それ故に T…

.NET Framework 3.0 で作られたアプリケーションを .NET 5 に最新化して GitHub で公開するまでに行ったこと

…erge を有効化 Azure DevOps には Set auto-complete という名前で同じ機能が昔からありましたが、GitHub でも最近は使うようにしています。PR を作成後に auto-merge を設定すれば、Branch protection rule のパス後に自動でマージしてくれます。今回のプロジェクトでは Windows 上で GitHub Actions の各種 Workflow を動かす必要があり、結構ステータスチェックに時間がかかってしまうこ…

私が Azure Functions アプリケーションの開発時に意識していること

ここ数年は Azure Functions をフルに活用したアプリケーションを実装することが多かったのですが、同時に Azure Functions を失敗しないように使う方法も分かってくるので、ここらでちゃんと言語化しておきます。最近は特に Azure Light-up というハッカソンを行うことが多いのですが、Azure Functions を使う場合には必ずこの辺りは毎回説明するようにしています。要するに Azure Functions の利点・特性を理解して賢く使いこ…

Azure Pipelines での .NET Core アプリケーションのビルド時に NU1101 エラーが出るのを回避する

少し前から Azure Pipelines の Windows ワーカーを使っている場合に、以下のような NuGet パッケージの復元時にエラーが出ることが増えてきました。参照している NuGet パッケージが多いと大量に出るので結構邪魔ですし、マルチステージでビルドしている場合など、後半でエラーになれば最初からやり直しになるためストレスが溜まります。NuGet.org 上にしかないパッケージを何故か Visual Studio のオフラインのキャッシュから取ろうとして、エラ…

NuGet のロックファイルと CI でのパッケージキャッシュ

…Actions や Azure Pipelines には NuGet 向けのサンプル定義が用意されています。中身はほぼ一緒なのでサンプル自体も非常に似通ったものになっています。今回は GitHub Actions で試すので actions/cache@v2 の方のサンプルを持ってきましたが、見慣れない packages.lock.json というファイルのハッシュを使ってキャッシュキーを生成しています。 - uses: actions/cache@v2 with: path…

GitHub Actions / Azure Pipelines で Pull Request に特定のラベルが付けられた時だけ処理を行う

…Actions と Azure Pipelines の両方で同じ動作を実現する Workflow を書いてみました。結論としては GitHub Actions なら非常に簡単でした。 GitHub Actions まずは GitHub Actions を使った方法ですが、流石 GitHub という感じで最初からいろいろな情報が取れるようになっていました。PR に特定のラベルが含まれているかの判定は以下の回答の通りに簡単に書けます。この判定を Workflow 内の if の条…

Azure Functions への Zip Deploy を Publish Profile を使って行う方法

… からデプロイ先の Azure Functions を選んで Zip Deploy 用のプロファイルを作成していますが、たまに Visual Studio で Publish Profile を使った Zip Deploy を行う場合に、その手順を毎回忘れてしまうのでメモとして残します。おまけとして Publish Profile についても少し触れています。Zip Deploy については何回も書いているはずなので、以前書いたエントリを参照してください。公式ドキュメントもあ…

2020 年の振り返りとフリーランス 5 年目の終わり

…Service / Azure Functions と Cosmos DB など、マネージドサービスを色々組み合わせたサーバーレスのアーキテクチャをもっと突き詰めていきたいと考えています。もちろん OSS 方面での活動やブログへの投稿も継続的に行っていくつもりです。 5 年目も無事生き延びることが出来た ここ数年は生き延びることが出来たというのは比喩ではなく、病気的な意味でマジで死なずに済んだという意味を持っています。一応まだ経過観察中なのでがん患者だと自分では思っていますが…

ASP.NET Core / Azure Functions アプリケーションの発行後サイズを削減する

Azure Storage を使った Run From Package で公開している Azure Functions 向けパッケージの転送量が、最近になって急激に増えたのでパッケージのサイズを削減して、Azure Functions で実行するための最適化を行ったのでメモとして残します。何故マネージコード中心のアプリケーションでパッケージサイズが増えたのか調べると、使っている NuGet パッケージがネイティブ向けライブラリを含んでいるのが大きな原因でした。.NET Cor…

GitHub Actions の Environments が予想通り最高だったので勢いで一通り試した

…来るようになります。Azure Pipelines では Approvals and checks と Environments という同等の機能がありますが、そのまま GitHub にもっていったという感じです。予想通り便利でした。Using environments for deployment - GitHub Docsこれまで Azure Pipelines を使っていて、デプロイに特化した機能があるのはかなり便利だと実感していたので、Azure Pipelines …

.NET Conf 2020 Online - .NET 5 リリース記念パーティートーク フォローアップ

…Actions / Azure Pipelines での .NET 5 サポート Blazor WebAssenbly YARP のベンチマーク MAUI / Uno Platform / WinUI など .NET の ARM64 対応 .NET 5 Early Access と Self-contained 元々は Facebook で適当に書いたのがきっかけでしたが、多くの方に喜んでいただけたようなので嬉しいです。また機会があればこういう形式で楽しく話したいと思っていま…

Azure App Service の .NET 5 Early Access を一通り試してみた

…は作成できないので、Azure Portal や Azure CLI を使いましょう。 Azure Portal を使ってデプロイする Azure Portal から App Service を作成すると、Runtime Stack の .NET グループに .NET 5 が出てくるので、これを選択してデプロイすれば有効になります。紹介の必要がないぐらい非常に簡単でした。Windows と Linux が選べますが、両方の OS で .NET 5 の Early Access…

複数の App Service / Azure Functions へのデプロイを GitHub Actions を使って並列に実行する

…Service / Azure Functions へのデプロイを並列実行するという話です。ビルドに関しては並列実行しても効果が薄いケースが多いですが、デプロイは前回書いたようにネットワーク I/O やウォームアップの待ち時間が多く、依存関係がほぼないため並列実行に向いています。ただし効率良く並列デプロイを行うには事前の準備が必要になってきます。具体的にはビルド時にデプロイ用パッケージとなる zip ファイルを生成しておくことと、それぞれの Job では必要な Artifac…

GitHub Actions / Azure Pipelines 上での .NET Core アプリケーションのビルド時間を短縮する

最近は Azure DevOps で開発していたアプリケーションを GitHub に移行しつつ、ビルドとデプロイ周りを Azure Pipelines から GitHub Actions に切り替えていたのですが、アプリケーションのビルドに時間がかかっていたので短縮するために色々と作業をしました。Azure Pipelines と GitHub Actions は Runner が同一のものが使われているので直接比較できます。先にどのくらい改善したかを簡単に出しておきます。ま…

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

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

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

… Studio や Azure Functions Core Tools などで新しい Azure Functions を作成すると、一般的な C# クラスとは異なり UTF-8 BOM 無しのファイルが生成されます。UTF-8 BOM が必要なのかどうかは議論しませんが、C# では UTF-8 BOM が無いとマルチバイト圏の人間は困るようになっています。具体的には以下のように日本語を書いた時です。ファイルに UTF-8 BOM が付いていない場合、Visual Studi…

Terraform Cloud を使った Azure リソースの管理を試した

…Actions や Azure Pipelines で良いと思っていましたが、当然ながら Terraform に特化した機能が用意されているので結構便利に使えました。5 ユーザーまで無料です。無料以上のプランにするとユーザー数課金になるので、思ったより高くなりそうだなという印象です。今回は GitHub で公開していた以下のリポジトリを使って試しています。Monorepo で dev / prd を管理するようになっていますが、Monorepo はあまりお勧めしないようなこと…

みつばたんへの Twitter での Azure / ASP.NET Core アドバイスのまとめ

…AD を設定すれば Azure Portal にログイン出来る人間だけログイン出来るようになる— Tatsuro Shibamura (@shibayan) 2020年7月9日 同じ App Service Plan に載せれば金額は同じやしな。https://t.co/9vTmtCukjr Core プロジェクト自体も分けた方が圧倒的に良い— Tatsuro Shibamura (@shibayan) 2020年7月9日 カスタムドメイン + リバースプロキシ環境下で動作さ…

Azure Pipelines の VMSS Preview を使って Ubuntu / Windows のスケーラブルな Agent を作成する

…ld 2020 で Azure Pipelines の Self-hosted Agents に VMSS 版がプレビューとして追加されました。VMSS 版ということは柔軟なスケーリングが可能ということなので、選択肢としてはかなり有望です。大規模なプロジェクトで CI / CD を行っていると、Agent がすぐに足りなくなってしまいがちですが、VMSS の特徴を生かして必要な時に必要なインスタンスを確保できます。とはいえ基本的には Microsoft-hosted な Ag…

ASP.NET Core Web API と NSwag を使って OpenAPI 定義を自動生成する

…にすれば良いですね。Azure Pipelines を利用して以下のような Pipeline を作成しました。 trigger: - master pool: vmImage: 'ubuntu-latest' steps: - checkout: self persistCredentials: true clean: true - script: dotnet build displayName: Build application - script: | if [ -n …

Azure Pipelines だけ使っているプロジェクトを GitHub Actions に移行している話

最近は Azure Pipelines だけを使っている GitHub 上のプロジェクトを、徐々に GItHub Actions に移行しています。Azure Pipelines は Approvals や Gates などが便利ですが、OSS で一人開発しているような場合は GitHub Actions に寄せておいた方が都合が良かったです。GitHub Actions はみんな知っているようにインフラ周りは Azure Pipelines と同じで、Azure Pipel…