Validasi Account Factory untuk kode Terraform (AFT) secara lokal - AWS Prescriptive Guidance

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

Alexandru Pop dan Michal Gorniak, Amazon Web Services

Ringkasan

Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

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 sepertiterraform validate,terraform plan,terraform destroy, danterraform import.

Prasyarat dan batasan

Prasyarat

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

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. 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-customizationsrepositori dari akun manajemen AFT Anda. aft-global-account-customizations CodeCommit

Alat

Layanan AWS

  • AWS Control Towermembantu Anda mengatur dan mengatur lingkungan AWS multi-akun, mengikuti praktik terbaik preskriptif.

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.

Layanan lainnya

  • HashiCorp Terraform adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.

  • Git 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 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

TugasDeskripsiKeterampilan yang dibutuhkan

Simpan kode contoh sebagai file lokal.

  1. Salin contoh skrip bash yang ada di bagian Kode dari pola ini dan tempelkan ke editor kode.

  2. Beri nama filect_terraform.sh, lalu simpan file secara lokal di dalam folder khusus, seperti ~/scripts atau~/bin.

Administrator AWS

Jadikan kode contoh dapat dijalankan.

Buka jendela terminal dan autentikasi ke akun manajemen AWS AFT Anda dengan melakukan salah satu hal berikut:

  • Gunakan AWS CLI profil yang sudah ada yang dikonfigurasi dengan izin yang diperlukan untuk mengakses akun manajemen AFT. Untuk menggunakan profil, Anda dapat menjalankan perintah berikut:

    export AWS_PROFILE=<aft account profile name>
  • Jika organisasi Anda menggunakan SSO untuk mengakses AWS, masukkan kredensil untuk akun manajemen AFT Anda di halaman SSO organisasi Anda.

catatan

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.

penting

Pastikan Anda menggunakan sesi terminal yang sama dengan yang Anda autentikasi ke akun manajemen AFT Anda.

  1. Arahkan ke penerapan AFT Anda Wilayah AWS dengan menjalankan perintah berikut:

    export AWS_REGION=<aft_region>
  2. Pastikan Anda berada di akun yang benar.

    1. Jalankan perintah berikut:

      aws code-commit list-repositories
    2. Verifikasi bahwa repositori yang tercantum dalam output cocok dengan nama repositori yang ada di akun manajemen AFT Anda.

Administrator AWS

Buat direktori lokal baru untuk menyimpan kode repositori AFT.

Dalam sesi terminal yang sama, jalankan perintah berikut:

mkdir my_aft cd my_aft
Administrator AWS

Kloning kode repositori AFT jarak jauh.

  1. Di terminal lokal Anda, jalankan perintah berikut:

    git clone codecommit::$AWS_REGION://aft-global-customizations
    catatan

    Untuk mempermudah, prosedur ini dan AFT hanya menggunakan cabang kode utama. Untuk menggunakan percabangan kode, Anda dapat memasukkan perintah percabangan kode di sini juga. Namun, setiap perubahan yang diterapkan dari cabang non-utama akan dibatalkan ketika otomatisasi AFT menerapkan kode dari cabang utama.

  2. Arahkan ke direktori kloning:

    cd aft-global-customizations/terraform
Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buka pipeline AFT yang dijalankan sebelumnya dan salin file konfigurasi Terraform ke folder lokal.

catatan

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.

  1. Menggunakan kredensil akun AWS Control Tower manajemen Anda, masuk ke AWS Management Console, dan buka konsol.AWS CodePipeline Pastikan Anda berada di Wilayah AWS tempat yang sama di mana Anda menggunakan AFT.

  2. Di panel navigasi kiri, pilih Pipelines.

  3. Pilih ##########-penyesuaian-pipa. (########### adalah Akun AWS ID yang Anda gunakan untuk menjalankan kode Terraform secara lokal.)

  4. Pastikan bahwa Most Recent Execution Marked menunjukkan nilai Succeeded. Jika nilainya berbeda, Anda harus memanggil kembali penyesuaian Anda di pipeline AFT. Untuk informasi selengkapnya, lihat Memanggil ulang penyesuaian dalam dokumentasi. AWS Control Tower

  5. Pilih runtime terbaru untuk memunculkan detailnya.

  6. Di bagian Apply-AFT-Global-Customizations, temukan tahap Apply-Terraform.

  7. Pilih bagian Detail dari tahap Terapkan-Terraform.

  8. Temukan log runtime untuk tahap Apply-Terraform.

  9. Di log runtime, cari bagian yang dimulai dan diakhiri dengan baris berikut:

    "\n\n aft-providers.tf ... "\n \n backend.tf"  
  10. Salin output antara dua label ini dan simpan sebagai file lokal bernama aft-providers.tf dalam folder Terraform lokal (direktori kerja sesi terminal Anda saat ini).

    Contoh pernyataan providers.tf yang dihasilkan secara otomatis

    ## 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. Di log runtime, cari bagian yang dimulai dan diakhiri dengan baris berikut:

    "\n\n tf ... "\n \n backend.tf"
  12. Salin output antara dua label ini dan simpan sebagai file lokal bernama tf dalam folder Terraform lokal (direktori kerja sesi terminal Anda saat ini).

Contoh pernyataan backend.tf yang dibuat secara otomatis

## 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 = "########-####-####-####-############" role_arn = "arn:aws:iam::#############:role/AWSAFTExecution" } }
catatan

aft-providers.tfFile 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-customizationsrepositori aft-global-customizationsdan dalam penerapan AFT yang sama. Pastikan Anda membuat kedua file dari daftar runtime yang sama.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Terapkan perubahan konfigurasi Terraform yang ingin Anda validasi.

  1. Arahkan ke aft-global-customizationsrepositori kloning dengan menjalankan perintah berikut:

    cd aft-global-customizations/terraform
    catatan

    File backend.tf dan aft-providers.tf berada di direktori ini. Direktori ini juga berisi file Terraform dari repositori. aft-global-customizations

  2. Gabungkan perubahan kode Terraform yang ingin Anda uji secara lokal ke dalam file konfigurasi.

Administrator AWS

Jalankan ct_terraform.sh skrip dan tinjau outputnya.

  1. Arahkan ke folder lokal yang berisi skrip sh.

  2. Untuk memvalidasi kode Terraform Anda yang dimodifikasi, jalankan ct_terraform.sh skrip dengan menjalankan perintah berikut:

    ~/scripts/ct_terraform.sh apply
    terraform --help
    catatan

    Anda dapat menjalankan perintah Terraform apa pun selama langkah ini. Untuk melihat daftar lengkap perintah Terraform, jalankan perintah berikut:

  3. Tinjau output perintah, lalu debug perubahan kode secara lokal sebelum melakukan dan mendorong perubahan kembali ke repositori AFT.

penting

 

  • Setiap perubahan yang dilakukan secara lokal dan tidak didorong kembali ke repositori jarak jauh bersifat sementara dan dapat dibatalkan kapan saja oleh otomatisasi pipa AFT yang sedang berjalan.

  • Otomatisasi AFT dapat berjalan kapan saja, karena dapat dipanggil oleh pengguna lain dan pemicu otomatisasi AFT.

  • AFT akan selalu menerapkan kode dari cabang utama repositori, membatalkan perubahan yang tidak berkomitmen.

Administrator AWS
TugasDeskripsiKeterampilan 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:

echo backend.tf >> .gitignore echo aft-providers.tf >>.gitignore
catatan

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.

  1. Untuk menambahkan file konfigurasi Terraform baru ke repositori, jalankan perintah berikut:

    git add <filename>
  2. Untuk melakukan perubahan dan mendorongnya ke repositori AFT jarak jauh CodeCommitt, jalankan perintah berikut:

    git commit -a git push
penting

Perubahan kode yang Anda perkenalkan dengan mengikuti prosedur ini hingga titik ini diterapkan Akun AWS hanya untuk satu.

Administrator AWS
TugasDeskripsiKeterampilan 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 dalam dokumentasi. AWS Control Tower

Administrator AWS