Share
Embed
Azure PipelinesによるCI/CDとデータベースデプロイの実践
2024/12/14にTFSUGのAzure DevOpsオンライン Vol.12 ~ Database CI/CDとrecap色々で登壇させて頂きました。
https://tfsug.connpass.com/event/336117/
- データスキーマに変更がある場合のCI/CDのプラクティス
- ソース管理としてデータスキーマをどのように管理・運用していくべきか
yuriemori
February 26, 2025
Transcript
23 slides
-
Agenda Introduction 自己紹介 Azure DevOpsでのデータスキーマのCI/CD設計 データスキーマのコード化
daqpacファイルをパイプラインで使う パイプライン変数とシークレットの管理 Azure上のDocker Registryへのサービスコネクションの作成(テナントが同 じ場合) Azure上のDocker Registryへのサービスコネクションの作成(クロステナン トの場合) Demo(設定を見てみる) dacpacを利用したデータベースデプロイの自動化 Demo(CI/CDをうごかす) まとめ -
Yurie Mori(森 友梨映) DevOps Engineer @Avanade Japan Microsoft
MVP for Developer Technologies(DevOps) 2024~ お仕事 AgileとDevOpsの実践の支援 エンタープライズでのDevOpsソリューション( Azure DevOps/GitHub )の導入・ 構築 技術スタック Azure DevOps, GitHub, Azure, .NET, C# Please follow me -
Yutaka Osada(長田 豊) DevOps Engineer @Avanade Japan お仕事
Azure PaaSによるソリューション構築 エンタープライズでのDevOpsソリューション( Azure DevOps/GitHub )の導入・ 構築 技術スタック Azure DevOps, GitHub, Azure(PaaS), .NET, C# Please follow me -
Azure DevOps データスキーマに変更がある場合もCI/CDしたい データスキーマに変更がある場合(カラム構成が変わるなど)にそれらの変更も 含めてCI/CDしたい データスキーマの変更はどうやってCI/CDすればいい? データスキーマをAzure
PipelinesでCI/CDする場合、Reposにその情報を持つ必要 があるけど、どうやって管理すればいい? Azure App Service Azure SQL Database Repos ソース管理 Pieplines CD pipeline Boards プロジェクト管理 どうやってAzure上のDBに データスキーマの定義を反 映する? -
データスキーマのコード化 デースキーマをソースコードでバージョン管理する場合は、データベースのプロ ジェクトを作成します。 そのデータベースプロジェクトの中で.sqlファイルを作成し、データスキーマを定義 します。 このように、データスキーマをコード化してReposでバージョン管理することにより、 アプリケーションのソースと同様にコードレビューやPipelinesによるCI/CDが可能に
なります。 Azure DevOps Repos Pipelines Azure SQL Database App Service PR Pipeline CI/CD Pipeline DDL文としてバージョン 管理を行う -
daqpacファイルをパイプラインで使う ①データベースプロジェクトのソリューションの パスを指定してビルド ②データベースのソリューションをビルドするこ とでdaqpacファイルができるので、できた daqpacファイルをパイプラインの成果物にコピー Pipelineの中でデータベースプロジェクトをビルドすることで、Dacpacが生成され、 それを基にデータベースへデプロイする Azure
Managed DevOps Poolsを利用してMS Hosted用の windows-2022イメージを指定 ※後続のSqlAzureDacpacDeploymentタスクが Windows環境のみサポートしているため -
パイプライン変数とシークレットの管理 Azure DevOps Pipelines Service connection Library Docker Registry パイプライン変数
CD Pipeline Azure Azure Key Vault EventAtendeesApp--DatabaseName EventAtendeesApp-- SqlDbConnection EventAtendeesApp-- SqlPassword EventAtendeesApp-- SqlServerName EventAtendeesApp-- SqlUserName ‣パイプライン変数として可変項目を定義する ‣データベース接続文字列へパスワードを含む資格情報はPipelinesのLibraryとして定義し Key Vaultとリンクする Key Vaultに格納したsecret をLibraryからシークレットの名 称を指定して参照する -
Azure上のDocker Registryへのサービスコネクション の作成(テナントが同じ場合) テナントA Azure DevOps サービスコネクション テナントA Entra ID
リソースグループ サービスプリンシパル App Service Verify 権限設定 CI/CD Container Registry Azure DevOpsとAzureを繋ぐサービスコネクションをWorkload Identity Federation で作成する場合、クライアントシークレットの運用管理が不要 テナントがAzure DevOps = Azureの場合は、Docker Registryとしてサービスコネク ションを作成することで、Pipelineの中で Docker@2 タスクを利用できる Docker@2 タスクを利用してAzure Container Registryへプッシュする -
Azure上のDocker Registryへのサービスコネクション の作成(テナントが同じ場合) 下記が選択可能で、いずれも同じテナント (Azure DevOpsと紐づいているAzureテナン ト)のみコネクションを確立 • Workload Identity
federation • Service Principal • Managed Identity -
Azure上のDocker Registryへのサービスコネクション の作成(クロステナントの場合) CI/CDパイプラインがいるAzure DevOpsをホストしているAzureテナントと、デプロイ先 のAzureテナントが違う場合はDocker Registryへのサービスコネクションが作成できない ため(2412時点Azure Resource
Managerと異なりmanualを指定できない。) そのため、クロステナントの場合はAzure Resource Managerのサービスコネクションを 作成して、パイプラインの中でAzure CLI経由でContainer Registryにpushする テナントA Azure DevOps サービスコネクション テナントB Entra ID リソースグループ サービスプリンシパル App Service Verify 権限設定 CI/CD Container Registry Azure Resource Manager Azure Resource Managerで確立した資格情報を用 いて、Azure CLI経由でContainer Registryへプッ シュする -
Azure上のDocker Registryへのサービスコネクション の作成(クロステナントの場合) 下記が選択可能 • App registration (automatic) • App
registration or managed identity (manual) • Managed Identity • Managed identity (agent-assigned) • Publish profile 下記が選択可能で、いずれも同じテナント (Azure DevOpsと紐づいているAzureテナント) のみコネクションを確立 • Workload Identity federation • Secret -
demo architecture Azure Azure DevOps Service Principal SQL Database Dev/Stg
Env Container Registry Azure Repos Azure Pipelines Environments Library Pipelines PR Pipeline CI/CD Pipeline Completed 1 2 5 4 Defender for Cloud DevOps Pull request Approved 3 Developer Reviewer Service connection 6 7 Pull Request作成時にPR Pipelineを起動 Key Vaultよりシークレット情報 を取得 Analize stageによる セキュリティチェック Azure DevOps for Workload identity DacpacによるDCL&DMLを実行 • Dev用のデータベース • Stg用のデータベース ※インスタンスは1つでDBを 環境単位で切り分け Key Vault Secret App Service Dev Env App Service Stg Env 承認プロセスが構成された環境へのRegistry Pushは、 承認者からの承認されるまで実行されない -
まとめ データスキーマもコード化してバージョン管理しよう データベースプロジェクトの作成 .sqlファイルでソースコードとして管理 データスキーマをCI/CDする場合は、daqpacファイルを使う
パイプラインの中でデータベースプロジェクトをビルドしてdaqpacファイルを生成 dacpacをデプロイすることによりデータスキーマの変更分をCI/CDできる パイプラインの中でデータベースへのアクセスに必要なシークレットはAzure Key Vaultで安全に管理する Azure Pipelines>LibraryからKey Vaultのシークレットを参照