

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Validasi Account Factory untuk kode Terraform (AFT) secara lokal
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop dan Michal Gorniak, Amazon Web Services*

## Ringkasan
<a name="validate-account-factory-for-terraform-aft-code-locally-summary"></a>

Pola ini menunjukkan cara menguji kode HashiCorp Terraform secara lokal yang dikelola oleh AWS Control Tower Account Factory for Terraform (AFT). Terraform adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud. AFT menyiapkan pipeline Terraform yang membantu Anda menyediakan dan menyesuaikan beberapa Akun AWS di. AWS Control Tower

Selama pengembangan kode, akan sangat membantu untuk menguji infrastruktur Terraform Anda sebagai kode (IAc) secara lokal, di luar pipa AFT. Pola ini menunjukkan bagaimana melakukan hal berikut:
+ Ambil salinan lokal kode Terraform yang disimpan di AWS CodeCommit repositori di akun manajemen AFT Anda.
+ Simulasikan pipeline AFT secara lokal dengan menggunakan kode yang diambil.

Prosedur ini juga dapat digunakan untuk menjalankan perintah Terraform yang bukan merupakan bagian dari pipeline AFT normal. Misalnya, Anda dapat menggunakan metode ini untuk menjalankan perintah seperti`terraform validate`,`terraform plan`,`terraform destroy`, dan`terraform import`.

## Prasyarat dan batasan
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Prasyarat**
+ Lingkungan AWS multi-akun aktif yang menggunakan [AWS Control Tower](https://aws.amazon.com/controltower)
+ Lingkungan [AFT](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) yang sepenuhnya digunakan
+ AWS Command Line Interface (AWS CLI), [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI pembantu kredensi untuk AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), diinstal dan dikonfigurasi
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), diinstal dan dikonfigurasi pada mesin lokal Anda
+ `git-remote-commit`utilitas, [diinstal dan dikonfigurasi](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), diinstal dan dikonfigurasi (versi paket Terraform lokal harus cocok dengan versi yang digunakan dalam penerapan AFT)

**Batasan**
+ Pola ini tidak mencakup langkah-langkah penerapan yang diperlukan untuk AWS Control Tower, AFT, atau modul Terraform tertentu.
+ Output yang dihasilkan secara lokal selama prosedur ini tidak disimpan di log runtime pipeline AFT.

## Arsitektur
<a name="validate-account-factory-for-terraform-aft-code-locally-architecture"></a>

**Tumpukan teknologi target**
+ Infrastruktur AFT dikerahkan dalam penerapan AWS Control Tower 
+ Terraform
+ Git
+ AWS CLI versi 2

**Otomatisasi dan skala**

Pola ini menunjukkan cara memanggil kode Terraform secara lokal untuk penyesuaian akun global AFT dalam satu yang dikelola AFT. Akun AWS Setelah kode Terraform Anda divalidasi, Anda dapat menerapkannya ke akun yang tersisa di lingkungan multi-akun Anda. Untuk informasi selengkapnya, lihat [Memanggil ulang penyesuaian dalam dokumentasi.](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) AWS Control Tower 

Anda juga dapat menggunakan proses serupa untuk menjalankan kustomisasi akun AFT di terminal lokal. Untuk memanggil kode Terraform secara lokal dari penyesuaian akun AFT, kloning repositori alih-alih **aft-account-customizations**repositori dari akun manajemen AFT Anda. **aft-global-account-customizations** CodeCommit 

## Alat
<a name="validate-account-factory-for-terraform-aft-code-locally-tools"></a>

**Layanan AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)membantu Anda mengatur dan mengatur lingkungan AWS multi-akun, mengikuti praktik terbaik preskriptif.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat sumber terbuka yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.

**Layanan lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open-source.

**Kode**

Berikut ini adalah contoh skrip bash yang dapat digunakan untuk menjalankan kode Terraform secara lokal yang dikelola oleh AFT. Untuk menggunakan skrip, ikuti instruksi di bagian [Epik](#validate-account-factory-for-terraform-aft-code-locally-epics) dari pola ini.

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

## Epik
<a name="validate-account-factory-for-terraform-aft-code-locally-epics"></a>

### Simpan kode contoh sebagai file lokal
<a name="save-the-example-code-as-a-local-file"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Simpan kode contoh sebagai file lokal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrator AWS | 
| Jadikan kode contoh dapat dijalankan. | Buka jendela terminal dan autentikasi ke akun manajemen AWS AFT Anda dengan melakukan salah satu hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Organisasi Anda mungkin juga memiliki alat khusus untuk memberikan kredensil otentikasi ke lingkungan Anda. AWS  | Administrator AWS | 
| Verifikasi akses ke akun manajemen AFT dengan benar Wilayah AWS. | Pastikan Anda menggunakan sesi terminal yang sama dengan yang Anda autentikasi ke akun manajemen AFT Anda.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrator AWS | 
| Buat direktori lokal baru untuk menyimpan kode repositori AFT. | Dalam sesi terminal yang sama, jalankan perintah berikut:<pre>mkdir my_aft <br />cd my_aft</pre> | Administrator AWS | 
| Kloning kode repositori AFT jarak jauh. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrator AWS | 

### Buat file konfigurasi Terraform yang diperlukan agar pipeline AFT berjalan secara lokal
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka pipeline AFT yang dijalankan sebelumnya dan salin file konfigurasi Terraform ke folder lokal. | File `backend.tf` dan `aft-providers.tf` konfigurasi yang dibuat dalam epik ini diperlukan agar pipeline AFT dapat berjalan secara lokal. File-file ini dibuat secara otomatis dalam pipeline AFT berbasis cloud, tetapi harus dibuat secara manual agar pipeline dapat berjalan secara lokal. Menjalankan pipeline AFT secara lokal memerlukan satu set file yang mewakili menjalankan pipeline dalam satu Akun AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Contoh pernyataan backend.tf yang dibuat secara otomatis**<pre>## Autogenerated backend.tf ##<br />## Updated on: 2022-05-31 16:27:45 ##<br />terraform {<br />  required_version = ">= 0.15.0"<br />  backend "s3" {<br />    region         = "us-east-2"<br />    bucket         = "aft-backend-############-primary-region"<br />    key            = "############-aft-global-customizations/terraform.tfstate"<br />    dynamodb_table = "aft-backend-############"<br />    encrypt        = "true"<br />    kms_key_id     = "########-####-####-####-############"<br />    role_arn       = "arn:aws:iam::#############:role/AWSAFTExecution"<br />  }<br />}</pre>**`aft-providers.tf`**File `backend.tf` dan terkait dengan penyebaran AFT Akun AWS, dan folder tertentu. File-file ini juga berbeda, tergantung pada apakah mereka berada di **aft-account-customizations**repositori **aft-global-customizations**dan dalam penerapan AFT yang sama. Pastikan Anda membuat kedua file dari daftar runtime yang sama. | Administrator AWS | 

### Jalankan pipeline AFT secara lokal dengan menggunakan contoh skrip bash
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Terapkan perubahan konfigurasi Terraform yang ingin Anda validasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrator AWS | 
| Jalankan `ct_terraform.sh` skrip dan tinjau outputnya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)** **[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrator AWS | 

### Dorong perubahan kode lokal Anda kembali ke repositori AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan referensi ke `aft-providers.tf` file `backend.tf` dan file ke `.gitignore` file. | Tambahkan `backend.tf`**** dan `aft-providers.tf` file yang Anda buat ke `.gitignore` file dengan menjalankan perintah berikut:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Memindahkan file ke `.gitignore`**** file memastikan bahwa mereka tidak dikomit dan didorong kembali ke repositori AFT jarak jauh. | Administrator AWS | 
| Komit dan dorong perubahan kode Anda ke repositori AFT jarak jauh. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Perubahan kode yang Anda perkenalkan dengan mengikuti prosedur ini hingga titik ini diterapkan Akun AWS hanya untuk satu. | Administrator AWS | 

### Meluncurkan perubahan ke beberapa akun
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Luncurkan perubahan ke semua akun Anda yang dikelola oleh AFT. | Untuk meluncurkan perubahan ke beberapa Akun AWS yang dikelola oleh AFT, ikuti petunjuk di [Re-invoke kustomisasi](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) dalam dokumentasi. AWS Control Tower  | Administrator AWS | 