本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在本機驗證 Account Factory for Terraform (AFT) 程式碼
由 Alexandru Pop (AWS) 和 Michal Gorniak (AWS) 建立
環境:生產 | 技術:基礎設施 DevOps;現代化; DevelopmentAndTesting | 工作負載:開放原始碼 |
AWS 服務:AWSControl Tower |
Summary
此模式顯示如何本機測試由 AWS Control Tower Account Factory for HashiCorp Terraform () 管理的 Terraform 程式碼AFT。Terraform 是一種開放原始碼基礎設施作為程式碼 (IaC工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。AFT 設定 Terraform 管道,協助您在 AWS Control Tower 中佈建和自訂多個AWS帳戶。
在程式碼開發期間,在AFT管道外部,以程式碼 (IaC) 在本機測試您的 Terraform 基礎設施會很有幫助。此模式顯示如何執行下列操作:
擷取儲存在您AFT管理帳戶中AWS CodeCommit 儲存庫中的 Terraform 程式碼本機副本。
使用擷取的程式碼在本機模擬AFT管道。
此程序也可用於執行不屬於正常AFT管道的 Terraform 命令。例如,您可以使用此方法執行命令,例如 terraform validate
、terraform destroy
、 terraform plan
和 terraform import
。
先決條件和限制
先決條件
使用 AWS Control Tower
的作用中AWS多帳戶環境 完全部署AFT的環境
AWS CLI Code Commit 的憑證協助程式,已安裝和設定
Python 3.x
在本機機器上安裝和設定 Git
。 git-remote-commit 公用程式,已安裝和設定
安裝並設定 Terraform
(本機 Terraform 套件版本必須與AFT部署中使用的版本相符)
限制
此模式不包含 AWS Control Tower、 AFT或任何特定 Terraform 模組所需的部署步驟。
在此程序中在本機產生的輸出不會儲存在AFT管道執行期日誌中。
架構
目標技術堆疊
AFT 在 AWS Control Tower 部署內部署的基礎設施
Terraform
Git
AWS CLI 第 2 版
自動化和擴展
此模式顯示如何針對單一 AFT受管AWS帳戶中的AFT全域帳戶自訂,在本機叫用 Terraform 程式碼。在驗證 Terraform 程式碼之後,您可以將其套用至多帳戶環境中的其餘帳戶。如需詳細資訊,請參閱 AWS Control Tower 文件中的重新叫用自訂。
您也可以使用類似的程序,在本機終端機中執行AFT帳戶自訂。若要從AFT帳戶自訂中本機叫用 Terraform 程式碼,請在您的AFT管理帳戶中複製aft-account-customizations 儲存庫,而不是從 CodeCommit 儲存aft-global-account-customizations庫。
工具
AWS 服務
AWS Control Tower 可協助您設定和管理AWS多帳戶環境,並遵循規範最佳實務。
AWS Command Line Interface (AWS CLI) 是開放原始碼工具,可協助您透過命令列 Shell 中的命令與 AWS服務互動。
其他服務
HashiCorp Terraform
是一種開放原始碼基礎設施作為程式碼 IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。 Git
是開放原始碼的分散式版本控制系統。
Code
以下是範例 bash 指令碼,可用於本機執行由 管理的 Terraform 程式碼AFT。若要使用指令碼,請遵循此模式的 Epics 區段中的指示。
#! /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 組態檔案複製到本機資料夾。 | 注意:AFT管道需要在此史詩中建立的 backend.tf 和 aft-providers.tf 組態檔案,才能在本機執行。這些檔案會在雲端AFT管道中自動建立,但必須手動建立,才能在本機執行管道。在本機執行AFT管道需要一組檔案,代表在單一AWS帳戶中執行管道。
自動產生的 backend.tf 陳述式範例
注意: | AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
實作您要驗證的 Terraform 組態變更。 |
| AWS 管理員 |
執行 ct_terraform.sh 指令碼並檢閱輸出。 |
重要:
| AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
將 backend.tf 和 aft-providers.tf 檔案的參考新增至 .gitignore 檔案。 | 執行下列命令,將建立的
注意:將檔案移至 | AWS 管理員 |
認可並推送程式碼變更至遠端AFT儲存庫。 |
重要事項:您遵循此程序引入的程式碼變更,直到此點僅適用於一個 AWS 帳戶為止。 | AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
將變更推出 管理的所有帳戶AFT。 | 若要對 管理的多個AWS帳戶展開變更AFT,請遵循 AWS Control Tower 文件中的重新叫用自訂中的指示。 | AWS 管理員 |