

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
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

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

## Ringkasan
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

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
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**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 Region AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

Diagram berikut menunjukkan komponen dan alur kerja pola ini.

![Alur kerja untuk mengotomatiskan penyediaan sumber daya dengan GitHub Actions dan Terraform.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Diagram arsitektur menunjukkan tindakan berikut:

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

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

1. 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
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Layanan AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 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-alat lainnya**
+ [GitHub Actions](https://docs.github.com/en/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](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) 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](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Praktik terbaik
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Buat dan konfigurasikan repositori
<a name="create-and-configure-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Inisialisasi GitHub repositori. | Untuk menginisialisasi GitHub repositori, gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 
| Konfigurasikan peran dan izin IAM. | Untuk mengonfigurasi peran dan izin IAM, gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | 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](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) dokumentasi. GitHub Konfigurasikan variabel berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 
| Buat struktur repositori. | Untuk membuat struktur repositori, gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 

### Memicu pipeline dan memvalidasi hasil
<a name="trigger-the-pipeline-and-validate-results"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan pipa menggunakan curl.  | Untuk menjalankan pipeline dengan menggunakan [curl](https://curl.se/), gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Untuk informasi selengkapnya tentang proses eksekusi pipeline, lihat [Informasi tambahan](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps insinyur | 
| Validasi hasil eksekusi pipeline | Untuk memvalidasi hasil, gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />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 | 

### Pembersihan sumber daya
<a name="clean-up-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kirim permintaan pembersihan. | Untuk menghapus sumber daya yang tidak lagi diperlukan, gunakan langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 

## Sumber daya terkait
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blog**
+ [Gunakan peran IAM untuk menghubungkan GitHub Tindakan ke tindakan di AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Layanan AWS dokumentasi**
+ [Pembuatan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Memantau file CloudTrail log dengan Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Praktik terbaik keamanan untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub sumber daya**
+ [Buat acara pengiriman repositori](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Membuat webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Menerapkan kontrol akses yang kuat pada GitHub repositori](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Secara teratur mengaudit akses repositori](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Pemeriksaan keamanan di dalam CI/CD pipa](https://github.com/marketplace/actions/checkov-github-action)
+ [Gunakan otentikasi multi-faktor untuk akun GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informasi tambahan
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Proses eksekusi pipa**

Berikut ini 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

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

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

1. **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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Bucket status Terraform dipetakan ke variabel yang ditentukan dalam file. `terraform` `ref`Parameter 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"
                }
            }
        ]
    }
}
```

`RequestParameters`digunakan 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`— AWS Region untuk penyebaran sumber daya
+ `ApplicationName`— Nama aplikasi
+ `DivisionName`— Divisi organisasi
+ `EnvironmentId`— Lingkungan (misalnya, dev dan prod)
+ `Suffix`— Pengenal tambahan untuk sumber daya

`ResourceParameters`berisi 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.