

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Control Tower Account Factory for Terraform (AFT) のデプロイ
<a name="aft-getting-started"></a>

 このセクションは、既存の環境で Account Factory for Terraform (AFT) を設定する AWS Control Tower 環境の管理者を対象としています。ここでは、新しい専用の AFT 管理アカウントを使用して、Account Factory for Terraform (AFT) 環境を設定する方法について説明します。

**注記**  
 Terraform モジュールは AFT をデプロイします。このモジュールは GitHub の [AFT リポジトリ](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main)で入手可能で、AFT リポジトリ全体がモジュールと見なされます。  
 AFT リポジトリのクローンを作成する代わりに、GitHub の AFT モジュールを参照することをお勧めします。これにより、モジュールが利用可能になったときにその更新を管理して使用することができます。

 AWS Control Tower Account Factory for Terraform (AFT) 機能の最新リリースの詳細については、この GitHub リポジトリの[リリースファイル](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/releases)を参照してください。

 **デプロイの前提条件** 

AFT 環境を設定して起動する前に、次のリソースが利用可能であることが必要です。
+  AWS Control Tower ランディングゾーンのホームリージョン。詳細については、「[AWS Control Tower で AWS リージョン を使用する方法](https://docs.aws.amazon.com/controltower/latest/userguide/region-how.html)」を参照してください。
+  AWS Control Tower ランディングゾーン。詳細については、「[AWS Control Tower のランディングゾーンを計画する](https://docs.aws.amazon.com/controltower/latest/userguide/planning-your-deployment.html)」を参照してください。
+  AFT 管理アカウント。AWS Control Tower または他の方法でプロビジョニングして AWS Control Tower に登録することができます。
+  Terraform のバージョンとディストリビューション。詳細については、「[Terraform と AFT のバージョン](https://docs.aws.amazon.com/controltower/latest/userguide/version-supported.html)」を参照してください。
+  コードやその他のファイルへの変更を追跡および管理するための VCS プロバイダー。デフォルトでは、AFT は を使用します AWS CodeCommit。詳細については、「 *AWS CodeCommit ユーザーガイド*」の[「What is AWS CodeCommit?](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)」を参照してください。

  AFT を初めてデプロイする場合に、既存の CodeCommit リポジトリがないときは、GitHub や BitBucket などの外部 VCS プロバイダーを選択する必要があります。詳細については、「[Alternatives for version control of source code in AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-alternative-vcs.html)」を参照してください。
+  AFT をインストールする Terraform モジュールを実行できるランタイム環境。
+  AFT 機能のオプション。詳細については、「[機能オプションを有効にする](https://docs.aws.amazon.com/controltower/latest/userguide/aft-feature-options.html)」を参照してください。

## AWS Control Tower Account Factory for Terraform を設定して起動する
<a name="aft-configure-and-launch"></a>

 以下の手順は、Terraform のワークフローに精通していることを前提としています。AFT のデプロイの詳細については、 AWS Workshop Studio ウェブサイトの[「AFT 入門ラボ](https://catalog.workshops.aws/control-tower/en-US/customization/aft)」を参照してください。

 **ステップ 1: AWS Control Tower ランディングゾーンを起動する** 

 「[AWS Control Tower の開始方法」のステップを完了します](https://catalog.workshops.aws/control-tower/en-US/customization/aft)。ここで、AWS Control Tower 管理アカウントを作成し、AWS Control Tower ランディングゾーンを設定します。

**注記**  
 **AdministratorAccess** 認証情報を持つ AWS Control Tower 管理アカウントのロールを必ず作成してください。詳細については次を参照してください:   
 「*AWS Identity and Access Management IAM ユーザーガイド*」の「[IAM ID (ユーザー、ユーザーグループ、ロール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」 
 「*AWS マネージドポリシーリファレンスガイド*」の「[AdministratorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html)」 

 **ステップ 2: AFT の新しい組織単位を作成する (強く推奨)** 

 AWS Control Tower ランディングゾーン に別の OU を作成することをお勧めします。この OU に AFT 管理アカウントをプロビジョニングします。AWS Control Tower 管理アカウントから新しい OU と AFT 管理アカウントを作成します。詳細については、「[新しい OU を作成する](https://docs.aws.amazon.com/controltower/latest/userguide/create-new-ou.html)」を参照してください。

 **ステップ 3: AFT 管理アカウントをプロビジョニングする** 

 AFT では、AFT 管理オペレーション専用の AWS アカウントをプロビジョニングする必要があります。AWS Control Tower ランディングゾーンに関連付けられている AWS Control Tower 管理アカウントにサインインしているときに、AFT 管理アカウントを作成します。AWS Control Tower コンソールから AFT 管理アカウントをプロビジョニングするには、**[組織]** ページで **[アカウントを作成]** を選択するか、他の方法を選択します。詳細については、[AWS Service Catalog 「Account Factory でアカウントをプロビジョニング](https://docs.aws.amazon.com/controltower/latest/userguide/provision-as-end-user.html)する」を参照してください。

**注記**  
AFT 用に別の OU を作成した場合は、AFT 管理アカウントを作成するときに必ずこの OU を選択してください。

AFT 管理アカウントを完全にプロビジョニングするには、最大 30 分かかる場合があります。

 **ステップ 4: Terraform 環境がデプロイに使用可能であることを検証する** 

 このステップは、Terraform の使用経験があり、Terraform を実行するための手順を適切に行っていることを前提としています。詳細については、HashiCorp Developer ウェブサイトの「[Command: init](https://developer.hashicorp.com/terraform/cli/commands/init)」を参照してください。

**注記**  
 AFT は Terraform バージョン `1.6.0` 以降をサポートしています。

 **ステップ 5: オプション 設定**
+ **オプションで仮想プライベートクラウド (VPC) 設定を設定する**

  AFT モジュールには、AWS Control Tower が中央 AFT 管理アカウントの VPC 内にアカウントリソースをプロビジョニングするかどうかを指定する `aft_enable_vpc` パラメータが含まれています。デフォルトでは、パラメータは `true` に設定されています。このパラメータを `false` に設定すると、AWS Control Tower は VPC やプライベートネットワークリソース (NAT ゲートウェイや VPC エンドポイントなど) を*使用せずに* AFT をデプロイします。`aft_enable_vpc` を無効にすると、*一部の使用パターンで* AFT の運用コストを削減できる場合があります。VPC 設定を追加すると、`false` に設定されている `aft_enable_vpc` パラメータが上書きされます。
**注記**  
`aft_enable_vpc` パラメータを再度有効にする (値を `false` から `true` に切り替える) には、`terraform apply` コマンドを 2 回連続して実行する必要があります。

  新しい VPC をプロビジョニングする代わりに、アカウント内の既存の VPC を使用するように AFT を設定できます。独自の VPC を使用するには、次の VPC 設定パラメータを指定します。
  + `aft_customer_vpc_id` - 既存の VPC の ID
  + `aft_customer_private_subnets` - VPC 内のプライベートサブネット ID のリスト

  設定例:

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # VPC configuration
    aft_customer_vpc_id = "vpc-0123456789abcdef0"
    aft_customer_private_subnets = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"]
    
    # Other AFT parameters...
  }
  ```
**重要**  
既存の AFT デプロイがある場合は、カスタム VPC オプションを使用することはお勧めしません。基盤となる既存の VPC 内のリソースに応じて、Lambda 関数または CodePipeline との依存関係がある場合があります。
+ **オプションで Terraform プロジェクト名を設定する**

  `terraform_project_name` パラメータを設定することで、AFT で使用される Terraform プロジェクト名をカスタマイズできます。デフォルトでは、AFT はデプロイを Terraform Cloud または Terraform Enterprise の「デフォルト」プロジェクトに配置します。

  設定例:

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Project name configuration
    terraform_project_name = "my-organization-aft"
    
    # Other AFT parameters...
  }
  ```
**注記**  
このパラメータは、Terraform Enterprise または Terraform Cloud のデプロイにのみ適用されます。
+ **オプションで AFT リソースにカスタムタグを適用する**

  `tags` パラメータを使用して、すべての AFT リソースにカスタムタグを適用できます。これらのタグは、リソースの整理、コスト配分、アクセスコントロールに役立ちます。

  設定例:

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Custom tags configuration
    tags = {
      Environment = "Production"
      CostCenter = "IT-12345"
      Project = "AFT-Deployment"
      Owner = "platform-team@example.com"
    }
    
    # Other AFT parameters...
  }
  ```

  これらのタグは、AFT モジュールによって作成されたすべてのリソースに適用されます。AFT は、カスタムタグで上書きできない `managed_by = "AFT"` タグを自動的にすべてのリソースに追加します。
**注記**  
カスタムタグは、最初のデプロイ中だけでなく、いつでも追加できます。
+ **必要に応じて、 AWS KMS カスタマーマネージド暗号化キー (CMK) を CloudWatch ロググループと SNS トピックに適用する**

  ロググループと SNS トピックの KMS CMK 暗号化を有効化するには、`cloudwatch_log_group_enable_cmk_encryption` と `sns_topic_enable_cmk_encryption` の変数を設定します。

  これらの設定をオプトインすると、AFT は既存の CMK、*alias/aft* を使用して CloudWatch ログと SNS トピックを暗号化します。この CMK は、AFT が AFT 管理アカウントにデプロイされたときに作成され、ロググループと SNS トピックに適用されます。
  + 変数 `cloudwatch_log_group_enable_cmk_encryption` が **true** に設定されている場合、AFT の CloudWatch ロググループは CMK を使用して暗号化されます。変数がデフォルト値である **false** に設定されている場合、ログは [CloudWatch ログのデフォルトによるサーバー側の暗号化](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)を使用して暗号化されます。
  +  変数 `sns_topic_enable_cmk_encryption` が **true** に設定されている場合、AFT SNS トピック (*aft-notifications* および *aft-failure-notifications*) に送信される通知は、CMK を使用して暗号化されます。変数がデフォルト値である **false** に設定されている場合、SNS メッセージは AWS マネージドキー *alias/aws/sns* で暗号化されます。詳細については、「[SSE の重要な用語](https://docs.aws.amazon.com//sns/latest/dg/sns-server-side-encryption.html#sse-key-terms)」を参照してください。
+ **オプションで CodeBuild コンピューティングタイプを変更する**

  デプロイ中に、AFT が CodeBuild に使用するコンピューティングタイプを変更するには、変数 `aft_codebuild_compute_type` を設定します。

  受け入れられるコンピューティングタイプの詳細については、「[オンデマンド環境のタイプについて](https://docs.aws.amazon.com//codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types)」を参照してください。デフォルトのコンピューティングタイプは `BUILD_GENERAL1_MEDIUM` です。
+ **オプションで Terraform の OpenID Connect (OIDC) を設定する**

  Terraform Enterprise または HCP Terraform (以前の Terraform Cloud) を使用しているお客様は、OIDC プロトコル上に構築された Terraform のワークロード ID トークン (または動的プロバイダー認証情報) を使用して、AFT でワークスペースを安全に接続および認証できます。

  `terraform_oidc_integration` パラメータを に設定することで、AFT ワークスペースの OIDC 統合を有効にできます`true`。デフォルトでは、このパラメータは `false` に設定されます。このパラメータを有効にする場合、デフォルト (`aws.workload.identity` `terraform_oidc_aws_audience`と ) が環境と一致しない場合は`app.terraform.io`、 および `terraform_oidc_hostname`パラメータを確認して設定する必要があります。

  設定例:

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Terraform distribution must be "tfc" or "tfe" for OIDC
    terraform_distribution = "tfc"
  
    # Terraform OIDC Configuration
    terraform_oidc_integration  = true
    terraform_oidc_aws_audience = "aws.workload.identity"  # default
    terraform_oidc_hostname     = "app.terraform.io"       # default; set to your TFE hostname if applicable
    
    # Other AFT parameters...
  }
  ```
**注記**  
このパラメータは、Terraform Enterprise または HCP Terraform デプロイにのみ適用されます。
**注記**  
現在、AFT 管理アカウントで Terraform の OIDC プロバイダーを利用している場合は、この統合にオプトインする前にそのプロバイダーを削除する必要があります。AFT は、デプロイ時にそのプロバイダーを再作成します。

**ステップ 6: Account Factory for Terraform モジュールを呼び出して AFT をデプロイする** 

 **AdministratorAccess** 認証情報を持つ AWS Control Tower 管理アカウント用に作成したロールで、AFT モジュールを呼び出します。AWS Control Tower は、AWS Control Tower 管理アカウントを通じて、AWS Control Tower Account Factory リクエストをオーケストレーションするために必要なすべてのインフラストラクチャを確立する Terraform モジュールをプロビジョニングします。

 GitHub の [AFT リポジトリ](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main)で AFT モジュールを表示できます。GitHub リポジトリ全体が AFT モジュールと見なされます。AFT モジュールの実行と AFT のデプロイに必要な入力については、[README ファイル](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/main/README.md)を参照してください。または、[Terraform レジストリ](https://registry.terraform.io/modules/aws-ia/control_tower_account_factory/aws/latest)で AFT モジュールを表示することもできます。

 環境で Terraform を管理するために確立されたパイプラインを持っている場合は、この AFT モジュールを既存のワークフローに統合できます。それ以外の場合は、必要な認証情報で認証された環境から AFT モジュールを実行します。

 タイムアウトするとデプロイが失敗します。( AWS Security Token Service STS) 認証情報を使用して、完全なデプロイに十分なタイムアウトを確保することをお勧めします。 AWS STS 認証情報の最小タイムアウトは 60 分です。詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」を参照してください。

**注記**  
 AFT が Terraform モジュールを使用してデプロイを完了するまで最大 30 分かかる場合があります。

 **ステップ 7: Terraform 状態ファイルを管理する** 

 AFT をデプロイすると、Terraform 状態ファイルが生成されます。このアーティファクトは、Terraform が作成したリソースの状態を記述します。AFT バージョンを更新する予定がある場合は、必ず Terraform 状態ファイルを保存するか、Amazon S3 と DynamoDB を使用して Terraform バックエンドをセットアップします。AFT モジュールはバックエンドの Terraform 状態を管理しません。

**注記**  
 Terraform 状態ファイルを保護するのはユーザーの責任です。一部の入力変数には、プライベートの `ssh` キーまたは Terraform トークンなどの機密値が含まれる場合があります。デプロイ方法によって、これらの値は Terraform 状態ファイルにプレーンテキストとして表示されることがあります。詳細については、HashiCorp ウェブサイトの「[Sensitive data in State](https://www.terraform.io/docs/language/state/sensitive-data.html)」を参照してください。