kkamegawa's weblog

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

Devblogラジオ第三回 - CosmosDB編

devblog.connpass.com

毎回毎回トラブルが続いてすいません。今回はYouTubeの仕様変更に伴い、「既存のライブからコピーして作ると同じセッションキーを再利用されてしまって、本番のライブ配信が始まってしまうというね…直前でURL変わってしまってすいませんでした。反省。

そしてさらにライブでは私のマイクだけ電動コイルに巻いたような音声になっていたそうです。ちなみに私に聞こえるのもそうだったので、相手側の問題だと思っていました。考えられる原因としてはこの辺でしょうか。

  1. Surface Headphonesが配信用とメインPC両方ペアリングしていたから(もう配信用からは外した)
  2. 配信用PC(Teams)に入っていたアカウントのマイクミュートを忘れていた。途中で気づいたけど、これでミュートしてほかの人の音声が切れたらと思うと怖かったので、続行(Windowsのミキサーでのマイクミュートはしていた)。
  3. 配信用Teamsと画面共有用のPCをそれぞれ別アカウント使って入っていた。
  4. 帯域不足(でもそれなら画像のほうが先にアウトになりそうな)。画像切ってみても変わらず。

画面をほかの人に取ってもらうと少しましになった気がします。私の音声にエコーバック入っていたのはたぶん2が原因かなと。配信は難しいですね…。CosmosDBは個人的にはそんなに使えていないので、どうなるかと思ったんですが、松村さんや足利さんがいろいろ経験を騙ってくれて助かりました。複数人の雑談はこういうところがいいですね。

次回は大物ゲストを呼んだ四人で .NET 5とリリースされるだろうVisual Studio 2019 16.8についてフリートークをやる予定です。お楽しみに!


devblogラジオ vol.3

Azure DevOpsの所有者をAzure ADからMSアカウントに変更する

逆はよく聞くし、お勧めなんですが。

ちょっと事情でAzure DevOpsのorganizationの一つを組織アカウント(Azure AD)ベースで動いていたものから、MSアカウントへ移行しなくてはならなくなりました。本来作れない組織アカウントと同名のMSアカウントを持っているので、この二つの間で移管したいのです。

docs.microsoft.com

Azure ADへ行く場合も、離脱する場合もこんな手順です。

  1. Azure ADにゲストでMSアカウントを追加する
  2. 移管したいアカウントをownerにする。
  3. ownerアカウント以外を全部削除する
  4. ドメインに接続(離脱の場合は切断)する
  5. 移管先のアカウントを所有者にして、移管元アカウントを削除する
  6. Azure ADのゲストから削除する

これには二つネックになる点があります。

  1. Azure ADへのゲスト追加が認めてもらえる
  2. MSアカウントと組織アカウントが異なる名前になっている

私の場合1も2も満たしていないので、Azureのサポートに泣きつきました。Visual Studioサブスクリプション特典作っているので、サポートもDeveloperですが契約できます。サポートから提案されたのは以下の方法です。

  1. 組織アカウントと同名ではない別MSアカウントをサポートに連絡する
  2. サポートがAzure ADから離脱&別MSアカウントをownerにする
  3. 完了後連絡があるので、別MSアカウントから組織アカウントと同じアドレスのMSアカウントへ移管する。

で、今は上の2まで終わっていて、3の連絡を待っているところです。大体1-2日かかるといってました。あまりこんなことする人いないと思いますが、困ったらサポートに連絡してみるといいと思います。

10/29追記
終わりました。無事移管されて、MSアカウント側の同じメールアドレスがOwnerになっています。ぱっと見、不具合もなさそうです。同じようにMSアカウント側に移管したAzureサブスクリプションも見えています。

Azure Pipelines/GitHub Actionsのセルフホスト用VMイメージを作る

以前からAzure Pipelines用イメージをPackerで作る方法を公開しているレポジトリーがあったのですが、バックエンドがGitHub Actionsと共通になり、レポジトリーも移動しました。

github.com

以前のPackerというかAzure Image Builder(中身はPackerです)を使っていたレポジトリーでも試したことがあったのですが、どうも安定して作れない。Hyper-V用のイメージ作るのも結構手を入れるの大変だなぁ、と思っていのですが、レポジトリー変更と、方式も結構変わったみたいです。

実際にAzure PipelinesとGitHub ActionのHosted Imageはこれで作っている…らしいので、つかってみようとしたところ、なんとAzureRMモジュール使って書いていてびっくりしました。2020/12でサポート終わるって書いているのに。そして、AzureRMモジュール入れた環境なんてもうないよ…。

ということで、Azモジュールに書き換えた版を作ってみました。そのうち本家がやるだろうけど、PRどうしよう。

github.com

コミットはこの辺。

github.com

今実際に動かしていますが、いい感じで動いています。たぶん数時間じゃすまないレベルで時間かかるので、朝一とかで始めたほうがいいです。もしくはAzureのVMで動かすとか。これでうまくいけばイメージをカスタムして不要なものを消したイメージ作って、手元のローカルで動かすような感じでやってみようと思います。

ヘルプに書いていますが、使用方法の注意点として、なぜかGitHubのPATが必要です。将来廃止しますとは書かれていますが、GitHub Developer Programに参加しないとPAT作れない(前確か参加しなくても作れたよね?)ので、気を付けてください。とりあえずレポジトリーの権限だけ設定しています。

(追記)
必要な理由がわかりました。npmのパッケージをGitHubのPackagesからダウンロードするため、read:packagesが必要なためだそうです(今エラーになりました)。たぶん匿名アクセスを許可していないからでしょう。read:packages権限だけあればいいようです。

GenerateResourcesAndImage -SubscriptionId {サブスクリプションID} -ResourceGroupName {リソースグループ名} -ImageGenerationRepositoryRoot {レポジトリーをクローンしたフォルダー} -ImageType {イメージ名} -AzureLocation リージョン -Githubfeedtoken {GitHubのPAT}

-ImageTypeにはWindows2016, Windows2019, Ubuntu1604,Ubuntu1804が指定できます。イメージ生成が成功したら、Azureのストレージアカウントに入るので、そこからAzureへデプロイできます。

これでうまくいったら、hostedからは不要なものを削除するとか、hostedでは更新が遅い場合に最新のVisual Studio入れたイメージ作るとかいろいろ用途が広がります。もちろん、オンプレミスのAzure DevOps用にも使えますね。

(追記2)
作ってみたら、Seleniumのダウンロードで失敗してました。WebブサウザーでダウンロードしようとしたらSmartScreenに引っかかったので、おそらくそれでしょうか。つっても、PowerShellスクリプトと同じ方法でダウンロードしてみたらできたんですが。うーん、こう言う安定しないの困るな。

後、現時点でPackerがAzureのスポットインスタンスに対応していない(AWSは対応しています)ので、USあたりでイメージ作成するときにお安く作れないの困るなぁ。5月ごろのissueには「次の次くらいで」対応予定と書かれていたんですが。

github.com

Azure DevOps Server 2019でAzure SQL Databaseを使う

オンプレミスのAzure DevOps ServerはSQL Serverとペアで使います。大体直近2バージョンくらいまでサポートしているはずです。現在のAzure DevOps Server 2019 Update 1.1でSQL Server 2019をサポートしています。ただし、Windows版のみで、Linux版はサポートされません。

docs.microsoft.com

今までのオンプレミスのSQL Serverだけではなく、Azure DevOps Server 2019ではAzure SQL Databaseがサポートされるようになりました。

docs.microsoft.com

ちょっと制限がありますが、データベースがメンテナンスフリーになるのは非常に魅力的です。インストール時の注意点についてまとめます。

前提条件

  • デプロイ時にManaged Service IDを有効にしなくてはならない
  • Azure ADとフェデレーションしているドメイン環境にいなくてはならない
  • SQL DatabaseはConfigurationとCollectionをそれぞれシングルインスタンスのみサポート。Managed Instanceやエラスティックプールは未サポート
  • SQL DatabaseはStandard S3以上のSKUでなくてはならない

Standard S3以上ってのは検証のために用意するのはなかなかきついですね。ただし、SQL Server Reportingおよび、SQL Server Analysis Servicesはサポートされないので、Azure DevOps Server 2019内蔵のAnalyticsを使ってください。

ドメインに関してはドキュメントにはAzure Virtual Machines that are domain joined.とあるのですが、どうもAADDSに参加しているだけではダメで、Azure ADとフェデレーションしていないといけないようです。

f:id:kkamegawa:20200225062647p:plain

Managed IDはここですね。オンになってないといけません。

データベース作成

SQL Database作成はいいとして、二つのデータベースをStandard S3以上のSKUで作っておいてください。

  • AzureDevOps_Configuration
  • AzureDevOps_DefaultCollection

また、SQL DatabaseにはAzure Active Directory Authenticaitonを設定しておかないとセットアップできません。

データベース権限設定

ssmsでmasterデータベースを開いて、以下のクエリを実行します。

CREATE USER [VMName] FROM EXTERNAL PROVIDER
ALTER ROLE [dbmanager] ADD MEMBER [VMName]

[VMName]はAzureでのVM名(Start-azvm-name引数に指定する値)で、DNS名ではありません。

次にCollectionおよび、Configuration Database(AzureDevOps_ConfigurationとAzureDevOps_DefaultCollection)すべてに対して以下のSQLを実行します。

CREATE USER [VMName] FROM EXTERNAL PROVIDER
ALTER ROLE [db_owner] ADD MEMBER [VMName]
ALTER USER [VMName] WITH DEFAULT_SCHEMA=dbo

VMNameはさっきと一緒です。

インストール

f:id:kkamegawa:20200225065753p:plain

サーバー構成ウィザードのところで新しい配置 - Azureを選んでください。あとはコレクション名をDefaultCollectionのまま変更しなければいけるはずです…。

と紹介できればよかったのですが、フェデレーションしてる環境持ってないので、ここまでの紹介です(ごめん)。

これは新規インストールですが、アップグレードする際は「既存のデータベースがあります」を途中で選べばいいです。