awesome-copilot/instructions/generate-modern-terraform-code-for-azure.instructions_ja.md

4.3 KiB
Raw Blame History

description applyTo
Azure用の現代的なTerraformコード生成のガイドライン **/*.tf

1. 最新のTerraformとプロバイダーを使用

常に最新の安定版TerraformとAzureプロバイダーをターゲットにします。コードでは、必要なTerraformとプロバイダーのバージョンを指定してこれを強制します。新機能と修正を取得するため、プロバイダーバージョンを最新に保ちます。

2. コードを整理する

論理的なファイル分離でTerraform設定を構造化します

  • リソース用にmain.tfを使用
  • 入力用にvariables.tfを使用
  • 出力用にoutputs.tfを使用
  • 一貫した命名規則とフォーマット(terraform fmt)に従う

これにより、コードのナビゲートと保守が容易になります。

3. モジュールでカプセル化

再利用可能なインフラコンポーネントをグループ化するためにTerraformモジュールを使用します。複数のコンテキストで使用されるリソースセットに対しては

  • 独自の変数/出力を持つモジュールを作成
  • コードの重複ではなくそれを参照
  • これにより再利用性と一貫性が促進される

4. 変数と出力を活用

  • すべての設定可能な値を型と説明を持つ変数を使用してパラメータ化
  • オプション変数について適切な場合はデフォルト値を提供
  • 他のモジュールやユーザー参照のため、キーリソース属性を公開するために出力を使用
  • シークレットを保護するため、機密値を適切にマーク

5. プロバイダーの選択AzureRM対AzAPI

  • ほとんどのシナリオでは**azurermプロバイダーを使用** 高い安定性を提供し、Azureサービスの大部分をカバー
  • azapiプロバイダーは以下が必要な場合のみ使用:
    • 最新のAzure機能
    • azurermでまだサポートされていないリソース
  • コードコメントで選択を文書化
  • 必要に応じて両方のプロバイダーを一緒に使用できるが、疑わしい場合はazurermを優先

6. 最小限の依存関係

  • プロジェクトの範囲を超えて確認なしに追加のプロバイダーやモジュールを導入しない
  • 特別なプロバイダー(例:randomtls)や外部モジュールが必要な場合:
    • 説明するためのコメントを追加
    • ユーザーの承認を確保
  • インフラストラクチャスタックを軽量に保ち、不要な複雑さを避ける

7. 冪等性を確保

  • 同じ結果で繰り返し適用できる設定を作成
  • 非冪等アクションを避ける
    • すべての適用で実行されるスクリプト
    • 二度作成されると競合する可能性があるリソース
  • 複数のterraform apply実行によってテストし、2回目の実行がゼロ変更となることを確保
  • ドリフトや外部変更を適切に処理するため、リソースライフサイクル設定や条件式を使用

8. 状態管理

  • Terraform状態を安全に保存するためにリモートバックエンド状態ロック付きのAzure Storageなどを使用
  • チームコラボレーションを有効にする
  • 状態ファイルをソース管理にコミットしない
  • これにより競合を防ぎ、インフラストラクチャ状態を一貫して保つ

9. ドキュメント化と図表化

  • 最新のドキュメントを維持
  • コードが変更されるたびに新しい変数、出力、使用方法の指示でREADME.mdを更新
  • 自動化のためterraform-docsのようなツールの使用を検討
  • 各重要な更新後にインフラストラクチャ変更を反映するためアーキテクチャ図を更新
  • よく文書化されたコードと図表により、チーム全体がインフラストラクチャを理解できる

10. 変更の検証とテスト

  • 変更を適用する前に**terraform validateを実行**し、terraform plan出力をレビュー
  • エラーや意図しない変更を早期に捕捉
  • 自動チェックの実装を検討
    • CIパイプライン
    • プレコミットフック
    • フォーマット、リンティング、基本検証を強制