Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

Account Factory for Terraform (AFT) のコードをローカルで検証する - AWS 規範ガイダンス

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

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

Account Factory for Terraform (AFT) のコードをローカルで検証する

アレクサンドル・ポップ (AWS) とミハル・ゴーニアック (AWS) が制作

概要

このパターンは、AWS Control Tower Account Factory for Terraform (AFT) によって管理されている HashiCorp Terraform コードをローカルでテストする方法を示します。TerraformはオープンソースのInfrastructure as Code (IaC)ツールで、コードを使ってクラウドインフラとリソースのプロビジョニングと管理を行うのに役立ちます。AFTは、AWS Control Towerで複数のAWSアカウントのプロビジョニングとカスタマイズを支援するTerraformパイプラインをセットアップします。

コード開発時には、Terraform Infrastructure as Code (IaC) を AFT パイプラインの外部でローカルでテストすると役立つ場合があります。このパターンは、次を実行する方法を説明しています。

  • AFT 管理アカウントの AWS CodeCommit リポジトリに保存されている Terraform コードのローカルコピーを取得します。

  • 取得したコードを使用して AFT パイプラインをローカルでシミュレートします。

このプロシージャは、通常の AFT パイプラインに含まれていない Terraform コマンドを実行する場合にも使用できます。たとえば、このメソッドを使用して、terraform validateterraform planterraform destroyterraform importなどのコマンドを実行できます。

前提条件と制限

前提条件

機能制限

  • このパターンには、AWS Control Tower、AFT、または特定の Terraform モジュールに必要なデプロイ手順は含まれていません。

  • この手順でローカルに生成された出力は、AFT パイプラインのランタイムログには保存されません。

アーキテクチャ

ターゲットテクノロジースタック

  • AWS Control Tower Deployment でデプロイされた AFT インフラ

  • Terraform

  • Git

  • AWS CLI バージョン 2

自動化とスケール

このパターンは、AFTが管理する単一のAWS アカウントでTerraformコードをローカルで呼び出し、AFTグローバルアカウントをカスタマイズする方法を示しています。Terraform コードを検証したら、マルチアカウント環境の残りのアカウントにも適用できます。詳細については、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」を参照してください。

同様のプロセスを使用して、ローカルターミナルで AFT アカウントのカスタマイズを実行することもできます。AFT アカウントのカスタマイズから Terraform コードをローカルで呼び出すには、AFT 管理アカウントの CodeCommit から 「aft-グローバル-アカウント-カスタマイズ リポジトリ」の代わりに「aft-アカウント-カスタマイズ」リポジトリを複製します。

ツール

サービス

  • AWS Control Tower は、規範的なベストプラクティスに従って、AWS 複数アカウント環境を設定して管理するのに役立ちます。

  • AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。

その他のサービス

  • HashiCorp Terraform」は、コードでクラウドインフラストラクチャとリソースをプロビジョニングおよび管理するのに役立つオープンソースのコードとしての Infrastructure as Code (IaC) ツールです。

  • Git」はオープンソースの分散型バージョン管理システムです。

コード

以下は、AFT が管理する Terraform コードをローカルで実行するために使用できる bash スクリプトの例です。このスクリプトを使用するには、このパターンの「エピック」セクションの指示に従ってください。

#! /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 "$@"

エピック

タスク説明必要なスキル

サンプルコードをローカルファイルとして保存します。

  1. このパターンの「コード」「 」セクションにある bash スクリプトの例をコピーして、コードエディターに貼り付けます。

  2. ファイルを ct_terraform.sh と名付けます。次に、そのファイルを~/scripts~/binなどの専用フォルダーにローカルに保存します。

AWS 管理者

サンプルコードを実行可能にします。

ターミナルウィンドウを開き、次のいずれかを実行して、AWS AFT 管理アカウントの認証を行います。

  • AFT 管理アカウントへのアクセスに必要な権限が設定された既存の「AWS CLI プロファイル」を使用します。プロファイルを使用するには、次のコマンドを実行します。

export AWS_PROFILE=<aft account profile name>
  • 組織が SSO を使用して AWS にアクセスしている場合は、組織の SSO ページで AFT 管理アカウントの認証情報を入力します。

注記

組織には、AWS 環境に認証情報を提供するカスタムツールがある場合もあります。

AWS 管理者

正しい AWS リージョンの AFT 管理アカウントへのアクセスを確認します。

重要

AFT 管理アカウントで認証したのと同じターミナルセッションを使用していることを確認してください。

  1. 次のコマンドを実行して、AFT デプロイの AWS リージョンに移動します。

    export AWS_REGION=<aft_region>
  2. 以下を実行して、正しいアカウントであることを確認します。

    • 次のコマンドを実行してください。

    aws code-commit list-repositories
    • 次に、出力に表示されるリポジトリが AFT 管理アカウントにあるリポジトリの名前と一致することを確認します。

AWS 管理者

AFT リポジトリコードを保存する新しいローカルディレクトリを作成します。

同じターミナルセッションから、次のコマンドを実行します。

mkdir my_aft cd my_aft
AWS 管理者

リモート AFT リポジトリコードを複製します。

  1. ローカルターミナルから次のコマンドを実行します。

    git clone codecommit::$AWS_REGION://aft-global-customizations
    注記

    わかりやすいように、この手順と AFT ではメインコードブランチのみを使用します。コード分岐を使用するには、ここにもコード分岐コマンドを入力します。しかし、AFT オートメーションがメインブランチからのコードを適用すると、メインブランチ以外から適用された変更はすべてロールバックされます。

  2. 次に、次のコマンドを実行して、クローンのディレクトリに移動します。

    cd aft-global-customizations/terraform
AWS 管理者

サンプルコードをローカルファイルとして保存します。

タスク説明必要なスキル

サンプルコードをローカルファイルとして保存します。

  1. このパターンの「コード」「 」セクションにある bash スクリプトの例をコピーして、コードエディターに貼り付けます。

  2. ファイルを ct_terraform.sh と名付けます。次に、そのファイルを~/scripts~/binなどの専用フォルダーにローカルに保存します。

AWS 管理者

サンプルコードを実行可能にします。

ターミナルウィンドウを開き、次のいずれかを実行して、AWS AFT 管理アカウントの認証を行います。

  • AFT 管理アカウントへのアクセスに必要な権限が設定された既存の「AWS CLI プロファイル」を使用します。プロファイルを使用するには、次のコマンドを実行します。

export AWS_PROFILE=<aft account profile name>
  • 組織が SSO を使用して AWS にアクセスしている場合は、組織の SSO ページで AFT 管理アカウントの認証情報を入力します。

注記

組織には、AWS 環境に認証情報を提供するカスタムツールがある場合もあります。

AWS 管理者

正しい AWS リージョンの AFT 管理アカウントへのアクセスを確認します。

重要

AFT 管理アカウントで認証したのと同じターミナルセッションを使用していることを確認してください。

  1. 次のコマンドを実行して、AFT デプロイの AWS リージョンに移動します。

    export AWS_REGION=<aft_region>
  2. 以下を実行して、正しいアカウントであることを確認します。

    • 次のコマンドを実行してください。

    aws code-commit list-repositories
    • 次に、出力に表示されるリポジトリが AFT 管理アカウントにあるリポジトリの名前と一致することを確認します。

AWS 管理者

AFT リポジトリコードを保存する新しいローカルディレクトリを作成します。

同じターミナルセッションから、次のコマンドを実行します。

mkdir my_aft cd my_aft
AWS 管理者

リモート AFT リポジトリコードを複製します。

  1. ローカルターミナルから次のコマンドを実行します。

    git clone codecommit::$AWS_REGION://aft-global-customizations
    注記

    わかりやすいように、この手順と AFT ではメインコードブランチのみを使用します。コード分岐を使用するには、ここにもコード分岐コマンドを入力します。しかし、AFT オートメーションがメインブランチからのコードを適用すると、メインブランチ以外から適用された変更はすべてロールバックされます。

  2. 次に、次のコマンドを実行して、クローンのディレクトリに移動します。

    cd aft-global-customizations/terraform
AWS 管理者
タスク説明必要なスキル

以前に実行した AFT パイプラインを開き、Terraform 設定ファイルをローカルフォルダーにコピーします。

注記

このエピックで作成された backend.tf および aft-providers.tf 設定ファイルは、AFT パイプラインをローカルで実行するために必要です。これらのファイルはクラウドベースの AFT パイプライン内で自動的に作成されますが、パイプラインをローカルで実行するには手動で作成する必要があります。AFT パイプラインをローカルで実行するには、単一の AWS アカウント内でのパイプラインの実行を表す 1 つのファイルセットが必要です。

  1. AWS Control Tower のマネジメントアカウント認証情報を使用して、AWS マネジメントコンソール (AWS マネジメントコンソール) にサインインします。AWS CodePipeline コンソールを開きます。Fluent Bit をデプロイしたのと同様の AWS リージョンにいることを確認してください。

  2. 左のナビゲーションペインの [パイプライン] を選択します。

  3. #########-カスタマイズ-パイプラインを選択します。(「#########」は、Terraform コードをローカルで実行するために使用している AWS アカウント ID です)。

  4. 最後にマークされた実行」に「成功」の値が表示されていることを確認します。値が異なる場合は、AFT パイプラインでカスタマイズを再呼び出しする必要があります。詳細については、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」を参照してください。

  5. 最新のランタイムを選択すると、詳細が表示されます。

  6. Apply-AFT-グローバルカスタマイズ」セクションで「Apply-Terraform」ステージを見つけてください。

  7. Apply-Terraform」ステージの「詳細」セクションを選択します。

  8. Apply-Terraform」ステージのランタイムログを検索してください。

  9. ランタイムログで、「\ n\ n aft-providers.tf...「\ n\ n backend.tf」という行で始まり、終わるセクションを探します。 

  10. これら2つのラベル間の出力をコピーし、ローカルTerraformフォルダ(ターミナルセッションのカレントワーキングディレクトリ)内にaft-providers.tf という名前のローカルファイルとして保存します。

    自動的に生成された providers.tf ステートメントの例

    ## Autogenerated providers.tf ## ## Updated on: 2022-05-31 16:27:45 ## provider "aws" { region = "us-east-2" assume_role { role_arn = "arn:aws:iam::############:role/AWSAFTExecution" } default_tags { tags = { managed_by = "AFT" } } }
  11. ランタイムログで、「\ n\ n tf... 「\ n\ n backup.tf」」という行で始まり、終わるセクションを探してください。 

  12. これら2つのラベル間の出力をコピーし、ローカルTerraformフォルダ(ターミナルセッションのカレントワーキングディレクトリ)内にtf という名前のローカルファイルとして保存します。

自動生成された backend.tf ステートメントの例

## Autogenerated backend.tf ## ## Updated on: 2022-05-31 16:27:45 ## terraform { required_version = ">= 0.15.0" backend "s3" { region = "us-east-2" bucket = "aft-backend-############-primary-region" key = "############-aft-global-customizations/terraform.tfstate" dynamodb_table = "aft-backend-############" encrypt = "true" kms_key_id = "cbdc21d6-e04d-4c37-854f-51e199cfcb7c" kms_key_id = "########-####-####-####-############" role_arn = "arn:aws:iam::#############:role/AWSAFTExecution" } }
注記

backend.tf および aft-providers.tfファイルは、特定の AWS アカウント、AFT デプロイ、およびフォルダに関連付けられています。これらのファイルは、同じ AFT デプロイメント内の「aft-グローバル-カスタマイズ」リポジトリと「aft-アカウント-カスタマイズ」リポジトリにあるかどうかによっても異なります。必ず、同じランタイムリストから両方のファイルを生成してください。

AWS 管理者

AFT パイプラインをローカルで実行するために必要な Terraform 設定ファイルを作成します。

タスク説明必要なスキル

以前に実行した AFT パイプラインを開き、Terraform 設定ファイルをローカルフォルダーにコピーします。

注記

このエピックで作成された backend.tf および aft-providers.tf 設定ファイルは、AFT パイプラインをローカルで実行するために必要です。これらのファイルはクラウドベースの AFT パイプライン内で自動的に作成されますが、パイプラインをローカルで実行するには手動で作成する必要があります。AFT パイプラインをローカルで実行するには、単一の AWS アカウント内でのパイプラインの実行を表す 1 つのファイルセットが必要です。

  1. AWS Control Tower のマネジメントアカウント認証情報を使用して、AWS マネジメントコンソール (AWS マネジメントコンソール) にサインインします。AWS CodePipeline コンソールを開きます。Fluent Bit をデプロイしたのと同様の AWS リージョンにいることを確認してください。

  2. 左のナビゲーションペインの [パイプライン] を選択します。

  3. #########-カスタマイズ-パイプラインを選択します。(「#########」は、Terraform コードをローカルで実行するために使用している AWS アカウント ID です)。

  4. 最後にマークされた実行」に「成功」の値が表示されていることを確認します。値が異なる場合は、AFT パイプラインでカスタマイズを再呼び出しする必要があります。詳細については、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」を参照してください。

  5. 最新のランタイムを選択すると、詳細が表示されます。

  6. Apply-AFT-グローバルカスタマイズ」セクションで「Apply-Terraform」ステージを見つけてください。

  7. Apply-Terraform」ステージの「詳細」セクションを選択します。

  8. Apply-Terraform」ステージのランタイムログを検索してください。

  9. ランタイムログで、「\ n\ n aft-providers.tf...「\ n\ n backend.tf」という行で始まり、終わるセクションを探します。 

  10. これら2つのラベル間の出力をコピーし、ローカルTerraformフォルダ(ターミナルセッションのカレントワーキングディレクトリ)内にaft-providers.tf という名前のローカルファイルとして保存します。

    自動的に生成された providers.tf ステートメントの例

    ## Autogenerated providers.tf ## ## Updated on: 2022-05-31 16:27:45 ## provider "aws" { region = "us-east-2" assume_role { role_arn = "arn:aws:iam::############:role/AWSAFTExecution" } default_tags { tags = { managed_by = "AFT" } } }
  11. ランタイムログで、「\ n\ n tf... 「\ n\ n backup.tf」」という行で始まり、終わるセクションを探してください。 

  12. これら2つのラベル間の出力をコピーし、ローカルTerraformフォルダ(ターミナルセッションのカレントワーキングディレクトリ)内にtf という名前のローカルファイルとして保存します。

自動生成された backend.tf ステートメントの例

## Autogenerated backend.tf ## ## Updated on: 2022-05-31 16:27:45 ## terraform { required_version = ">= 0.15.0" backend "s3" { region = "us-east-2" bucket = "aft-backend-############-primary-region" key = "############-aft-global-customizations/terraform.tfstate" dynamodb_table = "aft-backend-############" encrypt = "true" kms_key_id = "cbdc21d6-e04d-4c37-854f-51e199cfcb7c" kms_key_id = "########-####-####-####-############" role_arn = "arn:aws:iam::#############:role/AWSAFTExecution" } }
注記

backend.tf および aft-providers.tfファイルは、特定の AWS アカウント、AFT デプロイ、およびフォルダに関連付けられています。これらのファイルは、同じ AFT デプロイメント内の「aft-グローバル-カスタマイズ」リポジトリと「aft-アカウント-カスタマイズ」リポジトリにあるかどうかによっても異なります。必ず、同じランタイムリストから両方のファイルを生成してください。

AWS 管理者
タスク説明必要なスキル

検証したい Terraform の設定の変更を実装します。

  1. 以下のコマンドを実行して、複製された「aft-グローバル-カスタマイズ」リポジトリに移動します。

    cd aft-global-customizations/terraform
    注記

    ファイルbackend.tfaft-providers.tfはこのディレクトリにあります。このディレクトリには、「aft-グローバル-カスタマイズ」リポジトリの Terraform ファイルも含まれています。

  2. ローカルでテストしたい Terraform コードの変更を設定ファイルに組み込みます。

AWS 管理者

ct_terraform.sh スクリプトを実行して、出力を確認します。

  1. sh」スクリプトを含むローカルフォルダに移動します。

  2. 変更した Terraform コードを検証するには、以下のコマンドを実行してct_terraform.shスクリプトを実行します。

    ~/scripts/ct_terraform.sh apply
    terraform --help
    注記

    このステップでは、任意の Terraform コマンドを実行できます。次のコマンドを実行して、Terraform コマンドの全リストを表示します。

  3. コマンドの出力を確認します。次に、変更をコミットして AFT リポジトリにプッシュバックする前に、コードの変更をローカルでデバッグします。

重要

  • ローカルで行われ、リモートリポジトリにプッシュバックされない変更は一時的なものであり、実行中の AFT パイプラインオートメーションによっていつでも元に戻すことができます。

  • AFT オートメーションは他のユーザーや AFT オートメーショントリガーによって呼び出される可能性があるため、いつでも実行できます。

  • AFT は常にリポジトリのメインブランチからコードを適用し、コミットされていない変更はすべて元に戻します。

AWS 管理者

サンプルの bash スクリプトを使用して AFT パイプラインをローカルで実行します。

タスク説明必要なスキル

検証したい Terraform の設定の変更を実装します。

  1. 以下のコマンドを実行して、複製された「aft-グローバル-カスタマイズ」リポジトリに移動します。

    cd aft-global-customizations/terraform
    注記

    ファイルbackend.tfaft-providers.tfはこのディレクトリにあります。このディレクトリには、「aft-グローバル-カスタマイズ」リポジトリの Terraform ファイルも含まれています。

  2. ローカルでテストしたい Terraform コードの変更を設定ファイルに組み込みます。

AWS 管理者

ct_terraform.sh スクリプトを実行して、出力を確認します。

  1. sh」スクリプトを含むローカルフォルダに移動します。

  2. 変更した Terraform コードを検証するには、以下のコマンドを実行してct_terraform.shスクリプトを実行します。

    ~/scripts/ct_terraform.sh apply
    terraform --help
    注記

    このステップでは、任意の Terraform コマンドを実行できます。次のコマンドを実行して、Terraform コマンドの全リストを表示します。

  3. コマンドの出力を確認します。次に、変更をコミットして AFT リポジトリにプッシュバックする前に、コードの変更をローカルでデバッグします。

重要

  • ローカルで行われ、リモートリポジトリにプッシュバックされない変更は一時的なものであり、実行中の AFT パイプラインオートメーションによっていつでも元に戻すことができます。

  • AFT オートメーションは他のユーザーや AFT オートメーショントリガーによって呼び出される可能性があるため、いつでも実行できます。

  • AFT は常にリポジトリのメインブランチからコードを適用し、コミットされていない変更はすべて元に戻します。

AWS 管理者
タスク説明必要なスキル

バックエンドの.tf ファイルと aft-providers.tf ファイルへの参照を.gitignore ファイルに追加します。

以下のコマンドを実行して、作成したbackend.tf aft-providers.tfファイルを.gitignoreファイルに追加します。

echo backend.tf >> .gitignore echo aft-providers.tf >>.gitignore
注記

ファイルを .gitignore ファイルに移動すると、コミットされてリモート AFT リポジトリにプッシュバックされることがなくなります。

AWS 管理者

コード変更をリモート AFT リポジトリにコミットしてプッシュします。

  1. 新しい Terraform 設定ファイルをリポジトリに追加するには、次のコマンドを実行します。

    git add <filename>
  2. 変更をコミットして AWS CodeCommit のリモート AFT リポジトリにプッシュするには、次のコマンドを実行します。

    git commit -a git push
重要

この時点で 1 つの AWS アカウントにのみ適用されるまで、この手順に従うことで導入するコードが変更されます。

AWS 管理者

ローカルコードの変更をコミットして AFT リポジトリにプッシュバックします。

タスク説明必要なスキル

バックエンドの.tf ファイルと aft-providers.tf ファイルへの参照を.gitignore ファイルに追加します。

以下のコマンドを実行して、作成したbackend.tf aft-providers.tfファイルを.gitignoreファイルに追加します。

echo backend.tf >> .gitignore echo aft-providers.tf >>.gitignore
注記

ファイルを .gitignore ファイルに移動すると、コミットされてリモート AFT リポジトリにプッシュバックされることがなくなります。

AWS 管理者

コード変更をリモート AFT リポジトリにコミットしてプッシュします。

  1. 新しい Terraform 設定ファイルをリポジトリに追加するには、次のコマンドを実行します。

    git add <filename>
  2. 変更をコミットして AWS CodeCommit のリモート AFT リポジトリにプッシュするには、次のコマンドを実行します。

    git commit -a git push
重要

この時点で 1 つの AWS アカウントにのみ適用されるまで、この手順に従うことで導入するコードが変更されます。

AWS 管理者
タスク説明必要なスキル

AFT が管理するすべてのアカウントに変更を適用します。

AFT が管理する複数の AWS アカウントに変更を適用するには、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」の手順に従ってください。

AWS 管理者

AFT が管理する複数のアカウントに変更をロールアウトします。

タスク説明必要なスキル

AFT が管理するすべてのアカウントに変更を適用します。

AFT が管理する複数の AWS アカウントに変更を適用するには、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」の手順に従ってください。

AWS 管理者
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.