Skip to content

Terraformインフラストラクチャ

Terraform はオープンソースのインフラストラクチャー as コード(IaC)ツールで、安全かつ予測可能な方法でインフラの作成・変更・改善を可能にします。

Terraform インフラストラクチャージェネレーターは、Terraform インフラストラクチャープロジェクトを作成します。生成されたアプリケーションには、Checkov セキュリティチェックを通じたセキュリティベストプラクティスが組み込まれています。

新しい Terraform プロジェクトを2つの方法で生成できます:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - terraform#project
  5. 必須パラメータを入力
    • name: tf-infra
  6. クリック Generate
パラメータ デフォルト 説明
name 必須 string - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

ジェネレーターはプロジェクトタイプに応じて異なるファイル構造を作成します:

アプリケーションプロジェクト(--type=application)の場合、リモートステート管理を備えた完全な Terraform アプリケーションが生成されます:

  • Directorysrc
    • main.tf Terraform メイン設定ファイル
    • providers.tf S3 バックエンド付きプロバイダー設定
    • variables.tf 入力変数定義
    • outputs.tf 出力値定義
    • Directoryenv 環境固有の変数ファイル
      • dev.tfvars 開発環境用変数
  • Directorybootstrap リモートステート用ブートストラップ設定
    • main.tf ステート保存用 S3 バケットとポリシー
    • providers.tf AWS プロバイダー設定
    • variables.tf ブートストラップ変数定義
  • project.json プロジェクト設定とビルドターゲット

ライブラリプロジェクト(--type=library)の場合、再利用可能な Terraform モジュール用のシンプルな構造が生成されます:

  • Directorysrc
    • main.tf Terraform メインモジュールファイル
  • project.json プロジェクト設定とビルドターゲット

Terraform インフラストラクチャーの実装

Section titled “Terraform インフラストラクチャーの実装”

src/main.tf 内で Terraform インフラストラクチャーの記述を開始できます。例:

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# インフラストラクチャーをここに宣言
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

別プロジェクト(ライブラリ)のモジュールを実行する場合、次のように記述できます:

module "lib_module" {
source = "../../path/to/my-lib/src"
}

これにより、消費側アプリケーションとライブラリ間に依存関係が自動的に追加されます。

環境固有の変数は src/env/*.tfvars ファイルで設定します。

新しい環境を追加するには、src/env/<環境名>.tfvars ファイルを作成し、project.jsonapply, destroy, init, plan に新しいエントリを追加します。例: prod 環境を追加する場合:

# 本番環境変数
environment = "prod"
region = "us-west-2"

リモートステートブートストラップ(アプリケーション限定)

Section titled “リモートステートブートストラップ(アプリケーション限定)”

アプリケーションプロジェクトでは、インフラをデプロイする前にリモートステートバックエンドのブートストラップが必要です。これにより Terraform ステートファイルを保存する S3 バケットが作成されます:

Terminal window
pnpm nx run tf-infra:bootstrap

利用可能なターゲットはプロジェクトタイプによって異なります:

共通ターゲット(アプリケーション/ライブラリ共通)

Section titled “共通ターゲット(アプリケーション/ライブラリ共通)”

インフラストラクチャーの検証

Section titled “インフラストラクチャーの検証”

validate ターゲットで Terraform 設定を検証できます:

Terminal window
pnpm nx run tf-infra:validate

fmt ターゲットで Terraform コードをフォーマット:

Terminal window
pnpm nx run tf-infra:fmt

test ターゲットで Checkov を使用したセキュリティチェックを実行:

Terminal window
pnpm nx run tf-infra:test

セキュリティテスト結果はルート dist フォルダの dist/packages/<my-terraform-project>/checkov に出力されます。

アプリケーション限定ターゲット

Section titled “アプリケーション限定ターゲット”

以下のターゲットはアプリケーションタイププロジェクトでのみ利用可能です:

インフラストラクチャーの計画

Section titled “インフラストラクチャーの計画”

変更を適用する前に、plan ターゲットで Terraform の実行計画を確認:

Terminal window
pnpm nx run tf-infra:plan

これにより dist/packages/<my-terraform-project>/terraform/dev.tfplan に計画ファイルが作成されます。

init ターゲットで Terraform 作業ディレクトリを初期化:

Terminal window
pnpm nx run tf-infra:init

計画後、apply ターゲットでインフラストラクチャーを AWS にデプロイ:

Terminal window
pnpm nx run tf-infra:apply

Terraform 設定から出力値を取得:

Terminal window
pnpm nx run tf-infra:output

インフラストラクチャーの破棄

Section titled “インフラストラクチャーの破棄”

インフラストラクチャーを削除する場合、destroy ターゲットを使用:

Terminal window
pnpm nx run tf-infra:destroy

ブートストラップリソースの破棄

Section titled “ブートストラップリソースの破棄”

ブートストラップリソース(ステート保存用 S3 バケット)を削除:

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

Terraform の詳細については、Terraform ドキュメントAWS プロバイダードキュメント を参照してください。