kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

AzureのPaaSのローカル開発環境まとめ

という投稿を読んで、昔からAzureというかMicrosoftのツールはローカルでのエミュレータや開発環境が提供されているので気にも留めていなかったのですが、AWSのLocalStackはコンテナーで一式あるので便利ですね。LocalStackで無償で使えるのは一部の機能で有償のProが必要になるケースもあるので、完全に無料でローカル開発ができるわけではないようです。

AzureのPaaSのうちローカルで開発するためのエミュレーターなどをあつめてみました。もともとWeb AppsはIIS(Express)があるし*1、SQL DatabaseもSQL Server (Express)やLocalDbで開発やローカルテストはほぼ問題なかったですし、さらに今はLinux版がありDockerコンテナー内で容易に動くようになりました。

自分の思いつく範囲で書いてみましたが、これは?とかあれば教えてください。

SQL Database

learn.microsoft.com

どの環境でも動かすならDockerが一番簡単です(Windows版SQL ServerのDockerコンテナー提供はなくなりました)。Developer EditionかExpress Editionで使えば無料です。

learn.microsoft.com

www.microsoft.com

Windows版はLocal DbかSQL Server Express, Developer Edtionをローカルインストールするしかないでしょう。Developer Editionの機能はEnterprise相当なので、うっかりStandardで使えない機能を使ってしまったとかないようにしてください。データベースのリストアができなくなります。

(追記)

learn.microsoft.com

現在プレビューですが、SQL Database Emulatorがあると教えてもらいました。知らなかった。ありがとうございます。

Azure CosmosDB

learn.microsoft.com

CosmosDBもエミュレーターがあります。

Azure Functions / Logic Apps

learn.microsoft.com

VS Codeおよび、Visual Studioで使えます。実際はストレージアカウントも必要になることが多いので、次のストレージエミュレータも入れてください。

Azure Storage

learn.microsoft.com

これ単独で使うことはあまりないのですが、Azure PaaSが前提にすることが多いので、入れないといけないことが多いですね。昔のエミュレーターはWindows専用でしたが、今はクロスプラットフォームのエミュレーターに移行しました。Visual Studioをインストールするときには昔のエミュレーターが追加インストールされますね。

API Management

learn.microsoft.com

面白いところではAPI managementもセルフホストゲートウェイがあります。もともとは直接イントラから出せないような要件向きっぽいですが。ただ、これ使ってローカル開発しているという人の話は聞いたことがないです。

IoT Edge

learn.microsoft.com

使ったことはないのですが、こういう感じでローカル開発できるそうです。

Stream Analytics

learn.microsoft.com

同上。使って開発したことはないです…。

Azure Machine Learning

learn.microsoft.com

OpenAIの陰に隠れたような気がしますが、こんな感じで環境作れます。Azureにはサイエンス用ということでこの辺がプリインストールされたVMもあります。

Azure Kubernetes Services

learn.microsoft.com

AKSというか、kubernetesであればmicro k8sとかminikubeとかそもそもローカルで開発するためのものも多く提供されているので、好きなものを選べばいいんじゃないでしょうか。

kubernetes.io

microk8s.io

(おまけ) Dev TonelとBridge to Kubernetes

learn.microsoft.com

まだプレビューのはずですが、直接接続できない環境でもデバッグできるようになります。

learn.microsoft.com

KubernetesをデバッグするときはBridge to Kubernetesを使うといいようですね。

*1:macOSには…IISないですね。

Azure OpenAIにブログの要約をしてもらう

GPT-4が通ったことですし、何にしようかなと思ったのですが、隔週で実施している devblog radioのブログ要約をしてもらうことにしました。

これ前からやりたかったので、Cognitive Serviceもセットアップしていたのですが、どうもなぁ…ということで二の足を踏んでいましたが、GPT-4の要約、翻訳のおかげでやってみることにしました。ローカルでテストしたらだいたいいい感じだったので、試行してみます。

最初はAzure Functionsにしようと思っていましたが、どうせPowerShellでやっているので、同じスクリプト内でやったほうがいいかということでこんな関数を作ってみました。

function Get-SummarywithOpenAI(
    [string]$blogurl
)
{
    $Uri   = $ENV:OPENAI_API_URL
    $PostBody = @{
        max_tokens = 800
        temperature = 0.7
        top_p = 0.95
        frequency_penalty = 0
        presence_penalty = 0
        stop = @('##')
    }

    $Header =@{
      "api-key" = $ENV:OPENAI_API_KEY
      "Content-Type" ="application/json"
    }

    $PostBody.messages = @(
        @{
            role = 'user'
            content = '以下のURLを要約してください。本文が日本語以外である場合、日本語で200文字以内に要約してください。'+$blogurl
        }
    )

    try {
        $response = Invoke-RestMethod -Method Post -Uri $Uri `
            -Headers $Header `
            -Body ([System.Text.Encoding]::UTF8.GetBytes(($PostBody | ConvertTo-Json -Compress)))

       $Answer = $response.choices[0].message.content
   }
    catch {
        $Answer = '要約に失敗しました。'
    }

    return $Answer
}

環境変数OPENAI_API_URLにAPIエンドポイント(https://{略}.openai.azure.com/openai/deployments/{モデル名}/chat/completions?api-version=2023-03-15-preview))、OPENAI_API_KEYにAzureポータルから取得できるAPI KEYを設定してください。

パラメータはカスタマイズできるようにenvironmentに指定してもよかったのですが、そこまではいらないかなということで固定値にしています。変わるようなら変数にしようかなと思います。

個人用Microsoftアカウントを変更したらやらないといけないこと

ちょっと個人的な事情で普段使いのMicrosoftアカウント(ここではAzure ADベースではなく、個人用のアカウントのほう)を変えたんですよ。そしたらドツボにはまってさあ大変です。もう半年以上になるのにまだ苦労しています。

経緯

もともとメインのアカウントがあって、Microsoft MVPを受賞したときに公開プロフィールにメールアドレス公開しておくといいよ、と教えてもらいました(実際いろいろいいことはありました)。でも、「これそのままサインインにつかうのはいやだな」ということでエイリアスを作って、そちらをメールアドレスとして公開していました。サインインに使うMSアカウントは秘密、その時はそれでよかったのですが、時代が下がってMicrosoftがだんだんAzure ADベースになってきてちょっと雲行きが怪しくなってきます(個人的に。IDとしてはいいことです)。

そこで意を決してエイリアスとプライマリアカウントを入れ替えることにしました。

Outlook.com でメール エイリアスを追加または削除する - Microsoft サポート

ここがドツボの始まりだったのですが、もうどうしようもなくなっていたのでやらないといけません。会社で実験用のPCで一度outlookではないメールアドレスで作っていたMSアカウントに紐づくメールアドレスを別のものに切り替えてもOSログインとして問題ないことはわかっていたので気楽に始めたのですが…。

結果

結婚した場合などでお役所や銀行、各種機関に姓名変更の手続きすると思いますが、あれと同じです…同じmicrosoft.com内だから一度変更すると追従するだろうと思っていた自分が甘かった。

認証としてはhotmail.co.jpからoutlook.co.jpへ移行したとしても、Microsoftが管理するIdentityとしては変わらない(MFAとかはちゃんと来る)、のですが、登録されているメールアドレスとしては古いhotmail.co.jpです。気持ち悪いので変えます。

Azure

Azureのサポートに所有者変更のサポートリクエストを出します。注意点として、hotmail.co.jpで作っていたテナントでは新しいoutlook.co.jpのユーザーは別です。なので、hotmail.comテナントにoutlook.co.jpユーザーをゲスト追加して、管理者権限与えないといけません。それいやだといったら、別解として「新しいoutlook.co.jpでテナント作って、そちらにサブスクリプションを移行しますか?」という提案がありました(これもサポートでできます)。

まじか…。テナント変わるとご存じの通りRBACとかやり直しです。一応実験用なのでそんなに痛くはないのですが、それもなーということでゲスト運用の案をのみました。

あ、サブスクリプション所有者が一時的に消えますが、サインインできる状態であれば自分で割付はできます。

learn.microsoft.com

ちなみにへたするとサブスクリプションの課金がかかりそうになりますが、Visual Studioサブスクリプション特典などの無償枠であれば言ったら免除される可能性がありますのでお早めに。一か月有効な無償枠であればその時期は変更やらないほうがいいでしょう。

Visual Studioサブスクリプション

learn.microsoft.com

これは英語でやり取りしたほうが早いですというか最後は英語になります。Visual StudioのIDEにサインインするMSアカウントは自動的に変更を認識して追従されますが、VSサブスクリプションの特典の紐づけが怪しくなるのでやらないといけません(実際サインイン切れそうになった)。

こちらhttps://my.visualstudio.com/GetHelp?mkt=en-usからヘルプのチケットを作成すると英語で問い合わせ来るはずです。

注意点として、リセットされるとAzureのサブスクリプションが新しく発行できるように見えるのですが、これを発行すると既存のVisual Studioサブスクリプション特典で発行したAzureサブスクリプションが無効化されます。同時に使えるサブスクリプションは一つだけということですね。何らかの事情で0リセットしたい場合はここでサブスクリプションを新規に発行すればいいようです。

古いサブスクリプションを戻したい場合、新しく発行してしまったサブスクリプションを無効化した後、サポートにいえば無効化された旧サブスクリプションを使用可能状態に戻してもらえます。

教育系

learnの資格は…あ、変更されている?この前は変わってなかったんですがどうしたのだろう。そのほか大企業向けのプログラムで教育コンテンツが使える人はそこの中で関連付け変更依頼をしてください(やっとやった)。

ブラウザ

ChromeとかEdgeでサインインプロファイルを旧アカウントで使っている場合、一度サインアウトしましょう。

そのほか

何かあったかなぁ?思い出したら追記します。

Azure 用Windows 日本語版コミュニティイメージを公開する

qiita.com

いささかずるいですが😅、内容がDevOpsに近いということで。Azure Compute Galleryに全世界誰でも使えるコミュニティイメージを提供する機能が追加されました(2022/12/1現在プレビュー)。これでやってみたかったのが、「日本語Windowsイメージを作って共有する」です。Azureなどのイメージを日本語化する記事はそれこそたくさんあるのですが、もうめんどくさいですよね。

learn.microsoft.com

プレビュー申請すればだれでも使えます。イメージ生成する料金(ビルド用VM)はかかりますが、コミュニティイメージの保持やトラフィックは無料です。使用方法はWindowsのVMイメージ選ぶ際に「コミュニティイメージ」を選択して、発行元(Publisher)でkkamegawaをキーにして検索してください。

こんな感じで一つだけ出てきます。今は日本語イメージのプレビューテストということで制限がいくつかあります。解決方法知っている人がいたら教えてください。

イメージの制限

  • ログインしてもMS IMEが追加されていません。設定から追加してください。

リリースの制限

  • バージョン番号はプレビュー中なのでちょっと適当です(自動生成)。
  • 毎月パッチがリリースされた後イメージを更新します。
  • Japan Eastのみで提供しているのでJapan East以外でこのイメージを使ったVMは作れません(Azure Compute Galleryの制限)。ほかのリージョンも希望があれば複製します。
  • Gen 1イメージかつWindows Server 2019のみです。Windows Server 2022(Azure Edition)やGen 2イメージはそのうち
  • インストールされているのは.NET Framework 4.8のみです。ほかのソフトも多くの人の需要があり(Azure CLI/PowerShell Coreなど)、ライセンス上問題がない(Visual Studioなどは不可)ものだけインストールします。

実際に使っているAzure Image Builderのソースも公開しています。

github.com

追加してほしいもの、small disk版が欲しいなどがあればGitHubのissueに書いてください。MS IMEを追加した状態で起動するPRもお待ちしています。

残念ながらAzure Pipelinesではhosted agentの制限時間(60分)を超えてしまうため、self hostを用意しなくてはならないので、CIはそのうち…。ということで、DevOpsネタに関連付けます😅。