kkamegawa's weblog

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

Azure DevOps Server 2022.1のデータベースにAzure SQL Databaseを使う

これはAzure DevOps アドベントカレンダー3日目の記事です。

qiita.com

USの感謝祭直後に2022.1が公開されました。オンプレミスのAzure DevOps Serverは年に一度程度バージョンアップを実施しています。昨年12月に2022.0が正式版公開されていますね。オンプレミスの更新だとこのくらいがいいのではないでしょうか。マイナーな機能更新は半年に一度行わるようです。サポートは10年なので比較的長く使えます。

devblogs.microsoft.com

ダウンロードやリリースメモは上記のブログから。大体Sprint228くらいまでの内容が入っているように見えます。私は普段クラウドサービスを扱っていますが、どうしてもクラウドサービスでは使えない、というケースはあります。Azure DevOps Serverを選ばざるを得ない場合はこの辺の理由でしょうか。

  • そもそもクラウドにつながっていない、あるいは著しく制限されている
  • 日本に置かなければならない(Azure DevOpsもGitHubも日本にはDCがありません)
  • 独自のコンプライアンス&セキュリティ基準がある
  • 低レイテンシーが必要(クラウドサービスも割と充分ですが)
  • オンプレミス以外で使えないライセンスのソフトがある(これは一応クラウドサービスでも解決できますが)

以前も一度試して失敗したのですが、今度こそということで以下の構成でインストールしてみます。

  • Azure VM(Windows Server 2022) D2_v5
  • SQL Database DTU model(構成データベース、データともにS3以上が必要)

今回はインストールだけなので8GB RAMですが、ElasticSearchの検索を使うならば16GB以上のメモリが必要でしょう。SQL DatabaseはDTUの場合、S3以上が必要なのでちょっとお高いのですが、日中しか使わず、ストレージが250GB以下であればAzure Automationを使って使うときだけこんなスクリプトでスケールアップ/ダウンすればいいでしょう。変更に大体5-6分くらいかかるので、気を付けてください。

Set-AzSqlDatabase -ResourceGroupName <resourcegroup> -DatabaseName "AzureDevOps_Configuration" -ServerName <servername> -Edition "Standard" -RequestedServiceObjectiveName "S3"
Set-AzSqlDatabase -ResourceGroupName <resourcegroup> -DatabaseName "AzureDevOps_DefaultCollection" -ServerName <servername> -Edition "Standard" -RequestedServiceObjectiveName "S3"

DatabaseNameにはラベルがつけられます。例えばAzure DevOps Server 2022用であればAzureDevOps_2022Configurationという名前で作っておくことでインストール時に明示的に指定できます。一つのデータベースには同じバージョンのサーバーからしか接続できないので、ご注意ください。

SQL DatabaseをEntra管理する

Entraで認証できるSQL Databaseでなくてはなりません。個人用MSアカウント時代にも一回やったことがあるのですが、ダメでした。

VMがActive Directoryに参加している必要がある

インストール前にActive Directoryに参加しておいてください。Entra Domain Services(旧Active Directory Domain Services)でも構いません。私はEntra Domain Services使っています。なので、Entra IDでのWindows Server ログインはできません。設定していると失敗します。

System Managed Identityを作る

次に、SQL DBにアクセスするVMに対してSystem Managed Identityを作ります。

VMにSQL DB Contributorロールを割り当てます。

SQLを実行する

SQL Databaseのmasterデータベースに対して以下のSQLを実行します。

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

[VMName]にはSQL DatabaseへアクセスするVM名を書いてください。FQDNではありません。

SQL 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]は同様にVM名に置き換えてください。

これでインストールが可能になります。

インストーラー

ほとんど通常と変わらないのですが、2点だけ。

新しい配置を選んだ場合は新しい配置 - Azureを選んでください。ほかの二つを選ぶと失敗します。

ここでSQL Databaseのサーバー名を入力します。データベースサーバーのFQDNで指定してください。前述のラベルは詳細オプションをクリックすると、ラベルの入力が可能です。SQL Databaseを使うときはラベルを使ったほうがいいでしょう。

それら以外は同じです。

どっちが安いのか

参考までにSQL Databaseを使わず、VMだけで構成する場合とSQL Databaseを使う場合の費用を考えてみます。以下条件。

  • ビルドエージェントをインストールするVMは考慮しない(Serverとの同居不可です)
  • Azure DevOpsのライセンスはVisual Studio Subscriptionを使う。アクセスするユーザー全員に必要なので注意
  • 東日本に作る
  • 稼働時間は720時間
  • プライベート接続するためのインフラはどちらも同じものが必要ということで除外
  • 価格は2023/12/2現在のレートに基づきます

VM+SQL DB

用途 種類 数量 価格
Web App D2ads v5 (2 vCPUs, 8 GB RAM S10 Managed Disk 1 ¥25,267.96
検索 D4ads v5 (4 vCPUs, 16 GB RAM) 1 ¥50,618.45
DB S3: 100 DTUs, 250 GB 2 ¥49,448.73
通信 Private Link(100GB) 1 ¥1,375.28
合計 ¥126,710.42

単一構成

用途 種類 数量 価格
Web+SQL+検索 E4as v5 (4 vCPUs, 32 GB RAM) E10 Managed Disk 1 ¥50,861.85
データストレージ Premium SSD v2, 1 X 512 GiB Disks, 730 Hours, 3000 IOPS, 125 MB/s 1 ¥7,295.85
合計 ¥58,157.70

比較して

…思っていましたが、やはりVM単独で動かすほうが安いですね(汗)。前者の構成のメリットはチューニングがほぼ不要になる、バックアップを自動で取ってくれる(Azure DevOps内にもありますが)、といったあたりでしょうか。

SQL Databaseを24時間使う必要がなければ例えば夜間や土日はS0に落とせば300時間くらいの稼働で済むでしょう。そうすればもうちょっと安くできますし、検索とWebサーバーを同一にすると、たぶん2万円くらいの差額になるはずです。この辺はどうするか、ですかね。