翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Account Factory for Terraform (AFT) コードをローカルで検証する
作成者: Alexandru Pop (AWS) と Michal Gorniak (AWS)
環境:本稼働 | テクノロジー: インフラストラクチャ; DevOps; モダナイゼーション; DevelopmentAndTesting | ワークロード: オープンソース |
AWS サービス: AWS Control Tower |
[概要]
このパターンは、AWSControl Tower Account Factory for HashiCorp Terraform () によって管理されている Terraform コードをローカルでテストする方法を示していますAFT。TerraformはオープンソースのInfrastructure as Code (IaC)ツールで、コードを使ってクラウドインフラとリソースのプロビジョニングと管理を行うのに役立ちます。AFT AWS Control Tower で複数のAWSアカウントをプロビジョニングおよびカスタマイズするのに役立つ Terraform パイプラインを設定します。
コード開発中、Terraform インフラストラクチャをローカルでAFTパイプラインの外部でコード (IaC ) としてテストすると便利です。このパターンは、次を実行する方法を説明しています。
AFT 管理アカウントのAWS CodeCommit リポジトリに保存されている Terraform コードのローカルコピーを取得します。
取得したコードを使用して、AFTパイプラインをローカルでシミュレートします。
この手順を使用して、通常のAFTパイプラインに含まれていない Terraform コマンドを実行することもできます。たとえば、このメソッドを使用して、terraform validate
、terraform plan
、terraform destroy
やterraform import
などのコマンドを実行できます。
前提条件と制限
前提条件
AWS Control Tower
を使用するアクティブなAWSマルチアカウント環境 AFT 環境の完全デプロイ
AWS CLI Code Commit の認証情報ヘルパー、インストールおよび設定済み
Python 3.x
Git
ローカルマシンにインストールされて設定されている 。 git-remote-commit ユーティリティ、インストールおよび設定済み
Terraform
がインストールされ、設定されている (ローカル Terraform パッケージバージョンは、AFTデプロイで使用されるバージョンと一致する必要があります)
機能制限
このパターンは、AWSControl Tower、、AFTまたは特定の Terraform モジュールに必要なデプロイ手順には適用されません。
この手順中にローカルで生成された出力は、AFTパイプラインランタイムログには保存されません。
アーキテクチャ
ターゲットテクノロジースタック
AFT AWS Control Tower デプロイ内にデプロイされたインフラストラクチャ
Terraform
Git
AWS CLI バージョン 2
自動化とスケール
このパターンは、1 つの AFTマネージドAWSアカウントでAFTグローバルアカウントのカスタマイズのために Terraform コードをローカルで呼び出す方法を示しています。Terraform コードを検証したら、マルチアカウント環境の残りのアカウントにも適用できます。詳細については、AWSControl Tower ドキュメントの「カスタマイズの再呼び出し」を参照してください。
同様のプロセスを使用して、ローカルターミナルでAFTアカウントのカスタマイズを実行することもできます。AFT アカウントのカスタマイズから Terraform コードをローカルで呼び出すには、 AFT管理アカウントの CodeCommit からaft-account-customizations リポジトリではなくaft-global-account-customizationsリポジトリをクローンします。
ツール
AWS サービス
AWS Control Tower は、規範的なベストプラクティスに従って、AWSマルチアカウント環境をセットアップして管理するのに役立ちます。
AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェル内のコマンドを介してAWSサービスとやり取りするのに役立つオープンソースツールです。
その他のサービス
HashiCorp Terraform
はオープンソースのInfrastructure as Code (IaC) ツールで、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理する際に役立ちます。 「Git
」はオープンソースの分散型バージョン管理システムです。
コード
以下は、 が管理する Terraform コードをローカルで実行するために使用できる bash スクリプトの例ですAFT。このスクリプトを使用するには、このパターンの「エピック」セクションの指示に従ってください。
#! /bin/bash # Version: 1.1 2022-06-24 Unsetting AWS_PROFILE since, when set, it interferes with script operation # 1.0 2022-02-02 Initial Version # # Purpose: For use with AFT: This script runs the local copy of TF code as if it were running within AFT pipeline. # * Facilitates testing of what the AFT pipline will do # * Provides the ability to run terraform with custom arguments (like 'plan' or 'move') which are currently not supported within the pipeline. # # © 2021 Amazon Web Services, Inc. or its affiliates. All Rights Reserved. # This AWS Content is provided subject to the terms of the AWS Customer Agreement # available at http://aws.amazon.com/agreement or other written agreement between # Customer and either Amazon Web Services, Inc. or Amazon Web Services EMEA SARL or both. # # Note: Arguments to this script are passed directly to 'terraform' without parsing nor validation by this script. # # Prerequisites: # 1. local copy of ct GIT repositories # 2. local backend.tf and aft-providers.tf filled with data for the target account on which terraform is to be run # Hint: The contents of above files can be obtain from the logs of a previous execution of the AFT pipeline for the target account. # 3. 'terraform' binary is available in local PATH # 4. Recommended: .gitignore file containing 'backend.tf', 'aft_providers.tf' so the local copy of these files are not pushed back to git readonly credentials=$(aws sts assume-role \ --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text ):role/AWSAFTAdmin \ --role-session-name AWSAFT-Session \ --query Credentials ) unset AWS_PROFILE export AWS_ACCESS_KEY_ID=$(echo $credentials | jq -r '.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo $credentials | jq -r '.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo $credentials | jq -r '.SessionToken') terraform "$@"
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
サンプルコードをローカルファイルとして保存します。 |
| AWS 管理者 |
サンプルコードを実行可能にします。 | ターミナルウィンドウを開き、次のいずれかを実行してAWSAFT管理アカウントを認証します。
注: 組織に、AWS環境に認証情報を提供するカスタムツールがある場合もあります。 | AWS 管理者 |
正しいAWSリージョンの管理AFTアカウントへのアクセスを確認します。 | 重要: AFT管理アカウントで認証したのと同じターミナルセッションを使用していることを確認してください。
| AWS 管理者 |
AFT リポジトリコードを保存する新しいローカルディレクトリを作成します。 | 同じターミナルセッションから、次のコマンドを実行します。
| AWS 管理者 |
リモートAFTリポジトリコードをクローンします。 |
| AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
以前に実行したAFTパイプラインを開き、Terraform 設定ファイルをローカルフォルダにコピーします。 | 注: このエピックで作成された backend.tf および aft-providers.tf 設定ファイルは、AFTパイプラインをローカルで実行するために必要です。これらのファイルはクラウドベースのAFTパイプライン内に自動的に作成されますが、パイプラインをローカルで実行するには手動で作成する必要があります。AFT パイプラインをローカルで実行するには、1 つのAWSアカウント内でパイプラインを実行することを示す 1 セットのファイルが必要です。
自動生成された backend.tf ステートメントの例
注: | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
検証したい Terraform の設定の変更を実装します。 |
| AWS 管理者 |
ct_terraform.sh スクリプトを実行して、出力を確認します。 |
重要:
| AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
バックエンドの.tf ファイルと aft-providers.tf ファイルへの参照を.gitignore ファイルに追加します。 | 以下のコマンドを実行して、作成した
注: ファイルを | AWS 管理者 |
コードの変更をコミットしてリモートAFTリポジトリにプッシュします。 |
重要: この手順に従うことで導入するコードは、この時点で 1 つのAWSアカウントのみに適用されるまで変更されます。 | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
によって管理されるすべてのアカウントに変更をロールアウトしますAFT。 | によって管理される複数のAWSアカウントに変更をロールアウトするにはAFT、AWSControl Tower ドキュメントの「カスタマイズの再呼び出し」の手順に従います。 | AWS 管理者 |