Account Factory for Terraform (AFT) を図解してみた
どうも、ちゃだいん(@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)でした。