Skip to content

Terraform による Azure インフラ管理 - 使用予定サービスと検討事項 #5

@t0waxx

Description

@t0waxx

概要

Azure をメインとしたインフラ環境を構築するにあたり、以下のサービスを Terraform / Bicep で管理することを検討しています。
この Issue では、導入予定のサービス一覧Terraform での管理戦略考慮すべき点 を整理し、構成案を議論します。


1. 使用検討中の Azure サービス

(1) コンテンツ配信 & API ルーティング

サービス名 目的 備考
Azure CDN 静的ソースのキャッシュ 高速配信用
Azure Front Door API のルーティング & 負荷分散 グローバルなトラフィック管理

(2) 認証・ユーザー管理

サービス名 目的 備考
Azure AD B2C ユーザー認証 外部 ID 連携対応

(3) API & サーバーレス

サービス名 目的 備考
Azure Functions サーバーレス API スケーラブルな処理
Azure API Management API ゲートウェイ & Rate Limiting セキュリティ制御

(4) 軽量 API & コスト削減

サービス名 目的 備考
Cloudflare Workers 軽量 API コスト削減のため一部処理をこちらに

(5) イベント駆動

サービス名 目的 備考
Azure Event Grid イベント処理 トリガー駆動の自動処理

(6) データ管理

サービス名 目的 備考
Azure Database for PostgreSQL 位置情報 & ユーザーデータ管理 フルマネージド DB
Azure Cosmos DB セッション管理 NoSQL ベース
Azure Blob Storage 画像・ログデータ保存 S3 互換のストレージ
Azure Cache for Redis データキャッシュ 高速データ取得

(7) 位置情報・マップ

サービス名 目的 備考
Azure Maps 位置情報 & Geo-fencing 後々のセキュリティ考慮で利用を検討

(8) 通知

サービス名 目的 備考
Azure Notification Hubs プッシュ通知 多デバイス対応

2. CI/CD・監視・インフラ管理

サービス名 目的
Azure DevOps CI/CD パイプライン管理
Azure Monitor & Application Insights API のパフォーマンス監視
Terraform / Bicep インフラ管理

3. Web 版の展開

サービス名 目的
Azure Static Web Apps Flutter Web のホスティング

4. Terraform によるインフラ管理

(1) 主要な Terraform モジュール

Terraform でインフラを管理する際、以下のモジュールを作成・利用予定。

  • network.tfVNET, サブネット, NSG
  • storage.tfBlob Storage, Redis
  • database.tfPostgreSQL, Cosmos DB
  • cdn.tfAzure CDN 設定
  • frontend.tfStatic Web Apps
  • backend.tfAzure Functions, API Management
  • eventing.tfEvent Grid
  • security.tfAzure AD B2C, Firewall 設定

管理単位:

リソース Terraform State
ネットワーク terraform/network/
データベース terraform/database/
API / サーバーレス terraform/api/
認証 & セキュリティ terraform/security/

ステート管理方法

  • Terraform State は Azure Blob Storage に保存
  • Terraform Cloud or Remote Backend を利用
  • 環境ごと (dev, staging, prod) に State を分離
terraform {
  backend "azurerm" {
    resource_group_name  = "terraform-state-rg"
    storage_account_name = "tfstateprod"
    container_name       = "tfstate"
    key                  = "terraform.tfstate"
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions