翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Account Factory for Terraform (AFT) のコードをローカルで検証する
アレクサンドル・ポップ (AWS) とミハル・ゴーニアック (AWS) が制作
環境:本稼働 | テクノロジー: インフラストラクチャ DevOps、モダナイゼーション、 DevelopmentAndTesting | ワークロード:オープンソース |
AWS サービス: AWS Control Tower |
[概要]
このパターンは、AWS Control Tower Account Factory for HashiCorp Terraform (AFT) によって管理される 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 validate
、terraform plan
、terraform destroy
やterraform import
などのコマンドを実行できます。
前提条件と制限
前提条件
「AWS Control Tower
」を使用するアクティブな AWS マルチアカウント環境 完全にデプロイされた AFT 環境。
「Code Commit 用の AWS CLI 認証情報ヘルパー」、インストールおよび設定
Python 3.x
Git
ローカルマシンにインストールされて設定されている 。 git-remote-commit ユーティリティ、インストールおよび設定済み
「Terraform
」がインストールされ、構成されている (ローカルの Terraform パッケージのバージョンは AFT デプロイメントで使用されているバージョンと一致している必要がある)
制約事項
このパターンには、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 管理アカウントの からaft-account-customizations リポジトリの代わりにaft-global-account-customizationsリポジトリ CodeCommit のクローンを作成します。
ツール
サービス
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 "$@"
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
サンプルコードをローカルファイルとして保存します。 |
| AWS 管理者 |
サンプルコードを実行可能にします。 | ターミナルウィンドウを開き、次のいずれかを実行して、AWS AFT 管理アカウントの認証を行います。
注:組織によっては、AWS 環境に認証情報を提供するカスタムツールがある場合もあります。 | AWS 管理者 |
正しい AWS リージョンの AFT 管理アカウントへのアクセスを確認します。 | 重要:AFT 管理アカウントへの認証に使用したのと同じターミナルセッションを使用していることを確認してください。
| AWS 管理者 |
AFT リポジトリコードを保存する新しいローカルディレクトリを作成します。 | 同じターミナルセッションから、次のコマンドを実行します。
| AWS 管理者 |
リモート AFT リポジトリコードを複製します。 |
| AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
以前に実行した AFT パイプラインを開き、Terraform 設定ファイルをローカルフォルダーにコピーします。 | 注:AFT パイプラインをローカルで実行するには、このエピックで作成された「backend.tf」と「aft-providers.tf」設定ファイルが必要です。これらのファイルはクラウドベースの AFT パイプライン内で自動的に作成されますが、パイプラインをローカルで実行するには手動で作成する必要があります。AFT パイプラインをローカルで実行するには、単一の AWS アカウント内でのパイプラインの実行を表す 1 つのファイルセットが必要です。
自動生成された backend.tf ステートメントの例
注: | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
検証したい Terraform の設定の変更を実装します。 |
| AWS 管理者 |
ct_terraform.sh スクリプトを実行して、出力を確認します。 |
重要:
| AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
バックエンドの.tf ファイルと aft-providers.tf ファイルへの参照を.gitignore ファイルに追加します。 | 以下のコマンドを実行して、作成した
注:ファイルをファイルに移動することで、 | AWS 管理者 |
コード変更をリモート AFT リポジトリにコミットしてプッシュします。 |
重要:これまでにこの手順に従って導入したコード変更は、1 つの AWS アカウントにのみ適用されます。 | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AFT が管理するすべてのアカウントに変更を適用します。 | AFT が管理する複数の AWS アカウントに変更を適用するには、AWS Control Tower ドキュメントの「カスタマイズの再呼び出し」の手順に従ってください。 | AWS 管理者 |