{"id":28376489,"url":"https://github.com/shigeyf/azure-alz-devops","last_synced_at":"2025-07-24T01:06:16.595Z","repository":{"id":290874336,"uuid":"975536035","full_name":"shigeyf/azure-alz-devops","owner":"shigeyf","description":"DevOps Landing Zone for Azure Resources Terraform CI/CD deployment","archived":false,"fork":false,"pushed_at":"2025-07-11T18:14:41.000Z","size":4642,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-11T20:27:08.804Z","etag":null,"topics":["azure","azure-devops","azure-resources","ci-cd-pipeline","deployment","devops","landing-zone","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shigeyf.png","metadata":{"files":{"readme":"README.ja.md","changelog":"changelog.config.js","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-30T13:27:16.000Z","updated_at":"2025-07-11T18:14:43.000Z","dependencies_parsed_at":"2025-06-03T17:55:57.438Z","dependency_job_id":"7f0a8b10-cddf-44d6-997b-25bf7e81b450","html_url":"https://github.com/shigeyf/azure-alz-devops","commit_stats":null,"previous_names":["shigeyf/azure-alz-devops"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shigeyf/azure-alz-devops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shigeyf%2Fazure-alz-devops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shigeyf%2Fazure-alz-devops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shigeyf%2Fazure-alz-devops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shigeyf%2Fazure-alz-devops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shigeyf","download_url":"https://codeload.github.com/shigeyf/azure-alz-devops/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shigeyf%2Fazure-alz-devops/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266775383,"owners_count":23982273,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azure-devops","azure-resources","ci-cd-pipeline","deployment","devops","landing-zone","terraform"],"created_at":"2025-05-30T00:07:02.742Z","updated_at":"2025-07-24T01:06:16.163Z","avatar_url":"https://github.com/shigeyf.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform を使った Azure リソース CI/CD デプロイのための DevOps ランディングゾーン\n\n[English](./README.md) | [日本語](./README.ja.md)\n\n---\n\n## Table of Contents\n\n- [概要](#overview)\n- [はじめる](#getting-started)\n  - [0\\. 準備](#start-0-prerequisites)\n  - [1\\. ブートストラップ リソースのプロビジョニング](#start-1-provision-bootstrap)\n  - [2\\. DevOps ランディングゾーン リソースのプロビジョニング](#start-2-provision-devops-lz)\n  - [3\\. DevOps プロジェクト リソースのプロビジョニング](#start-3-provision-devops-project)\n- [プロビジョニングされたリソースの例](#example-output)\n- [このリポジトリの内容](#contents)\n- [技術詳解](#tech-details)\n  - [GitHub Actions ワークフロー アーキテクチャ](#tech-details-github-actions-workflow-arch)\n- [謝辞](#acknowledgements)\n- [コントリビューション](#contributing)\n\n---\n\n\u003ca id=\"overview\"\u003e\u003c/a\u003e\n\n## 概要\n\nこのリポジトリは、Terraform と CI/CD ワークフローを使用して Azure リソースをデプロイおよび管理するための、包括的なモジュール型の Infrastructure as Code ソリューションを提供します。Azure DevOps と GitHub ベースの CI/CD ワークフローの両方をサポートするように設計されており、組織は Git でバージョン管理された Infrastructure as Code を使用して、安全でスケーラブル、かつポリシーに準拠したクラウド環境のプロビジョニングを自動化できます。このモジュールによって提供されるプロジェクト Git リポジトリは、エンタープライズ環境で使用するように設計されており、Azure および Terraform のベスト プラクティスに準拠しています。\n\n![DevOps ランディングゾーン アーキテクチャ概要](/docs/images/devops-landing-zone-architecture.png)\n\n主な機能は次のとおりです。\n\n- **モジュール型の Terraform アーキテクチャ**： 一般的な Azure および DevOps パターン用の再利用可能なモジュール\n- **Azure DevOps と GitHub のサポート**： プロジェクト、リポジトリ、パイプライン、および、セルフホステッドエージェント/ランナーのプロビジョニング\n- **セキュアな状態とシークレットの管理**： Azure Storage と Key Vault を使用して、Terraform の状態と機密情報を管理します\n- **エンタープライズ対応**： デプロイメントタスク実行におけるセキュアなクローズドネットワーク、ID、リポジトリポリシー適用のためのベストプラクティスを実装しています\n- **拡張性とカスタマイズ性**： さまざまな組織の要件やクラウドガバナンスモデルに容易に適応できます\n\n`infra/terraform` ディレクトリには、すべてのコアインフラストラクチャコードが含まれており、明瞭性と拡張性を考慮して整理されています。チームは基盤となるリソースのブートストラップ、DevOps ランディングゾーンのデプロイ、プロジェクト固有の DevOps リソースの一貫した自動化された管理が可能となります。\n\n\u003e [!NOTE]\n\u003e 現時点では GitHub プロジェクトのみをサポートしています。\n\u003e\n\u003e 将来的に Azure DevOps プロジェクトをサポートする予定です。\n\n## Azure アーキテクチャ\n\nAzure ネットワークを含めたアーキテクチャは、以下の図の通りです。この図では、プライベート仮想ネットワークを有効にし、GitHub セルフホステッド ランナーを Azure Container App のジョブを使って、KEDA スケーリングを使ってイベント駆動型で CI/CD ワークフローのジョブを実行する構成を示しています。\n\nまた、開発者がセキュアな開発環境を使って Azure プロジェクトの開発を行うことができるよう、Microsoft Dev Box のためのプロジェクトが展開される構成を示しています。Dev Box の仮想テスクトップはプライベート仮想ネットワークに接続されるため、セキュアに Terraform 状態管理ファイルにアクセスを行い、Azure リソースの展開と管理を行うことができます。\n\n![Azure Architecture of DevOps Landing Zone](./docs/images/devops-landing-zone-azure-network-architecture-with-aca.png)\n\n\u003ca id=\"getting-started\"\u003e\u003c/a\u003e\n\n## はじめる\n\nこのモジュールを使って Azure リソースのデプロイを自動化する DevOps 環境を展開するには、各ステップに必要な準備を行ってから、以下のステップで実行します。\n\n\u003ca id=\"start-0-prerequisites\"\u003e\u003c/a\u003e\n\n### 0. 準備\n\n以下の準備を行ってください。\n\n- Azure CLI\n- Azure Subscriptions を管理する Entra ID テナント\n- Azure Subscriptions (合計 5つ)\n  - DevOps リソースを展開する Azure Subscriptions\n  - プロジェクトで利用する Azure Subscription (4つ)\n    - 開発者が機能開発作業に利用するサブスクリプション\n    - 開発用のサブスクリプション\n    - ステージング用のサブスクリプション\n    - 本番展開用のサブスクリプション\n- 上記の Azure Subscription に対する `所有者` または `共同開発者` の権限\n  - このドキュメントの作業で利用するユーザーの権限\n- GitHub PAT (Personal Access Token)\n  - GitHub プロジェクトリソースのプロビジョニングのためのトークン (以下の権限を付与したトークン)\n    - `repo`\n    - `workflow`\n    - `admin:org`\n    - `user: read:user`\n    - `user: user:email`\n    - `delete_repo`\n  - GitHub セルフホステッド ランナーのためのトークン\n    - `repo`\n    - `admin:org`\n\n\u003e [!NOTE]\n\u003e すべての Azure Subscription は同じ Entra ID テナント配下で用意してください。\n\n\u003e [!NOTE]\n\u003e 上記の GitHub PAT トークンは `classic` パーソナルアクセストークンについて説明しています。よりきめ細かな権限設定が可能な `fine-grained` アクセストークンも利用できます。\n\nAzure CLI を使って準備した Entra ID にログインします。\n\n```bash\naz login --tenant \u003cTenant_Id\u003e\n```\n\n\u003e [!NOTE]\n\u003e 準備したすべてのサブスクリプションでリソースプロバイダーの登録を行ってください。\n\u003e\n\u003e このリポジトリで準備した Terraform IaC コードでは、事前に必要となるリソースプロバイダーの登録を行っておくことが必須条件となっています。また、このプラットフォームを利用する Azure プロジェクトで、このリポジトリで展開されるユーザー割り当て ID の権限で `terraform plan` を実行した際にエラーが発生する可能性があります。\n\u003e\n\u003e リソースプロバイダーの登録は、以下のフォルダのスクリプトを利用することで、指定したリソースプロバイダーの一括登録を行うことができます。\n\u003e\n\u003e ```bash\n\u003e cd $ProjectRoot/infra/terraform/_setup_subscriptions\n\u003e ./register_rps.sh -s \u003cyour_subscription_id\u003e\n\u003e ```\n\n\u003ca id=\"start-1-provision-bootstrap\"\u003e\u003c/a\u003e\n\n### 1. ブートストラップ リソースのプロビジョニング\n\n![ブートストラップ リソースのプロビジョニング](/docs/images/provisioned-bootstrap-resources.png)\n\nブートストラップ モジュール ([`infra/terraform/_bootstrap`](./infra/terraform/_bootstrap/)) を使って、DevOps 環境の基礎となるリソース (Azure Blob Storage および Key Vault) をプロビジョニングします。\n\n```bash\ncd $ProjectRoot/infra/terraform/_bootstrap\n```\n\n\u003ca id=\"start-1-provision-bootstrap-1a\"\u003e\u003c/a\u003e\n\n#### 1-a. パラメーター ファイルの準備\n\nブートストラップ リソースの展開には、サンプル パラメーター ファイル ([`infra/terraform/_bootstrap/terraform.tfvars.sample`](./infra/terraform/_bootstrap/terraform.tfvars.sample)) を参考にしてください。\n\n```bash\ncp terraform.tfvars.sample terraform.tfvars\n```\n\n指定可能なパラメーターは以下の通りです。\n\n\u003ca id=\"start-1-provision-bootstrap-parameters\"\u003e\u003c/a\u003e\n\n| パラメーター                          | 型           | オプショナル | 説明                                                                                                                         |\n| ------------------------------------- | ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| `target_subscription_id`              | string       | いいえ       | DevOps ランディングゾーン (ブートストラップ リソース)をデプロイするための Azure サブスクリプション ID                        |\n| `naming_suffix`                       | list(string) | はい         | リソース命名用のサフィックス (既定値: `[\"alz\", \"devops\", \"bootstrap\"]`)                                                      |\n| `location`                            | string       | いいえ       | DevOps リソースをプロビジョニングするリージョン                                                                              |\n| `tags`                                | map(string)  | はい         | リソース タグ (既定値: `{}` [空のマップ])                                                                                    |\n| `tfstate_container_name`              | string       | はい         | Bootstrap および DevOps リソースの Terraform 状態ファイル (`*.tfstate`) の Blob コンテナー名 (既定値: `tfstate`)             |\n| `enable_user_assigned_identity`       | bool         | はい         | Bootstrap リソースのユーザー割り当て ID を有効にするかどうか (既定値: `false`)                                               |\n| `enable_storage_customer_managed_key` | bool         | はい         | Blob Storage (tfstate) のカスタマー マネージド キー (CMK) を有効にするかどうか (既定値: `true`)                              |\n| `customer_managed_key_policy`         | object       | はい         | カスタマー マネージド キーのポリシー (既定値: RSA 4096 ビット、90日で更新が必要)                                             |\n| `bootstrap_config_filename`           | string       | はい         | ブートストラップ構成ファイルを保存するファイル名 (既定値: `./bootstrap.config.json`)                                         |\n| `tfbackend_config_template_filename`  | string       | はい         | Terraform 状態管理ファイルの azurerm リモートバックエンド構成のテンプレートファイル名 (既定値: `./devops.azurerm.tfbackend`) |\n\n\u003ca id=\"start-1-provision-bootstrap-1b\"\u003e\u003c/a\u003e\n\n#### 1-b. ブートストラップ リソースのプロビジョニング実行\n\nTerraform を実行して、リソース プロビジョニングを実行します。\nこのリソースプロビジョニングでは、まず、Terraform 状態ファイルの管理をローカルで行います。\n\n```bash\nterraform init\nterraform plan\nterraform apply\n```\n\nプロビジョニング完了後、以下のファイルが生成されます。\n\n- `backend.tf`\n- `bootstrap.config.json` (または、`bootstrap_config_filename` で指定したファイル名)\n- `devops.azurerm.tfbackend` (または、`tfbackend_config_template_filename` で指定したファイル名)\n\nこれらのファイルは、ブートストラップ リソースの構成情報を保存したファイルであり、次のステップで利用します。\n\n\u003ca id=\"start-1-provision-bootstrap-1c\"\u003e\u003c/a\u003e\n\n#### 1-c. Terraform 状態管理ファイルの移行\n\nまた、以下のコマンドを実行することで、このリソース展開そのものの Terraform 状態ファイルの管理を azurerm リモートバックエンドで実施することができます。\n\n```bash\nterraform init -migrate-state\n```\n\n\u003ca id=\"start-2-provision-devops-lz\"\u003e\u003c/a\u003e\n\n### 2. DevOps ランディングゾーン リソースのプロビジョニング\n\n![DevOps ランディングゾーン リソースのプロビジョニング](/docs/images/provisioned-devops-resources.png)\n\nブートストラップ モジュールの展開が完了したら、次に、DevOps ランディングゾーン リソースのプロビジョニングを行います。\n\n\u003e [!NOTE]\n\u003e\n\u003e このステップで使用するすべての機密情報 (GitHub PAT など) は Bootstrap の Azure Key Vault で管理されます。\n\n```bash\ncd $ProjectRoot/infra/terraform/devops/lz\n```\n\n\u003ca id=\"start-2-provision-devops-lz-2a\"\u003e\u003c/a\u003e\n\n#### 2-a. パラメーター ファイルの準備\n\nDevOps ランディングゾーン リソースのプロビジョニングには、サンプル パラメーター ファイル ([`infra/terraform/devops/lz/terraform.tfvars.sample`](./infra/terraform/devops/lz/terraform.tfvars.sample)) を参考にしてください。\n\n```bash\ncp terraform.tfvars.sample terraform.tfvars\n```\n\n\u003e [!NOTE]\n\u003e このステップでは、プロビジョニング済みのブートストラップ リソースを利用するため、ブートストラップ リソースの構成情報を格納した JSON ファイルを `bootstrap_config_filename` に必ず指定してください。既定値を利用している場合は変更の必要はありません。\n\n指定可能なパラメーターは以下の通りです。\n\n\u003ca id=\"start-2-provision-devops-lz-parameters\"\u003e\u003c/a\u003e\n\n| パラメーター                                    | 型           | オプショナル | 説明                                                                                                                                           |\n| ----------------------------------------------- | ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| `target_subscription_id`                        | string       | いいえ       | DevOps ランディングゾーン (DevOps ランディングゾーン リソース) をデプロイするための Azure サブスクリプション ID                                |\n| `naming_suffix`                                 | list(string) | はい         | リソース命名用のサフィックス (既定値: `[\"alz\", \"devops\"]`)                                                                                     |\n| `location`                                      | string       | いいえ       | DevOps リソースをプロビジョニングするリージョン                                                                                                |\n| `tags`                                          | map(string)  | はい         | リソース タグ (既定値: `{}` [空のマップ])                                                                                                      |\n| `enable_self_hosted_agents`                     | bool         | はい         | セルフホステッド エージェント/ランナーを有効にするかどうか (既定値: `true`)                                                                    |\n| `enable_private_network`                        | bool         | はい         | セルフホステッド エージェント/ランナーが実行されているプラ​​イベート仮想ネットワークを有効にするかどうか (既定値: `true`)                      |\n| `enable_github`                                 | bool         | はい         | この DevOps リソースに対して GitHub を有効にするかどうか (既定値: `true`)                                                                      |\n| `enable_devbox`                                 | bool         | はい         | この DevOps リソースに対して Microsoft Dev Box を有効にします (デフォルトは `true`)                                                            |\n| `github_organization_name`                      | string       | いいえ       | GitHub の組織名                                                                                                                                |\n| `github_personal_access_token`                  | string       | いいえ       | GitHub リソースのプロビジョニングに使用する GitHub パーソナル アクセス トークン                                                                |\n| `github_personal_access_token_for_runners`      | string       | いいえ       | GitHub セルフホステッド ランナーに使用する GitHub パーソナル アクセス トークン                                                                 |\n| `vnet_address_prefix`                           | string       | いいえ       | プライベート仮想ネットワークの仮想ネットワーク アドレス プレフィックス                                                                         |\n| `vnet_private_endpoint_subnet_address_prefix`   | string       | いいえ       | プライベート仮想ネットワークのプライベート エンドポイント サブネット アドレス プレフィックス                                                   |\n| `vnet_gateway_subnet_address_prefix`            | string       | いいえ       | プライベート仮想ネットワークのゲートウェイ サブネット アドレス プレフィックス                                                                  |\n| `vnet_container_app_subnet_address_prefix`      | string       | いいえ       | プライベート仮想ネットワークの ACA サブネット アドレス プレフィックス                                                                          |\n| `vnet_container_instance_subnet_address_prefix` | string       | いいえ       | プライベート仮想ネットワークの ACI サブネット アドレス プレフィックス                                                                          |\n| `vnet_devbox_subnet_address_prefix`             | string       | いいえ       | プライベート仮想ネットワークの DevBox サブネット アドレス プレフィックス                                                                       |\n| `vnet_private_endpoint_subnet_name`             | string       | はい         | プライベート仮想ネットワークのプライベート エンドポイント サブネット名 (既定値: `private-endpoints`)                                           |\n| `vnet_container_app_subnet_name`                | string       | はい         | プライベート仮想ネットワークの ACA サブネット名 (既定値: `container-apps`)                                                                     |\n| `vnet_container_instance_subnet_name`           | string       | はい         | プライベート仮想ネットワークの ACI サブネット名 (既定値: `container-instances`)                                                                |\n| `vnet_devbox_subnet_name`                       | STring       | はい         | プライベート仮想ネットワークの DevBox サブネット名コメントを追加その他のアクション (既定値: `devbox`)                                          |\n| `devbox_definitions_image_list`                 | list(string) | はい         | Dev Box 定義の Dev Box VM イメージのリスト (既定値: `[\"galleries/default/images/microsoftwindowsdesktop_windows-ent-cpc_win11-24h2-ent-cpc\"]`) |\n| `devbox_definitions_sku_list`                   | list(string) | はい         | Dev Box VM SKU のリスト (既定値: デフォルトでサポートされているすべての SKU)                                                                   |\n| `enable_agents_environment_zone_redundancy`     | bool         | はい         | ACA のゾーン冗長化を有効化するかどうか (既定値: `true`)                                                                                        |\n| `bootstrap_config_filename`                     | string       | はい         | ブートストラップ構成ファイルが保存されたファイル名 (既定値: `../../_bootstrap/bootstrap.config.json`)                                          |\n\n\u003ca id=\"start-2-provision-devops-lz-2b\"\u003e\u003c/a\u003e\n\n#### 2-b. DevOps リソースのプロビジョニング実行\n\nTerraform を実行して、リソース プロビジョニングを実行します。\nこのリソースプロビジョニングでは、まず、Terraform 状態ファイルの管理を azurerm リモートバックエンドで行います。\n\n```bash\nterraform init -backend-config ../../_bootstrap/devops.azurerm.tfbackend -backend-config key=devopslz.terraform.tfstate\nterraform plan\nterraform apply\n```\n\n\u003ca id=\"start-3-provision-devops-project\"\u003e\u003c/a\u003e\n\n### 3. DevOps プロジェクト リソースのプロビジョニング\n\n![DevOps プロジェクト リソースのプロビジョニング](/docs/images/provisioned-devops-project-resources.png)\n\nDevOps ランディングゾーン リソースのプロビジョニングが完了したら、DevOps プロジェクトごとの個別のリソース (リポジトリ、CI/CD パイプライン、ユーザー割り当て ID、セルフホステッド ランナーのコンテナー実行のための環境) をプロビジョニングします。\n\nこのステップは、前のステップまでにプロビジョニングしたDevOps ランディングゾーン リソースを共有して利用し、プロジェクトごとに実行することが可能です。\n\n```bash\ncd $ProjectRoot/infra/terraform/devops/project_github\nexport project_name=\"\u003cyour-project-name\u003e\"\n```\n\n\u003e [!NOTE]\n\u003e 現時点では GitHub プロジェクトのみをサポートしています。\n\u003e\n\u003e 将来的に Azure DevOps プロジェクトをサポートする予定です。\n\n\u003ca id=\"start-3-provision-devops-project-3a\"\u003e\u003c/a\u003e\n\n#### 3-a. パラメーター ファイルの準備\n\nプロジェクト リソースのプロビジョニングには、サンプル パラメーター ファイル ([`infra/terraform/devops/project_github/terraform.tfvars.sample`](./infra/terraform/devops/project_github/terraform.tfvars.sample)) を参考にしてください。\n\n```bash\ncp terraform.tfvars.sample terraform.tfvars\n```\n\n\u003e [!NOTE]\n\u003e このステップでは、プロビジョニング済みのブートストラップ リソースを利用するため、ブートストラップ リソースの構成情報を格納した JSON ファイルを `bootstrap_config_filename` に必ず指定してください。既定値を利用している場合は変更の必要はありません。\n\n\u003e [!NOTE]\n\u003e このステップでは、プロビジョニング済みの DevOps ランディングゾーン リソースを利用するため、DevOps ランディングゾーンリソースをプロビジョニング時の Terraform 状態管理ファイルを利用します。このため、ステップ 2 にプロビジョニングの実行コマンドで指定した azurerm リモートバックエンドの `key` パラメーターを `devops_tfstate_key` に必ず指定してください。このドキュメントで指定した通り実行する場合は、既定値のままで問題ありません。\n\n指定可能なパラメーターは以下の通りです。\n\n\u003ca id=\"start-3-provision-devops-project-parameters\"\u003e\u003c/a\u003e\n\n| パラメーター                                     | 型          | オプショナル | 説明                                                                                                                                                                     |\n| ------------------------------------------------ | ----------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `target_subscription_id`                         | string      | いいえ       | DevOps Project リソースをデプロイするための Azure サブスクリプション ID                                                                                                  |\n| `project_name`                                   | string      | いいえ       | プロジェクト名                                                                                                                                                           |\n| `location`                                       | string      | いいえ       | DevOps プロジェクトリソースをプロビジョニングするリージョン                                                                                                              |\n| `tags`                                           | map(string) | はい         | リソース タグ (既定値: `{}` [空のマップ])                                                                                                                                |\n| `subscriptions`                                  | map(object) | いいえ       | DevOps プロジェクトで使用する Azure サブスクリプションのマップ型リスト                                                                                                   |\n| `use_templates_repository`                       | bool        | はい         | DevOps プロジェクトでテンプレート リポジトリを使用するかどうか (既定値: `true`)                                                                                          |\n| `use_runner_group`                               | bool        | はい         | DevOps プロジェクトで GitHub ランナー グループを使用するかどうか (既定値: `false`)                                                                                       |\n| `use_self_hosted_runners`                        | bool        | はい         | DevOps プロジェクトで GitHub セルフホステッド ランナーを使用するかどうか (既定値: `true`)                                                                                |\n| `self_hosted_runners_type`                       | string      | はい         | GitHub セルフホステッド ランナーのコンピューティング タイプ (オプション: \"aca\" または \"aci\") (既定値: `aca`)                                                             |\n| `use_devbox`                                     | bool        | Yes          | Microsoft Dev Box を使用するかどうか; `devops/lz` モジュールをプロビジョニングする際に `enable_devbox` オプションを `true` に設定する必要があります (デフォルト: `true`) |\n| `devbox_maximum_dev_boxes_per_user`              | number      | Yes          | 指定すると、プロジェクト内のすべてのプールで 1 人の開発者ユーザーが作成できる Dev Box の最大数を制限します (デフォルト: `2`)                                             |\n| `devbox_local_administrator_enabled`             | bool        | Yes          | Dev Center プロジェクト プール内の Dev Box の所有者を Dev Box のローカル管理者として追加するかどうかを指定します (デフォルト: `true`)                                    |\n| `devbox_stop_on_disconnect_grace_period_minutes` | number      | Yes          | 切断が検出された後、Dev Center Dev Box を停止するまでの待機時間 (分単位)。可能な値は 60 〜 480 です (デフォルト: `60`)                                                   |\n| `bootstrap_config_filename`                      | string      | はい         | ブートストラップ構成ファイルを保存するファイル名 (既定値: `../../_bootstrap/bootstrap.config.json`)                                                                      |\n| `devops_tfstate_key`                             | string      | はい         | DevOps ランディングゾーン リソースの Terraform 状態管理ファイル名（azurerm リモートバックエンドキー） (既定値: `devopslz.terraform.tfstate`)                             |\n\n\u003ca id=\"start-3-provision-devops-project-3b\"\u003e\u003c/a\u003e\n\n#### 3-b. プロジェクト リソースのプロビジョニング実行\n\nTerraform を実行して、リソース プロビジョニングを実行します。\nこのリソースプロビジョニングでは、まず、Terraform 状態ファイルの管理を azurerm リモートバックエンドで行います。\n\n```bash\nterraform init -backend-config ../../_bootstrap/devops.azurerm.tfbackend -backend-config key=${project_name}.terraform.tfstate\nterraform plan\nterraform apply\n```\n\n\u003ca id=\"example-output\"\u003e\u003c/a\u003e\n\n## プロビジョニングされたリソースの例\n\n[このドキュメント](./docs/Example-of-DevOps-Landing-Zone.ja.md) では、プロビジョニングされたリソースの例について説明しています。\n\n\u003ca id=\"contents\"\u003e\u003c/a\u003e\n\n## このリポジトリの内容\n\n\u003ca id=\"contents-dir-structure\"\u003e\u003c/a\u003e\n\n### ディレクトリ構成\n\n```text\ninfra/\n└── terraform/\n    ├── _bootstrap/\n    ├── _setup_subscriptions/\n    ├── devops/\n    │   ├── lz/\n    │   └── project_github/\n    └── modules/\n```\n\n\u003ca id=\"contents-bootstrap\"\u003e\u003c/a\u003e\n\n### 1. Bootstrap リソース モジュール (`infra/terraform/_bootstrap/`)\n\nこのフォルダには、Terraform 状態管理とセキュアなシークレット保管に必要な基本的なブートストラップとなる Azure リソースのための Terraform コードと構成ファイルが含まれています。このモジュールでプロビジョニングされるリソースには以下が含まれます。\n\n- Terraform 状態管理のための Azure Storage Account\n- シークレットの保管のための Azure Key Vault\n\n\u003ca id=\"contents-devops\"\u003e\u003c/a\u003e\n\n### 2. DevOps リソース モジュール (`infra/terraform/devops/`)\n\nこのフォルダには、DevOps リソースをプロビジョニングするための、環境固有およびプロジェクト固有の Terraform 構成が含まれています。このフォルダには、以下のサブフォルダが含まれます：\n\n- `lz/`: ランディングゾーン リソース\n  - Azure DevOps と GitHub Actions の両方に対応する、ネットワーク、アイデンティティ、セルフホステッド エージェント/ランナーのインフラストラクチャが含まれます。\n- `project_github/`: プロジェクトレベルのリソース\n  - GitHub ベースの Terraform IaC コードを管理する CI/CD プロジェクトのリソース (リポジトリ、ランナー、ワークフロー設定など) が含まれます。\n\n\u003ca id=\"contents-reusable-modules\"\u003e\u003c/a\u003e\n\n### 3. `modules/`\n\n一般的なインフラストラクチャ パターンに対応する再利用可能な Terraform モジュールのコレクション。以下が含まれます。\n\n- `aca_env/`、`aca_event_job/`、`aca_manual_job/`: Azure Container Apps 環境とジョブのモジュール\n- `aci/`: Azure Container Instances のモジュール\n- `azure_devops/`、`azure_devops_agent_aca/`、`azure_devops_agent_aci/`、`azure_devops_pipelines/`: Azure DevOps プロジェクト、エージェント、パイプライン用のモジュール\n- `github/`、`github_runner_aca/`、`github_runner_aci/`、`github_workflows/`: GitHub リポジトリ、セルフホステッド ランナー (ACA/ACI 上)、ワークフロー自動化用のモジュール\n- `resource_providers/`: Azure リソース プロバイダーの登録と管理のモジュール (リファレンス実装のみでこのプロジェクトでは利用しない)\n\n\u003e [!NOTE]\n\u003e Terraform の `azurerm_resource_provider_registration` には、登録済みの Azure リソースプロバイダーを読み込むためのモジュールが用意されていません。Azure リソースプロバイダーの登録と登録解除は、複数の Terraform プロジェクトデプロイメント間で競合する可能性があり、またリソースプロバイダーの Terraform 状態管理も難しいため、使用すべきではありません。\n\n\u003ca id=\"tech-details\"\u003e\u003c/a\u003e\n\n## 技術詳解\n\n\u003ca id=\"tech-details-github-actions-workflow-arch\"\u003e\u003c/a\u003e\n\n### GitHub Actions ワークフロー アーキテクチャ\n\n[このドキュメント](./docs/GitHub-Actions-Workflow-Architecture.ja.md) では、このリポジトリのプロジェクトでプロビジョニングされる GitHub Actions を使ったワークフローのアーキテクチャについて技術的な詳細な内容を解説しています。\n\n\u003ca id=\"acknowledgements\"\u003e\u003c/a\u003e\n\n## 謝辞\n\nこのプロジェクトは [Azure Landing Zone Accelerator](https://github.com/Azure/alz-terraform-accelerator) プロジェクトから着想を得ています。[Azure Landing Zone Accelerator](https://github.com/Azure/alz-terraform-accelerator) プロジェクトは Azure Landing Zone デプロイメント専用の DevOps リソースに焦点を当てていますが、このプロジェクトは一般的な Azure デプロイメント プロジェクトに焦点を当てています。[Jared Holgate](https://github.com/jaredfholgate) 氏、および、プロジェクトの貢献者およびチーム メンバーの皆様に感謝申し上げます。\n\n\u003ca id=\"contributing\"\u003e\u003c/a\u003e\n\n## コントリビューション\n\nコントリビューションは大歓迎です！ 提案や改善点があれば、PR (Pull Request) を送信するか、Issues を作成してください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshigeyf%2Fazure-alz-devops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshigeyf%2Fazure-alz-devops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshigeyf%2Fazure-alz-devops/lists"}