Account Factory for Terraform (AFT) を図解してみた

絵は理解を助く(けど大した絵ではない)
2022.07.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、ちゃだいん(@chazuke4649)です。

このビデオセッションで使用したアーキテクチャの図解で、説明できていない箇所などがあったので補足したいと思います。

なお、公式ドキュメントには以下にAWSとTerraformそれぞれの図解もあります。それをもう少し詳細に書きました。

AFT アーキテクチャ - AWS Control Tower

Manage AWS Accounts Using Control Tower Account Factory for Terraform | Terraform - HashiCorp Learn

前提

AFTバージョン: v1.5.2

図解

補足説明

各リポジトリについて

AFTを作成する際に4つのリポジトリを指定する必要があります。

[2]requestリポジトリ

AWSアカウントを発行する際に必要な情報を記述するリポジトリとして使用

[3]provisioning-customリポジトリ

次に登場するグローバルやアカウント個別のカスタマイズよりも、もっと前段階で、アカウントに対して処理を行いたいときに使用

ただし、Step Functionsステートマシンを使用することになり、高度なステートマシンの知識が必要になる、かつ、大方やりたいことは次のグローバルやアカウント個別のカスタマイズでできるため、基本使わないでよさそう。

[4]global-customリポジトリ

アカウントのベースラインや初期設定を、全アカウントに対して行う。

[5]account-customリポジトリ

アカウントのベースラインや初期設定を、指定したアカウントだけに行う。

S3バケット

AFTではいくつかS3バケットが作られます。

  • AFT内で実行するTerraformのstateファイルを保管する用途
  • AFT内で実行するAWSサービスのログを収集する用途

VPC

AFTでは、コンピューティングリソースによる処理の多くは、VPC Lambdaによって実行されます。大量のLambdaファンクション自体は大量にいますが、サーバレスなのでコストはコード実行時間のみで済みます。

コスト面での注意点は、インバウンドのインターネット通信から守られたプライベートサブネットにて VPC LambdaのENIが作成されており、アウトバウンドのインターネット通信のために、NAT GatwayがマルチAZ構成(2台)配置されています。

また、AFTモジュールを適用する際のパラメータで、「VPCエンドポイントの利用」をtrueにすることでVPCエンドポイントによるセキュアな通信が可能となりますが、約14点のインターフェース型VPCエンドポイント分のコストは発生するのでご注意ください。

Customization-pipeline

1つのアカウントにつき1つのCodePipelineが作成されます。

それらCodePipelineの中に、グローバルカスタマイズとアカウント個別のカスタマイズを実行するステージが分けられており、それぞれで先述のリポジトリのコードやスクリプトが実行されます。

手動カスタマイズ実行用のStep Functions

アカウントの発行時にカスタマイズは全て実行されますが、発酵後の既存のアカウントにも手動でカスタマイズ用のPipelineを走らせることができます。

上記Step Functionsステートマシンを手動実行し、その際に対象アカウントを指定すれば、既存アカウントへのカスタマイズ実行が可能です。

終わりに

作るのに時間がかかった割にこれでわかりやすくなったのかあまり自信がありませんが、万が一どなたかの役に立ったら幸いです。

それでは今日はこの辺で。ちゃだいん(@chazuke4649)でした。