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に指定してもよかったのですが、そこまではいらないかなということで固定値にしています。変わるようなら変数にしようかなと思います。

Dockerコンテナ内でパケットキャプチャするときのメモ

ネットワークに起因するトラブル調べようとすると最終的にパケットキャプチャしないといけないことがしばしばあります。通常はWiresharkなどを使うのでしょうが、Docker内ではそのまま使えないので、tcpdumpでキャプチャすることになりますが、イメージに入っているとは限らないしというか、多分入っていないし、余計なものを追加したくもない。

ということで、tcpdumpが入っているイメージを作って、特定のコンテナにアタッチすればいいようです。

FROM alpine
RUN apk add --no-cache tcpdump
 docker build -t debugtcpdump .

これでdebugtcpdumpというイメージができるので、キャプチャすると。ただし、このままだとコンテナ内でキャプチャしたファイルが揮発してしまうので、ボリュームマウントしておきます。

 docker run -it -v /mnt/c/temp/:/tmp --rm --net container:対象コンテナ名 debugtcpdump tcpdump -nn -X port 80 -w /tmp/web_dump.output

(WSL2で実行しています)

これでコンテナ内の80/tcpに対してキャプチャができて、c:\temp\web_dump.outputというファイルができます。今回はパケットキャプチャだけなのでtcpdumpだけでいいですが、各種調査用のツールが入ったイメージが公開されています。

hub.docker.com

どこの調査で何使えばいいか載っていてすごい。

Azure DevOps 2023/3/31の更新

Azure DevOps Sprint219リリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

learn.microsoft.com

いよいよAzure Pipelinesエージェントv2がリタイアになります。古いOSを使い続けないといけない人はドキュメントに書かれている設定をしてください。

Azure Boardsの魅力的なプライベートプレビューが二つ募集しています。いつものDanさんに直接メールしてみてください。簡単な文章で大丈夫です。GitHubと2000も接続するようなケースはMicrosoft以外にあるのか?という気もしますが、250はいくかもしれませんね。

Swimlaneの自動移動ルール設定はうれしいですね。Boardの状態が自動で変更するというルールができていたのにSwimlaneではできなかったのがつらかったですが、条件によって自動的に移動します。例えばBugカテゴリー専用のSwimlaneとか、重要度最大のものだけのSwimlaneを作るとか活用はいろいろ考えられます。

今回も小幅ですがPrivate Previewやっているということは頑張っているということで次回も楽しみです。ではまた三週間後。

translate to Japanese to Azure DevOps release not…