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

DevOps Beyond Azure DevOps~Azureサービスで広がるDevOpsの...

yuriemori
December 06, 2024
140

DevOps Beyond Azure DevOps~Azureサービスで広がるDevOpsの可能性~

2024/12/06のJAZUG for Womenのショートセッションでお話させて頂いた内容の資料です。
DevOpsといえばAzure DevOpsが思い浮かびますが、DevOpsを支えるサービスはそれだけではありません。本セッションでは、Azureが提供するさまざまなサービスをDevOpsライフサイクルの各フェーズにどう活用できるかを一挙に紹介します。さらに、Azure環境のコード化を実現するIaC(Infrastructure as Code)や、これらをDevOpsライフサイクル全体で管理・運用するGitOpsという新しい開発文化についても触れます。

yuriemori

December 06, 2024
Tweet

More Decks by yuriemori

Transcript

  1. 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
  2. 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
  3. 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 トラフィック分散による リリース戦略 運用タスクの自動化 アプリの パフォーマンス監視 メトリクス/ログ/ア ラート管理 ログの管理と分析 クラウド環境の セキュリティ管理
  4. 開発者 コードチェックイン 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を入れ替えて戻せる。
  5. 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も変更が反映される。 運用タスクも含めてバージョン管理ができる。
  6. IaC(Infrastructure as Code:コードとしての インフラストラクチャ)  インフラをコードで管理する  サーバー、ネットワーク、ストレージ、設定などのインフラ構成をコード化して定 義するアプローチ 

    コードを使ってインフラをプロビジョニング  インフラを必要に応じていつでもプロビジョニング、プロビジョニング解除、再プ ロビジョニングできる柔軟なリソースとして扱うことができる インフラ構成を コードとして定義 Azure App Service Storage Account App Service Plan
  7. 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ツール で自動的に変更をクラウド上に適用
  8. 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 参照 認証 デプロイ
  9. 気を付けること  インフラ定義の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配下のファイルに 変更が発生したときに動く」
  10. 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
  11. 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