Buat kerangka orkestrasi sumber daya berbasis API menggunakan Actions dan Terragrunt GitHub - AWS Prescriptive Guidance

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

Buat kerangka orkestrasi sumber daya berbasis API menggunakan Actions dan Terragrunt GitHub

Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande, dan Akash Kumar, Amazon Web Services

Ringkasan

Pola ini memanfaatkan alur kerja GitHub Actions untuk mengotomatiskan penyediaan sumber daya melalui muatan JSON standar, sehingga tidak perlu konfigurasi manual. Pipeline otomatis ini mengelola siklus hidup penerapan lengkap dan dapat berintegrasi dengan mulus dengan berbagai sistem frontend, dari komponen UI kustom hingga. ServiceNow Fleksibilitas solusi memungkinkan pengguna untuk berinteraksi dengan sistem melalui antarmuka pilihan mereka sambil mempertahankan proses standar.

Arsitektur pipa yang dapat dikonfigurasi dapat disesuaikan untuk memenuhi persyaratan organisasi yang berbeda. Implementasi contoh berfokus pada penyediaan Amazon Virtual Private Cloud (Amazon VPC) dan Amazon Simple Storage Service (Amazon S3). Pola ini secara efektif mengatasi tantangan manajemen sumber daya cloud umum dengan menstandarisasi permintaan di seluruh organisasi dan memberikan poin integrasi yang konsisten. Pendekatan ini memudahkan tim untuk meminta dan mengelola sumber daya sambil memastikan standardisasi.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • GitHub Akun aktif dengan akses ke repositori yang dikonfigurasi

Batasan

  • Sumber daya baru memerlukan penambahan terragrunt.hcl file secara manual ke konfigurasi repositori.

  • Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat AWS Layanan menurut Wilayah. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.

Arsitektur

Diagram berikut menunjukkan komponen dan alur kerja pola ini.

Alur kerja untuk mengotomatiskan penyediaan sumber daya dengan GitHub Actions dan Terraform.

Diagram arsitektur menunjukkan tindakan berikut:

  1. Pengguna mengirimkan payload JSON ke GitHub Actions, memicu pipeline otomatisasi.

  2. Pipeline GitHub Actions mengambil kode sumber daya yang diperlukan dari repositori Terragrunt dan Terraform, berdasarkan spesifikasi payload.

  3. Pipeline mengasumsikan peran yang sesuai AWS Identity and Access Management (IAM) menggunakan ID yang ditentukan Akun AWS . Kemudian, pipeline menyebarkan sumber daya ke target Akun AWS dan mengelola status Terraform menggunakan bucket Amazon S3 khusus akun dan tabel Amazon DynamoDB.

Masing-masing Akun AWS berisi peran IAM untuk akses aman, bucket Amazon S3 untuk penyimpanan status Terraform, dan tabel DynamoDB untuk penguncian status. Desain ini memungkinkan penyebaran sumber daya yang terkontrol dan otomatis di seluruh Akun AWS. Proses penyebaran mempertahankan manajemen status dan kontrol akses yang tepat melalui bucket Amazon S3 khusus dan peran IAM di setiap akun.

Alat

Layanan AWS

  • Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan dapat diskalakan.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

  • Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

Alat lainnya

  • GitHub Actions adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.

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

  • Terragrunt adalah alat orkestrasi yang memperluas keduanya dan kemampuan Terraform. OpenTofu Ini mengelola bagaimana pola infrastruktur generik diterapkan, membuatnya lebih mudah untuk skala dan memelihara perkebunan infrastruktur besar.

Repositori kode

Kode untuk pola ini tersedia di repositori GitHub sample-aws-orchestration-pipeline-terraform.

Praktik terbaik

  • Simpan AWS kredensil dan data sensitif menggunakan rahasia GitHub repositori untuk akses aman.

  • Konfigurasikan penyedia OpenID Connect (OIDC) untuk GitHub Actions untuk mengambil peran IAM, menghindari kredensi statis.

  • Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat Berikan hak istimewa terkecil dan praktik terbaik Keamanan dalam dokumentasi IAM.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Inisialisasi GitHub repositori.

Untuk menginisialisasi GitHub repositori, gunakan langkah-langkah berikut:

  1. Buat GitHub repositori baru untuk meng-host kode pipeline.

  2. Impor workflow-trigger.yml file deployment.yml dan yang terletak di folder.github/workflows dari repositori sumber.

DevOps insinyur

Konfigurasikan peran dan izin IAM.

Untuk mengonfigurasi peran dan izin IAM, gunakan langkah-langkah berikut:

  1. Buat peran IAM dengan hubungan kepercayaan yang diperlukan untuk GitHub Actions untuk terhubung ke tindakan dalam AWS menggunakan penyedia identitas OpenID Connect (OIDC) (iDP).

  2. Lampirkan izin yang diperlukan ke peran IAM untuk membuat backend dan sumber daya yang diinginkan. Untuk informasi selengkapnya, lihat contoh kebijakan untuk membuat VPC dengan Amazon VPC beserta bucket Amazon S3 backend dan tabel DynamoDB.

DevOps insinyur

Siapkan GitHub rahasia dan variabel.

Untuk petunjuk tentang cara mengatur rahasia dan variabel repositori di GitHub repositori, lihat Membuat variabel konfigurasi untuk repositori dalam dokumentasi. GitHub Konfigurasikan variabel berikut:

  • Rahasia repositori

    • PAT_TOKEN— Token akses pribadi Anda dengan izin untuk melakukan operasi GitHub

  • Variabel repositori

    • aws_role— Peran IAM Nama Sumber Daya Amazon (ARN) dengan izin yang sesuai untuk menyebarkan sumber daya yang diperlukan dan GitHub menghubungkan tindakan ke tindakan di AWS

DevOps insinyur

Buat struktur repositori.

Untuk membuat struktur repositori, gunakan langkah-langkah berikut:

  1. Buat folder baru di main cabang untuk menyimpan terragrunt.hcl file, serta output dan changelog setelah pembuatan sumber daya.

  2. Beri nama folder menggunakan huruf kecil sesuai dengan jenis sumber daya yang ingin Anda sediakan melaluinya. Folder digunakan apa adanya nanti di payload. Untuk informasi selengkapnya, lihat struktur sampel untuk Amazon S3 dan Amazon VPC di repositori.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan pipa menggunakan curl.

Untuk menjalankan pipeline dengan menggunakan curl, gunakan langkah-langkah berikut:

  1. Buat file payload.json di direktori lokal Anda. Ikuti struktur yang ditentukan untuk file payload, dan stringify sebelum mengirimkan permintaan. Untuk informasi selengkapnya, lihat contoh muatan di repositori.

  2. Kirimkan permintaan di terminal Anda dengan menggunakan GitHub API seperti yang ditunjukkan pada contoh berikut:

    curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -d @payload.json \ https://api.github.com/repos/OWNER/REPO/actions/workflows/workflow-trigger.yml/dispatches

    Dalam contoh, berikan nilai Anda sendiri untuk hal-hal berikut:

    • YOUR_GITHUB_TOKENdengan token akses GitHub pribadi Anda

    • OWNERdengan nama pemilik repositori

    • REPOdengan nama repositori

Untuk informasi selengkapnya tentang proses eksekusi pipeline, lihat Informasi tambahan.

DevOps insinyur

Validasi hasil eksekusi pipeline

Untuk memvalidasi hasil, gunakan langkah-langkah berikut:

  1. Pantau eksekusi alur kerja GitHub Tindakan di tab Tindakan repositori Anda.

  2. Setelah eksekusi alur kerja berhasil, verifikasi pembuatan sumber daya dengan menggunakan AWS Management Console sebagai berikut:

    1. Untuk Amazon VPC:

      • Arahkan ke layanan Amazon VPC dalam yang ditentukan. Wilayah AWS

      • Periksa VPC baru dengan tag yang sesuai dengan parameter permintaan Anda.

      • Verifikasi blok CIDR dan konfigurasi lainnya.

    2. Untuk Amazon S3:

      • Arahkan ke ember Amazon S3.

      • Di bucket tujuan umum, periksa bucket baru yang cocok dengan parameter permintaan Anda.

      • Verifikasi nama bucket S3 dan konfigurasi lainnya.

Anda juga dapat memverifikasi silang sumber daya yang dibuat dengan menggunakan output.json file yang dibuat di repositori yang berada di dalam sumber daya yang sama dengan file. terragrunt.hcl

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Kirim permintaan pembersihan.

Untuk menghapus sumber daya yang tidak lagi diperlukan, gunakan langkah-langkah berikut:

  1. Kirim permintaan penghapusan dengan menggunakan titik akhir API yang sama tetapi ubah payload sebagai berikut:

    • Ubah RequestType ke delete dalamRequestParameters.

    • Jaga agar semua parameter lain identik dengan create permintaan.

  2. Pantau proses penghapusan dalam GitHub Tindakan.

  3. Setelah alur kerja selesai, verifikasi bahwa changelog.json file di dalam folder sumber daya menunjukkan status. deleted

  4. Verifikasi penghapusan sumber daya dengan menggunakan AWS Management Console.

DevOps insinyur

Sumber daya terkait

AWS Blog

Layanan AWS dokumentasi

GitHub sumber daya

Informasi tambahan

Proses eksekusi pipa

Berikut adalah langkah-langkah eksekusi pipeline:

  1. Memvalidasi format payload JSON - Memastikan bahwa konfigurasi JSON yang masuk terstruktur dengan benar dan berisi semua parameter yang diperlukan

  2. Mengasumsikan peran IAM yang ditentukan - Mengautentikasi dan mengasumsikan peran IAM yang diperlukan untuk operasi AWS

  3. Diperlukan unduhan kode Terraform dan Terragrunt - Mengambil versi kode sumber daya dan dependensi yang ditentukan

  4. Menjalankan penyebaran sumber daya - Menerapkan konfigurasi untuk menyebarkan atau memperbarui AWS sumber daya di lingkungan target

Contoh payload yang digunakan untuk pembuatan VPC

Berikut ini adalah contoh kode untuk pembuatan bucket status backend Terraform:

state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"

Berikut ini adalah contoh payload untuk membuat VPC dengan Amazon VPC, vpc_cidr di mana mendefinisikan spesifikasi blok CIDR untuk VPC. Bucket status Terraform dipetakan ke variabel yang ditentukan dalam file. terraform refParameter berisi nama cabang kode yang akan dieksekusi.

{ "ref": "main", "inputs": { "RequestParameters": { "RequestId": "1111111", "RequestType": "create", "ResourceType": "vpc", "AccountId": "1234567890", "AccountAlias": "account-alias", "RegionId": "us-west-2", "ApplicationName": "myapp", "DivisionName": "division-name", "EnvironmentId": "dev", "Suffix": "poc" }, "ResourceParameters": [ { "VPC": { "vpc_cidr": "10.0.0.0/16" } } ] } }

RequestParametersdigunakan untuk melacak status permintaan di bagian pipeline dan tfstate dibuat berdasarkan informasi ini. Parameter berikut berisi metadata dan informasi kontrol:

  • RequestId— Pengidentifikasi unik untuk permintaan

  • RequestType— Jenis operasi (membuat, memperbarui, atau menghapus)

  • ResourceType— Jenis sumber daya yang akan disediakan

  • AccountId— Target Akun AWS untuk penyebaran

  • AccountAlias— Nama ramah untuk Akun AWS

  • RegionId— Wilayah AWS untuk penyebaran sumber daya

  • ApplicationName— Nama aplikasi

  • DivisionName— Divisi organisasi

  • EnvironmentId— Lingkungan (misalnya, dev dan prod)

  • Suffix— Pengidentifikasi tambahan untuk sumber daya

ResourceParametersberisi konfigurasi khusus sumber daya yang memetakan ke variabel yang ditentukan dalam file Terraform. Variabel khusus apa pun yang perlu diteruskan ke modul Terraform harus disertakan di dalamnya. ResourceParameters Parameter vpc_cidr ini wajib untuk Amazon VPC.