Slide 1

Slide 1 text

DevOps Beyond Azure DevOps ~Azureサービスで広がるDevOpsの可能性~ 2024/12/06 yuriemori

Slide 2

Slide 2 text

Agenda  Introduction  DevOpsを支えるサービス群の全体像(DevOps PlatformとAzureサービ ス)  IaCによるクラウドの構成とプロビジョニングの自動化  まとめ

Slide 3

Slide 3 text

Introduction

Slide 4

Slide 4 text

今日話すこと  DevOpsの実現を支えるのはAzure DevOpsやGitHubなどのDevOps Platformだけ じゃない  Azureの幅広いサービスもDevOpsを支えている  インフラをコード化するとなんでうれしくなるのか

Slide 5

Slide 5 text

Yurie Mori(森 友梨映)  DevOps Engineer  Microsoft MVP for Developer Technologies(DevOps) 2024~  お仕事  AgileとDevOpsの実践の支援  エンタープライズでのDevOpsソリューション( Azure DevOps/GitHub )の導入・ 構築  技術スタック  Azure DevOps, GitHub, Azure, .NET, C#  Please follow me

Slide 6

Slide 6 text

DevOpsを支えるサービス群の全体像

Slide 7

Slide 7 text

DevOpsとソフトウェア開発ライフサイクル DevOpsが関わる範囲は、計画/開発/デリバリー/運用とソフトウェア開発ライフサイクル(SDLC: Software Development Life Cycle)全体に渡る。

Slide 8

Slide 8 text

DevOpsを支えるDevOps PlatformとAzureのサービス(1/2) GitHub Azure Boards Azure Repos Azure Pipelines Azure Test Plans Azure Artifacts GitHub Codespaces GitHub Actions GitHub Packages Azure DevTest Labs Azure App Service Deployment Slot Azure Container Registry Azure Kubernetes Services Azure Application Insights Azure Load Testing Azure Traffic Manager Azure Monitor Azure Key Vault Azure Log Analytics Azure Automation GitHub Issues GitHub Projects GitHub Discussions GitHub Advanced Security GitHub Copilot DevOps Platform Azureサービス Microsoft Defender for Cloud Virtual Machine Event Grid

Slide 9

Slide 9 text

DevOpsを支えるDevOps PlatformとAzureのサービス(2/2) Dev(開発)-Ops(運用)のライフサイクルを包括的にサポートするためには、Azure DevOpsやGitHubだけでなく Azureサービスも含めたDevOps環境の構築が必要 Plan Develop Deliver Operate GitHub Issues GitHub Projects ソースコード管理計画 プロジェクト/タスク管理 パッケージ管理 CI/CD テスト環境の構成 テストケース管理 開発環境の構成 シークレット管理 コンテナ化 コーディング支援 負荷テスト 静的コード解析 GitHub Advanced Security Blue/Green Deploy トラフィック分散による リリース戦略 運用タスクの自動化 アプリの パフォーマンス監視 メトリクス/ログ/ア ラート管理 ログの管理と分析 クラウド環境の セキュリティ管理

Slide 10

Slide 10 text

開発者 コードチェックイン Azure DevOps Azure Git Git Repository Pull Request CI Pipelines リストア&ビルド CD Pipelines リリース deploy swap ASP.NET Core App App Service Azure Web Sites Slot Staging App Service Slot Green Blue stagingスロットで新しいバージョンの 変更確認が完了したら、swapを実 行して現行の本番環境と切り替える Deployment Slotを使ったBlue/Green Deploy Blue/Green Deploy 新しいバージョンの環境(Green)をまずはDeployment Slotにデプロイして、リリース時に稼働中の環境(Blue)と切り替える (Swap)。これにより最小限のダウンタイムでのリリースができる。更に何か問題があったらすぐにBlueとGreenを入れ替えて戻せる。

Slide 11

Slide 11 text

Azure DevOps/GitHubとAzure Automationの統合 Azure 認証 Automation Account Runbook Resource Group Virtual Machines などのAutomationで操作する Azureリソース マネージドIDで 権限付与・ リソースの操作 Azure DevOps Azure Repos OR GitHub Repository ソース同期 認 証 運用タスクの自動化 ソース管理に存在するクラウド環境での運用タスク(ここではAzureVMの開始)を自動化するスクリプトをAzure Automationと統合す ることでRunbookとして発行できる。ソース側でスクリプトに変更があった場合はRunbookも変更が反映される。 運用タスクも含めてバージョン管理ができる。

Slide 12

Slide 12 text

IaCによるクラウドの構成と プロビジョニングの自動化

Slide 13

Slide 13 text

IaC(Infrastructure as Code:コードとしての インフラストラクチャ)  インフラをコードで管理する  サーバー、ネットワーク、ストレージ、設定などのインフラ構成をコード化して定 義するアプローチ  コードを使ってインフラをプロビジョニング  インフラを必要に応じていつでもプロビジョニング、プロビジョニング解除、再プ ロビジョニングできる柔軟なリソースとして扱うことができる インフラ構成を コードとして定義 Azure App Service Storage Account App Service Plan

Slide 14

Slide 14 text

Azureのリソースの構成をコードで定義 作成したいAzureリソースの情報を bicepで定義して実行するとAzure に定義した リソースが作成される

Slide 15

Slide 15 text

IaCのうれしみ  インフラ構成をアプリのようにコード化しバージョン管理することにより、シ ステム管理者はインフラ環境の変更をより厳密に管理することができる  実行すれば即環境が作れる(迅速な環境のプロビジョニング)  正確にクラウド環境の構成の再現が可能  手作業での構成は設定ミスや人為的エラーを含むリスクを孕む コードを実行すればすぐに環境 が作れる

Slide 16

Slide 16 text

GitOps (=IaC × CI/CD)  インフラストラクチャ、構成、アプリケーション コードを定義および管理する ための唯一の信頼できる情報源(Single Source of Truth)として Git リポジトリ を活用する、最新のソフトウェアデリバリのアプローチ  インフラストラクチャのプロビジョニング、構成の更新、アプリケーションの デプロイなど、システムに対するすべての変更は、Git のコミットと pull request を通して行われる As in source code, as in cloud. (ソースで定義されたように、クラウド上でも) ソフトウェア開発で発生するあらゆる変更(アプリ、インフラ)はコード ベースでの変更を起点として、コードレビュー、CI/CDを経て適用される。 Azure App Service Storage Account App Service Plan インフラ構成を コードとして定義 Gitでのコード変更をトリガーとしてCI/CDツール で自動的に変更をクラウド上に適用

Slide 17

Slide 17 text

Azure Pipelines/GitHub ActionsによるBicepのCI/CD GitHub Repository Bicep Azure Entra ID App Service Storage Account App Service Plan Service Principal azure/login GitHub Actions 認証 参照 Secret Variables azure/arm-deploy デプロイ 参照 Azure DevOps サービスコネクション Azure Pipelines Azure Azure Repos Bicep Entra ID App Service Storage Account App Service Plan Service Principal 参照 認証 デプロイ

Slide 18

Slide 18 text

気を付けること  インフラ定義のCI/CDのトリガーはアプリケーションのCI/CDの トリガーとは分ける  アプリのソースは頻繁に変更が入るので「mainブランチに変更が 入ったら」というイベントをCI/CDのトリガーにすることが多い  一方で、インフラ構成のCI/CDのトリガーをアプリと同じタイミン グにすると何度もAzure上のリソースを作成したりプロビジョニン グしたりする処理が走ってAzure上がカオスになるので、インフラ 構成のCI/CDのトリガーは「インフラ構成が変更されたとき」にす るといい  具体的には、ソース管理で「infrastructure」みたいなインフラ定 義やプロビジョニングをするソースを集約して置いておくフォル ダを作って、「そのフォルダ配下のファイルに変更が入った時」 をCI/CDのトリガーとする、みたいな  CI/CDのフローに載せる前にIaCのソースファイルがきちんと動 くかを確認しておく(bicepをAzure上で実行してちゃんと定義 通りにリソースが作られるかとか)  IaCは記述型(Azure CLIやPowerShellとかのスクリプト)より 宣言型(Bicep, ARMテンプレ、Terraform)の方が「実行した ときの状態」がわかりやすくメンテがしやすいので宣言型の方 がおすすめ IaCのファイルを管理する フォルダを作っておく CI/CDのトリガーはこう。 「mainブランチの infrastructure配下のファイルに 変更が発生したときに動く」

Slide 19

Slide 19 text

IaCのコードを読む/書くためのアシスタント Azure クラウドを操作するためのパーソナル アシスタントとして、IaC実装 を加速する GitHub Copilot for Azure コマンド @azure /help @Azureで何ができるかを見 る @azure /learn Azureについて学ぶ @azure /resources Azureリソースに関す る情報 @azure /diagnose アプリケーションの何 が問題なのかを把握する @azure /changeTenant 使用するAzureテ ナントを選択する https://techcommunity.microsoft.com/blog/azuredevcommunityblog/streamline-your-azure-workflow-introducing- github-copilot-for-azure-in-vs-code/4276989

Slide 20

Slide 20 text

まとめ

Slide 21

Slide 21 text

まとめ  AzureサービスをDevOps Platformと組み合わせることによって、より安全な デプロイやクラウド環境のメンテナンスの効率化を達成できる  インフラ環境の構成はコード化(IaC)しておくと便利  IaCをCI/CDするときはトリガーのタイミングに気をつけて

Slide 22

Slide 22 text

References  DevOpsとソフトウェア開発ライフサイクル  https://azure.microsoft.com/ja-jp/resources/cloud-computing-dictionary/what-is-devops  Deployment Slotを使ったBlue/Green Deploy  https://learn.microsoft.com/ja-jp/training/modules/implement-blue-green-deployment-feature-toggles/2-what-blue- green-deployment  https://learn.microsoft.com/ja-jp/azure/app-service/deploy-staging-slots?tabs=portal  Azure DevOps/GitHubとAzure Automationの統合  https://learn.microsoft.com/ja-jp/azure/automation/source-control-integration  IaC  https://learn.microsoft.com/ja-jp/devops/deliver/what-is-infrastructure-as-code  GitOps  https://learn.microsoft.com/ja-jp/training/modules/explore-release-strategy-recommendations/6-explore-gitops-release- strategy-recommendations?ns-enrollment-type=learningpath&ns-enrollment-id=learn.wwl.az-400-design-implement- release-strategy  Azure Pipelines/GitHub ActionsによるBicepのCI/CD  https://learn.microsoft.com/ja-jp/training/modules/implement-bicep/6-exercise-deploy-bicep-file-azure-pipelines  https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/deploy-github-actions?tabs=CLI%2Cuserlevel  GitHub Copilot for Azure  https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azure-github-copilot

Slide 23

Slide 23 text

Thank you ☺