Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure PipelinesによるCICDとデータベースデプロイの実践

yutakaosada
December 14, 2024

Azure PipelinesによるCICDとデータベースデプロイの実践

2024/12/14(土)にTFSUG(Team Foundation Server Users Group)で登壇した資料

Azure DevOpsオンライン Vol.12 ~ Database CI/CDとrecap色々
https://tfsug.connpass.com/event/336117/

データスキーマに変更がある場合のCI/CDはどうすればいいのか や アプリのソースコードだけじゃなくてデータスキーマもコード化してReposでバージョン管理したほうがいいよね
というお話をしました

■アジェンダ
★Azure DevOpsでのデータスキーマのCI/CD設計
・データスキーマのコード化
・daqpacファイルをパイプラインをパイプラインで使う
・パイプライン変数とシークレットの管理
・Azure上のDocker Registryへのサービスコネクションの作成(テナントが同じ場合)
・Azure上のDocker Registryへのサービスコネクションの作成(クロステナントの場合)
・Demo(設定を見てみる)
・dacpacを利用したデータベースデプロイの自動化
・Demo(CI/CDをうごかす)
★まとめ

yutakaosada

December 14, 2024
Tweet

More Decks by yutakaosada

Other Decks in Technology

Transcript

  1. Agenda  Introduction  自己紹介  Azure DevOpsでのデータスキーマのCI/CD設計  データスキーマのコード化

     daqpacファイルをパイプラインで使う  パイプライン変数とシークレットの管理  Azure上のDocker Registryへのサービスコネクションの作成(テナントが同 じ場合)  Azure上のDocker Registryへのサービスコネクションの作成(クロステナン トの場合)  Demo(設定を見てみる)  dacpacを利用したデータベースデプロイの自動化  Demo(CI/CDをうごかす)  まとめ
  2. 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
  3. Yutaka Osada(長田 豊)  DevOps Engineer @Avanade Japan  お仕事

     Azure PaaSによるソリューション構築  エンタープライズでのDevOpsソリューション( Azure DevOps/GitHub )の導入・ 構築  技術スタック  Azure DevOps, GitHub, Azure(PaaS), .NET, C#  Please follow me
  4. 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に データスキーマの定義を反 映する?
  5. パイプライン変数とシークレットの管理 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からシークレットの名 称を指定して参照する
  6. 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へプッシュする
  7. 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へプッ シュする
  8. 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
  9. 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は、 承認者からの承認されるまで実行されない
  10. まとめ  データスキーマもコード化してバージョン管理しよう  データベースプロジェクトの作成  .sqlファイルでソースコードとして管理  データスキーマをCI/CDする場合は、daqpacファイルを使う 

    パイプラインの中でデータベースプロジェクトをビルドしてdaqpacファイルを生成  dacpacをデプロイすることによりデータスキーマの変更分をCI/CDできる  パイプラインの中でデータベースへのアクセスに必要なシークレットはAzure Key Vaultで安全に管理する  Azure Pipelines>LibraryからKey Vaultのシークレットを参照