

 **Bantu tingkatkan halaman ini** 

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

Untuk berkontribusi pada panduan pengguna ini, pilih **Edit halaman ini pada GitHub** tautan yang terletak di panel kanan setiap halaman.

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

# Kemampuan EKS
<a name="capabilities"></a>

**Tip**  
Memulai: [Buat kemampuan ACK](create-ack-capability.md) \$1 [Buat kemampuan Argo CD \$1 Buat kemampuan](create-argocd-capability.md) [kro](create-kro-capability.md) 

Amazon EKS Capabilities adalah serangkaian fitur cluster yang dikelola sepenuhnya yang membantu mempercepat kecepatan pengembang dan mengurangi kompleksitas pembuatan dan penskalaan dengan Kubernetes. Kemampuan EKS adalah fitur asli Kubernetes untuk penerapan berkelanjutan deklaratif, manajemen AWS sumber daya, dan penulisan dan orkestrasi sumber daya Kubernetes, semuanya dikelola sepenuhnya oleh. AWS Dengan Kemampuan EKS, Anda dapat lebih fokus pada membangun dan menskalakan beban kerja Anda, menurunkan beban operasional dari layanan platform dasar ini. AWS Kemampuan ini berjalan di dalam EKS daripada di cluster Anda, menghilangkan kebutuhan untuk menginstal, memelihara, dan menskalakan komponen platform penting pada node pekerja Anda.

Untuk memulai, Anda dapat membuat satu atau lebih Kemampuan EKS pada cluster EKS baru atau yang sudah ada. Untuk melakukan ini, Anda dapat menggunakan AWS CLI, EKS, eksctl APIs, atau alat pilihan Anda. Konsol Manajemen AWS infrastructure-as-code Meskipun Kemampuan EKS dirancang untuk bekerja sama, mereka adalah sumber daya cloud independen yang dapat Anda pilih dan pilih berdasarkan kasus penggunaan dan persyaratan Anda.

Semua versi Kubernetes yang didukung oleh EKS didukung untuk Kemampuan EKS.

**catatan**  
Kemampuan EKS tersedia di semua Wilayah AWS komersial tempat Amazon EKS tersedia. Untuk daftar Wilayah yang didukung, lihat [titik akhir dan kuota Amazon EKS di Referensi](https://docs.aws.amazon.com/general/latest/gr/eks.html) AWS Umum.

## Kemampuan yang Tersedia
<a name="_available_capabilities"></a>

### AWS Pengontrol untuk Kubernetes (ACK)
<a name="shared_aws_controllers_for_kubernetes_ack"></a>

ACK memungkinkan pengelolaan AWS sumber daya menggunakan Kubernetes APIs, memungkinkan Anda membuat dan mengelola bucket S3, database RDS, peran IAM, dan sumber daya lainnya menggunakan sumber daya kustom Kubernetes. AWS ACK terus mendamaikan keadaan yang Anda inginkan dengan status aktual di AWS, memperbaiki penyimpangan apa pun dari waktu ke waktu untuk menjaga sistem Anda tetap sehat dan sumber daya Anda dikonfigurasi seperti yang ditentukan. Anda dapat mengelola AWS sumber daya di samping beban kerja Kubernetes Anda menggunakan alat dan alur kerja yang sama, dengan dukungan untuk lebih dari 50 AWS layanan termasuk S3, RDS, DynamoDB, dan Lambda. ACK mendukung manajemen sumber daya lintas akun dan lintas wilayah, memungkinkan arsitektur manajemen sistem multi-akun dan multi-cluster yang kompleks. ACK mendukung sumber daya hanya-baca dan adopsi hanya-baca, memfasilitasi migrasi dari infrastruktur lain sebagai alat kode ke dalam sistem berbasis Kubernetes Anda.

 [Pelajari lebih lanjut tentang ACK →](ack.md) 

### Argo CD
<a name="_argo_cd"></a>

Argo CD mengimplementasikan penerapan berkelanjutan GitOps berbasis untuk aplikasi Anda, menggunakan repositori Git sebagai sumber kebenaran untuk beban kerja dan status sistem Anda. Argo CD secara otomatis menyinkronkan sumber daya aplikasi ke kluster Anda dari repositori Git Anda, mendeteksi dan memulihkan drift untuk memastikan aplikasi yang Anda gunakan sesuai dengan status yang Anda inginkan. Anda dapat menyebarkan dan mengelola aplikasi di beberapa cluster dari satu instance Argo CD, dengan penerapan otomatis dari repositori Git setiap kali perubahan dilakukan. Menggunakan Argo CD dan ACK bersama-sama menyediakan GitOps sistem dasar, menyederhanakan manajemen ketergantungan beban kerja serta mendukung desain seluruh sistem termasuk manajemen cluster dan infrastruktur dalam skala besar. Argo CD terintegrasi dengan Pusat AWS Identitas untuk otentikasi dan otorisasi, dan menyediakan UI Argo yang dihosting untuk memvisualisasikan kesehatan aplikasi dan status penerapan.

 [Pelajari lebih lanjut tentang Argo CD →](argocd.md) 

### kro (Orkestra Sumber Daya Kube)
<a name="_kro_kube_resource_orchestrator"></a>

kro memungkinkan Anda untuk membuat Kubernetes kustom APIs yang menyusun beberapa sumber daya menjadi abstraksi tingkat yang lebih tinggi, memungkinkan tim platform untuk menentukan pola yang dapat digunakan kembali untuk kombinasi sumber daya umum-blok bangunan cloud. Dengan kro, Anda dapat menyusun Kubernetes dan AWS sumber daya bersama-sama ke dalam abstraksi terpadu, menggunakan sintaks sederhana untuk mengaktifkan konfigurasi dinamis dan logika bersyarat. kro memungkinkan tim platform untuk menyediakan kemampuan swalayan dengan pagar pembatas yang sesuai, memungkinkan pengembang untuk menyediakan infrastruktur yang kompleks menggunakan sederhana, yang dibuat khusus APIs sambil mempertahankan standar organisasi dan praktik terbaik. sumber daya kro hanyalah sumber daya Kubernetes, dan ditentukan dalam Kubernetes manifes yang dapat disimpan dalam Git, atau didorong ke OCI- registrasi yang kompatibel seperti Amazon ECR untuk distribusi organisasi yang luas.

 [Pelajari lebih lanjut tentang kro →](kro.md) 

## Manfaat Kemampuan EKS
<a name="_benefits_of_eks_capabilities"></a>

Kemampuan EKS sepenuhnya dikelola oleh AWS, menghilangkan kebutuhan untuk instalasi, pemeliharaan, dan penskalaan layanan cluster dasar. AWS menangani patching keamanan, pembaruan, dan manajemen operasional, membebaskan tim Anda untuk fokus membangun dengan AWS bukan pada operasi klaster. Tidak seperti add-on Kubernetes tradisional yang menggunakan sumber daya klaster, kapabilitas berjalan di EKS daripada di node pekerja Anda. Ini membebaskan kapasitas cluster dan sumber daya untuk beban kerja Anda sambil meminimalkan beban operasional mengelola pengontrol in-cluster dan komponen platform lainnya.

Dengan Kemampuan EKS, Anda dapat mengelola penerapan, AWS sumber daya, sumber daya Kubernetes kustom, dan komposisi menggunakan Kubernetes asli dan alat seperti. APIs `kubectl` Semua kemampuan beroperasi dalam konteks cluster Anda, secara otomatis mendeteksi dan mengoreksi penyimpangan konfigurasi di sumber daya infrastruktur aplikasi dan cloud. Anda dapat menerapkan dan mengelola sumber daya di beberapa cluster, AWS akun, dan wilayah dari satu titik kontrol, menyederhanakan operasi di lingkungan terdistribusi yang kompleks.

Kemampuan EKS dirancang untuk GitOps alur kerja, menyediakan infrastruktur deklaratif, terkontrol versi dan manajemen aplikasi. Perubahan mengalir dari Git melalui sistem, menyediakan jejak audit, kemampuan rollback, dan alur kerja kolaborasi yang terintegrasi dengan praktik pengembangan Anda yang ada. Pendekatan asli Kubernetes ini berarti Anda tidak perlu menggunakan beberapa alat atau mengelola infrastructure-as-code sistem di luar klaster Anda, dan ada satu sumber kebenaran untuk dirujuk. Status yang Anda inginkan, yang didefinisikan dalam konfigurasi deklaratif Kubernetes yang dikendalikan versi, terus diterapkan di seluruh lingkungan Anda.

## Penetapan harga
<a name="_pricing"></a>

Dengan Kemampuan EKS, tidak ada komitmen di muka atau biaya minimum. Anda dikenakan biaya untuk setiap sumber daya kemampuan untuk setiap jam yang aktif di kluster Amazon EKS Anda. Sumber daya Kubernetes tertentu yang dikelola oleh Kemampuan EKS juga ditagih dengan tarif per jam.

Untuk informasi harga saat ini, lihat [halaman harga Amazon EKS](https://aws.amazon.com/eks/pricing/).

**Tip**  
Anda dapat menggunakan AWS Cost Explorer dan Cost and Usage Reports untuk melacak biaya kemampuan secara terpisah dari biaya EKS lainnya. Anda dapat menandai kemampuan Anda dengan nama cluster, jenis kemampuan, dan detail lainnya untuk tujuan alokasi biaya.

## Bagaimana Kemampuan EKS Bekerja
<a name="_how_eks_capabilities_work"></a>

Setiap kemampuan adalah AWS sumber daya yang Anda buat di cluster EKS Anda. Setelah dibuat, kemampuan berjalan di EKS dan sepenuhnya dikelola oleh AWS.

**catatan**  
Anda dapat membuat satu sumber daya kemampuan dari setiap jenis (Argo CD, ACK, dan kro) untuk cluster tertentu. Anda tidak dapat membuat beberapa sumber daya kemampuan dari jenis yang sama pada cluster yang sama.

Anda berinteraksi dengan kapabilitas di klaster Anda menggunakan Kubernetes APIs dan alat standar:
+ Gunakan `kubectl` untuk menerapkan sumber daya kustom Kubernetes
+ Gunakan repositori Git sebagai sumber kebenaran untuk alur kerja GitOps 

Beberapa kemampuan memiliki alat tambahan yang didukung. Contoh:
+ Gunakan Argo CD CLI untuk mengonfigurasi dan mengelola repositori dan cluster dalam kemampuan Argo CD Anda
+ Gunakan Argo CD UI untuk memvisualisasikan dan mengelola aplikasi yang dikelola oleh kemampuan Argo CD Anda

Kemampuan dirancang untuk bekerja sama tetapi independen dan sepenuhnya opt-in. Anda dapat mengaktifkan satu, dua, atau ketiga kemampuan berdasarkan kebutuhan Anda, dan memperbarui konfigurasi Anda saat kebutuhan Anda berkembang.

Semua tipe EKS Compute didukung untuk digunakan dengan Kemampuan EKS. Untuk informasi selengkapnya, lihat [Mengelola sumber daya komputasi dengan menggunakan node](eks-compute.md).

Untuk konfigurasi keamanan dan detail tentang peran IAM, lihat[Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md). Untuk pola arsitektur multi-cluster, lihat[Pertimbangan Kemampuan EKS](capabilities-considerations.md).

## Kasus Penggunaan Umum
<a name="_common_use_cases"></a>

 **GitOps untuk Aplikasi dan Infrastruktur** 

Gunakan Argo CD untuk menyebarkan aplikasi dan komponen operasional dan ACK untuk mengelola konfigurasi klaster dan infrastruktur penyediaan, baik dari repositori Git. Seluruh tumpukan Anda—aplikasi, database, penyimpanan, dan jaringan—didefinisikan sebagai kode dan digunakan secara otomatis.

Contoh: Tim pengembangan mendorong perubahan ke Git. Argo CD menyebarkan aplikasi yang diperbarui, dan ACK menyediakan database RDS baru dengan konfigurasi yang benar. Semua perubahan dapat diaudit, reversibel, dan konsisten di seluruh lingkungan.

 **Rekayasa Platform dengan Layanan Mandiri** 

Gunakan kro untuk membuat kustom APIs yang menyusun sumber daya ACK dan Kubernetes. Tim platform menentukan pola yang disetujui dengan pagar pembatas. Tim aplikasi menggunakan sederhana, tingkat tinggi APIs untuk menyediakan tumpukan lengkap.

Contoh: Tim platform membuat API "WebApplication" yang menyediakan bucket Deployment, Service, Ingress, dan S3. Pengembang menggunakan API ini tanpa perlu memahami kompleksitas atau AWS izin yang mendasarinya.

 **Manajemen Aplikasi Multi-Cluster** 

Gunakan Argo CD untuk menyebarkan aplikasi di beberapa kluster EKS di berbagai wilayah atau akun. Kelola semua penerapan dari satu instance CD Argo dengan kebijakan dan alur kerja yang konsisten.

Contoh: Menerapkan aplikasi yang sama ke cluster pengembangan, pementasan, dan produksi di beberapa wilayah. Argo CD memastikan setiap lingkungan tetap sinkron dengan cabang Git yang sesuai.

 **Manajemen Multi-Cluster** 

Gunakan ACK untuk mendefinisikan dan menyediakan kluster EKS, kro untuk menyesuaikan konfigurasi cluster dengan standar organisasi, dan Argo CD untuk mengelola siklus hidup dan konfigurasi cluster. Ini menyediakan manajemen end-to-end cluster dari pembuatan melalui operasi yang sedang berlangsung.

Contoh: Tentukan kluster EKS menggunakan ACK dan kro untuk menyediakan dan mengelola infrastruktur cluster, mendefinisikan standar organisasi untuk jaringan, kebijakan keamanan, add-on, dan konfigurasi lainnya. Gunakan Argo CD untuk membuat dan terus mengelola klaster, konfigurasi, dan pembaruan versi Kubernetes di seluruh armada Anda dengan memanfaatkan standar yang konsisten dan manajemen siklus hidup otomatis.

 **Migrasi dan Modernisasi** 

Sederhanakan migrasi ke EKS dengan penyediaan sumber daya cloud asli dan alur kerja. GitOps Gunakan ACK untuk mengadopsi AWS sumber daya yang ada tanpa membuat ulang, dan Argo CD untuk mengoperasionalkan penerapan beban kerja dari Git.

Contoh: Sebuah tim yang bermigrasi dari EC2 EKS mengadopsi database RDS yang ada dan bucket S3 menggunakan ACK, kemudian menggunakan Argo CD untuk menyebarkan aplikasi kontainer dari Git. Jalur migrasi jelas, dan operasi distandarisasi sejak hari pertama.

 **Bootstrapping Akun dan Regional** 

Otomatiskan peluncuran infrastruktur di seluruh akun dan wilayah menggunakan Argo CD dan ACK bersama-sama. Tentukan infrastruktur Anda sebagai kode di Git, dan biarkan kapabilitas menangani penerapan dan manajemen.

Contoh: Tim platform mengelola repositori Git yang mendefinisikan konfigurasi akun standar—VPCs, peran IAM, instans RDS, dan tumpukan pemantauan. Argo CD menyebarkan konfigurasi ini ke akun dan wilayah baru secara otomatis, memastikan konsistensi dan mengurangi waktu penyiapan manual dari hari ke menit.

# Bekerja dengan sumber daya kemampuan
<a name="working-with-capabilities"></a>

Topik ini menjelaskan operasi umum untuk mengelola sumber daya kemampuan di semua jenis kemampuan.

## Sumber daya kemampuan EKS
<a name="_eks_capability_resources"></a>

Kemampuan EKS adalah AWS sumber daya yang memungkinkan fungsionalitas terkelola di kluster Amazon EKS Anda. Kemampuan berjalan di EKS, menghilangkan kebutuhan untuk menginstal dan memelihara pengontrol dan komponen operasional lainnya pada node pekerja Anda. Kemampuan dibuat untuk kluster EKS tertentu, dan tetap berafiliasi dengan cluster tersebut untuk seluruh siklus hidupnya.

Setiap sumber daya kemampuan memiliki:
+ Nama unik di dalam klaster Anda
+ Jenis kemampuan (ACK, ARGOCD, atau KRO)
+ Nama Sumber Daya Amazon (ARN), yang menentukan nama dan jenis
+ Peran kemampuan IAM
+ Status yang menunjukkan keadaannya saat ini
+ Konfigurasi, baik generik maupun spesifik untuk jenis kemampuan

## Memahami status kemampuan
<a name="_understanding_capability_status"></a>

Sumber daya kemampuan memiliki status yang menunjukkan keadaan mereka saat ini. Anda dapat melihat status kemampuan dan kesehatan di konsol EKS atau menggunakan AWS CLI.

 **Konsol**:

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda.

1. Pilih tab **Kemampuan** untuk melihat status semua kemampuan.

1. Untuk informasi kesehatan yang mendetail, pilih tab **Observability**, lalu **Monitor cluster**, lalu tab **Capabilities**.

 ** AWS CLI**:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

### Status kemampuan
<a name="_capability_statuses"></a>

 **MENCIPTAKAN**: Kemampuan sedang diatur. Anda dapat menavigasi jauh dari konsol—kemampuan akan terus dibuat di latar belakang.

 **AKTIF**: Kemampuan berjalan dan siap digunakan. Jika sumber daya tidak berfungsi seperti yang diharapkan, periksa status sumber daya dan izin IAM. Lihat [Memecahkan Masalah Kemampuan EKS](capabilities-troubleshooting.md) untuk panduan.

 **MEMPERBARUI**: Perubahan konfigurasi sedang diterapkan. Tunggu statusnya kembali`ACTIVE`.

 **MENGHAPUS**: Kemampuan sedang dihapus dari cluster.

 **CREATE\$1FAILED**: Pengaturan mengalami kesalahan. Penyebab umum meliputi:
+ Kebijakan kepercayaan peran IAM salah atau tidak ada
+ Peran IAM tidak ada atau tidak dapat diakses
+ Masalah akses klaster
+ Parameter konfigurasi tidak valid

Periksa bagian kesehatan kemampuan untuk detail kesalahan tertentu.

 **UPDATE\$1FAILED: Pembaruan konfigurasi gagal**. Periksa bagian kesehatan kemampuan untuk detail dan verifikasi izin IAM.

**Tip**  
Untuk panduan pemecahan masalah terperinci, lihat:  
 [Memecahkan Masalah Kemampuan EKS](capabilities-troubleshooting.md)- Pemecahan masalah kemampuan umum
 [Memecahkan masalah dengan kemampuan ACK](ack-troubleshooting.md)- Masalah khusus ACK
 [Memecahkan masalah dengan kemampuan Argo CD](argocd-troubleshooting.md)- Masalah khusus Argo CD
 [Memecahkan masalah dengan kemampuan kro](kro-troubleshooting.md)- masalah khusus kro

## Buat kemampuan
<a name="_create_capabilities"></a>

Untuk membuat kapabilitas di klaster Anda, lihat topik berikut:
+  [Buat kemampuan ACK](create-ack-capability.md)— Buat kemampuan ACK untuk mengelola AWS sumber daya menggunakan Kubernetes APIs
+  [Membuat kemampuan Argo CD](create-argocd-capability.md)— Buat kemampuan Argo CD untuk pengiriman GitOps berkelanjutan
+  [Buat kemampuan kro](create-kro-capability.md)— Buat kemampuan kro untuk komposisi sumber daya dan orkestrasi

## Daftar kemampuan
<a name="_list_capabilities"></a>

Anda dapat membuat daftar semua sumber daya kemampuan pada sebuah cluster.

### Konsol
<a name="_console"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Lihat sumber daya kemampuan di bawah **kemampuan Terkelola**.

### AWS CLI
<a name="shared_aws_cli"></a>

Gunakan `list-capabilities` perintah untuk melihat semua kemampuan di cluster Anda. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
aws eks list-capabilities \
  --region region-code \
  --cluster-name my-cluster
```

```
{
    "capabilities": [
        {
            "capabilityName": "my-ack",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
            "type": "ACK",
            "status": "ACTIVE",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-kro",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/kro/my-kro/abc123",
            "type": "KRO",
            "status": "ACTIVE",
            "version": "v0.6.3",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-argocd",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/argocd/my-argocd/abc123",
            "type": "ARGOCD",
            "status": "ACTIVE",
            "version": "3.1.8-eks-1",
            "createdAt": "2025-11-21T08:22:28.486000-05:00",
            "modifiedAt": "2025-11-21T08:22:28.486000-05:00"
        }
    ]
}
```

## Jelaskan kemampuan
<a name="_describe_a_capability"></a>

Dapatkan informasi terperinci tentang kemampuan tertentu, termasuk konfigurasi dan statusnya.

### Konsol
<a name="_console_2"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Pilih kemampuan yang ingin Anda lihat dari **kemampuan Terkelola**.

1. Lihat detail kemampuan, termasuk status, konfigurasi, dan waktu pembuatan.

### AWS CLI
<a name="shared_aws_cli"></a>

Gunakan `describe-capability` perintah untuk melihat informasi rinci. Ganti *region-code* dengan AWS Region tempat cluster Anda berada, ganti *my-cluster* dengan nama cluster Anda, dan ganti *capability-name* dengan nama kemampuan (ack, argocd, atau kro).

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

 **Contoh keluaran:** 

```
{
  "capability": {
    "capabilityName": "my-ack",
    "capabilityArn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
    "clusterName": "my-cluster",
    "type": "ACK",
    "roleArn": "arn:aws:iam::111122223333:role/AmazonEKSCapabilityACKRole",
    "status": "ACTIVE",
    "configuration": {},
    "tags": {},
    "health": {
      "issues": []
    },
    "createdAt": "2025-11-19T17:11:30.242000-05:00",
    "modifiedAt": "2025-11-19T17:11:30.242000-05:00",
    "deletePropagationPolicy": "RETAIN"
  }
}
```

## Perbarui konfigurasi kemampuan
<a name="_update_the_configuration_of_a_capability"></a>

Anda dapat memperbarui aspek-aspek tertentu dari konfigurasi kemampuan setelah pembuatan. Opsi konfigurasi spesifik bervariasi menurut jenis kemampuan.

**catatan**  
Sumber daya kemampuan EKS dikelola sepenuhnya, termasuk penambalan dan pembaruan versi. Memperbarui kemampuan akan memperbarui konfigurasi sumber daya dan tidak akan menghasilkan pembaruan versi komponen kemampuan terkelola.

### AWS CLI
<a name="shared_aws_cli"></a>

Gunakan `update-capability` perintah untuk memodifikasi kemampuan:

```
aws eks update-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/NewCapabilityRole
```

**catatan**  
Tidak semua properti kemampuan dapat diperbarui setelah pembuatan. Lihat dokumentasi khusus kemampuan untuk detail tentang apa yang dapat dimodifikasi.

## Hapus kemampuan
<a name="_delete_a_capability"></a>

Ketika Anda tidak lagi membutuhkan kemampuan di cluster Anda, Anda dapat menghapus sumber daya kemampuan.

**penting**  
 **Hapus sumber daya cluster sebelum menghapus kemampuan.**   
Menghapus sumber daya kemampuan tidak secara otomatis menghapus sumber daya yang dibuat melalui kemampuan itu:  
Semua Kubernetes Custom Resource Definitions (CRDs) tetap terpasang di klaster Anda.
Sumber daya ACK tetap ada di klaster Anda, dan AWS sumber daya terkait tetap ada di akun Anda
Aplikasi Argo CD dan sumber daya Kubernetes mereka tetap ada di klaster Anda
kro ResourceGraphDefinitions dan instance tetap ada di cluster Anda
Anda harus menghapus sumber daya ini sebelum menghapus kemampuan untuk menghindari sumber daya yatim piatu.  
Anda dapat memilih untuk mempertahankan AWS sumber daya yang terkait dengan sumber daya ACK Kubernetes. Lihat [pertimbangan ACK](ack-considerations.md) 

### Konsol
<a name="_console_3"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Pilih kemampuan yang ingin Anda hapus dari daftar **Kemampuan terkelola**.

1. Pilih **Hapus kemampuan**.

1. Dalam dialog konfirmasi, ketikkan nama kemampuan untuk mengonfirmasi penghapusan.

1. Pilih **Hapus**.

### AWS CLI
<a name="shared_aws_cli"></a>

Gunakan `delete-capability` perintah untuk menghapus sumber daya kemampuan:

Ganti *region-code* dengan AWS Region tempat klaster Anda berada, ganti *my-cluster* dengan nama cluster Anda, dan ganti *capability-name* dengan nama kemampuan untuk dihapus.

```
aws eks delete-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Kemampuan sumber daya Kubernetes](capability-kubernetes-resources.md)— Pelajari tentang sumber daya Kubernetes yang disediakan oleh setiap jenis kapabilitas
+  [Konsep ACK](ack-concepts.md)— Memahami konsep ACK dan siklus hidup sumber daya
+  [Bekerja dengan Argo CD](working-with-argocd.md)— Bekerja dengan kemampuan Argo CD untuk GitOps alur kerja
+  [konsep kro](kro-concepts.md)— Memahami konsep kro dan komposisi sumber daya

# Kemampuan sumber daya Kubernetes
<a name="capability-kubernetes-resources"></a>

Setelah Anda mengaktifkan kapabilitas di klaster Anda, Anda akan paling sering berinteraksi dengannya dengan membuat dan mengelola sumber daya kustom Kubernetes di klaster Anda. Setiap kapabilitas menyediakan kumpulan definisi sumber daya kustom (CRDs) sendiri yang memperluas API Kubernetes dengan fungsionalitas khusus kemampuan.

## Sumber daya Argo CD
<a name="_argo_cd_resources"></a>

Ketika Anda mengaktifkan kemampuan Argo CD, Anda dapat membuat dan mengelola sumber daya Kubernetes berikut:

 **Aplikasi**   
Mendefinisikan penerapan dari repositori Git ke kluster target. `Application`resource menentukan repositori sumber, namespace target, dan kebijakan sinkronisasi. Anda dapat membuat hingga 1000 `Application` sumber daya per instance kemampuan Argo CD.

 **ApplicationSet**   
Menghasilkan banyak `Application` sumber daya dari template, memungkinkan penerapan multi-cluster dan multi-lingkungan. `ApplicationSet`sumber daya menggunakan generator untuk membuat `Application` sumber daya secara dinamis berdasarkan daftar klaster, direktori Git, atau sumber lainnya.

 **AppProject**   
Menyediakan pengelompokan logis dan kontrol akses untuk `Application` sumber daya. `AppProject`sumber daya menentukan repositori, cluster, dan sumber `Application` daya ruang nama mana yang dapat digunakan, memungkinkan batas multi-tenancy dan keamanan.

Contoh `Application` sumber daya:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: production
```

Untuk informasi lebih lanjut tentang sumber daya dan konsep Argo CD, lihat[Konsep Argo CD](argocd-concepts.md).

## sumber daya kro
<a name="_kro_resources"></a>

Ketika Anda mengaktifkan kemampuan kro, Anda dapat membuat dan mengelola sumber daya Kubernetes berikut:

 **ResourceGraphDefinition (RGD)**   
Mendefinisikan API kustom yang menyusun beberapa Kubernetes dan AWS resource menjadi abstraksi tingkat yang lebih tinggi. Tim platform membuat `ResourceGraphDefinition` sumber daya untuk menyediakan pola yang dapat digunakan kembali dengan pagar pembatas.

 **Contoh sumber daya khusus**   
Setelah membuat `ResourceGraphDefinition` sumber daya, Anda dapat membuat instance API kustom yang ditentukan oleh`ResourceGraphDefinition`. kro secara otomatis membuat dan mengelola sumber daya yang ditentukan dalam. `ResourceGraphDefinition`

Contoh `ResourceGraphDefinition` sumber daya:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        # ... deployment spec
    - id: service
      template:
        apiVersion: v1
        kind: Service
        # ... service spec
```

Contoh `WebApplication` contoh:

```
apiVersion: v1alpha1
kind: WebApplication
metadata:
  name: my-web-app
  namespace: default
spec:
  name: my-web-app
  replicas: 3
```

Saat Anda menerapkan instance ini, kro secara otomatis membuat `Deployment` dan `Service` sumber daya yang ditentukan dalam. `ResourceGraphDefinition`

Untuk informasi lebih lanjut tentang sumber daya dan konsep kro, lihat[konsep kro](kro-concepts.md).

## Sumber daya ACK
<a name="_ack_resources"></a>

Ketika Anda mengaktifkan kemampuan ACK, Anda dapat membuat dan mengelola AWS sumber daya menggunakan sumber daya kustom Kubernetes. ACK menyediakan lebih dari 200 layanan CRDs untuk lebih dari 50 AWS layanan, memungkinkan Anda untuk menentukan AWS sumber daya di samping beban kerja Kubernetes Anda, dan mengelola sumber daya AWS infrastruktur khusus dengan Kubernetes.

Contoh sumber daya ACK:

 **Ember S3**   
 `Bucket`resource membuat dan mengelola bucket Amazon S3 dengan kebijakan pembuatan versi, enkripsi, dan siklus hidup.

 **RDS DBInstance**   
 `DBInstance`penyediaan sumber daya dan mengelola instans database Amazon RDS dengan jendela pencadangan dan pemeliharaan otomatis.

 **Tabel DynamoDB**   
 `Table`sumber daya membuat dan mengelola tabel DynamoDB dengan kapasitas yang disediakan atau sesuai permintaan.

 **Peran IAM**   
 `Role`sumber daya menentukan peran IAM dengan kebijakan kepercayaan dan kebijakan izin untuk akses AWS layanan.

 **Fungsi Lambda**   
 `Function`resource membuat dan mengelola fungsi Lambda dengan kode, runtime, dan konfigurasi peran eksekusi.

Contoh spesifikasi sumber `Bucket` daya:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-app-bucket
spec:
  name: my-unique-bucket-name-12345
  versioning:
    status: Enabled
  encryption:
    rules:
      - applyServerSideEncryptionByDefault:
          sseAlgorithm: AES256
```

Untuk informasi selengkapnya tentang sumber daya dan konsep ACK, lihat[Konsep ACK](ack-concepts.md).

## Batas sumber daya
<a name="_resource_limits"></a>

Kemampuan EKS memiliki batas sumber daya berikut:

 **Batas penggunaan Argo CD:**
+ Maksimum 1000 `Application` sumber daya per instance kemampuan Argo CD
+ Maksimum 100 cluster jarak jauh yang dikonfigurasi per instance kemampuan Argo CD

 **Batas konfigurasi sumber daya**:
+ Maksimum 150 sumber daya Kubernetes per `Application` sumber daya dalam Argo CD
+ Maksimum 64 sumber daya Kubernetes per in kro `ResourceGraphDefinition`

**catatan**  
Batasan ini berlaku untuk jumlah sumber daya yang dikelola oleh setiap instance kemampuan. Jika Anda membutuhkan batas yang lebih tinggi, Anda dapat menerapkan kemampuan di beberapa cluster.

## Langkah selanjutnya
<a name="_next_steps"></a>

Untuk tugas khusus kemampuan dan konfigurasi lanjutan, lihat topik berikut:
+  [Konsep ACK](ack-concepts.md)— Memahami konsep ACK dan siklus hidup sumber daya
+  [Bekerja dengan Argo CD](working-with-argocd.md)— Bekerja dengan kemampuan Argo CD untuk GitOps alur kerja
+  [konsep kro](kro-concepts.md)— Memahami konsep kro dan komposisi sumber daya

# Pertimbangan Kemampuan EKS
<a name="capabilities-considerations"></a>

Topik ini mencakup pertimbangan penting untuk menggunakan Kemampuan EKS, termasuk desain kontrol akses, pemilihan antara Kemampuan EKS dan solusi yang dikelola sendiri, pola arsitektur untuk penerapan multi-cluster, dan praktik terbaik operasional.

## Kemampuan peran IAM dan Kubernetes RBAC
<a name="_capability_iam_roles_and_kubernetes_rbac"></a>

Setiap sumber daya kemampuan EKS memiliki peran IAM kemampuan yang dikonfigurasi. Peran kapabilitas digunakan untuk memberikan izin AWS layanan untuk kemampuan EKS untuk bertindak atas nama Anda. Misalnya, untuk menggunakan Kemampuan EKS untuk ACK untuk mengelola Bucket Amazon S3, Anda akan memberikan izin administratif Bucket S3 ke kemampuan tersebut, memungkinkannya membuat dan mengelola bucket.

Setelah kemampuan dikonfigurasi, sumber daya S3 di AWS dapat dibuat dan dikelola dengan sumber daya kustom Kubernetes di klaster Anda. Kubernetes RBAC adalah mekanisme kontrol akses in-cluster untuk menentukan pengguna dan grup mana yang dapat membuat dan mengelola sumber daya kustom tersebut. Misalnya, berikan izin pengguna dan grup Kubernetes RBAC tertentu untuk membuat dan mengelola `Bucket` sumber daya di ruang nama yang Anda pilih.

Dengan cara ini, IAM dan Kubernetes RBAC adalah dua bagian dari sistem kontrol end-to-end akses yang mengatur izin yang terkait dengan Kemampuan dan sumber daya EKS. Penting untuk merancang kombinasi izin IAM dan kebijakan akses RBAC yang tepat untuk kasus penggunaan Anda.

Untuk informasi tambahan tentang peran IAM kemampuan dan izin Kubernetes, lihat. [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Pola arsitektur multi-cluster
<a name="_multi_cluster_architecture_patterns"></a>

Saat menerapkan kemampuan di beberapa cluster, pertimbangkan pola arsitektur umum ini:

 **Hub dan Berbicara dengan manajemen terpusat** 

Jalankan ketiga kemampuan dalam klaster yang dikelola secara terpusat untuk mengatur beban kerja dan mengelola infrastruktur cloud di beberapa klaster beban kerja.
+ Argo CD pada cluster manajemen menyebarkan aplikasi ke cluster beban kerja di berbagai wilayah atau akun
+ ACK pada cluster manajemen menyediakan sumber AWS daya (RDS, S3, IAM) untuk semua cluster
+ kro pada cluster manajemen menciptakan abstraksi platform portabel yang bekerja di semua cluster

Pola ini memusatkan beban kerja dan manajemen infrastruktur cloud, dan dapat menyederhanakan operasi untuk organisasi yang mengelola banyak cluster.

 **Terdesentralisasi GitOps** 

Beban kerja dan infrastruktur cloud dikelola oleh kapabilitas pada klaster yang sama tempat beban kerja berjalan.
+ Argo CD mengelola sumber daya aplikasi pada cluster lokal.
+ Sumber daya ACK digunakan untuk kebutuhan klaster dan beban kerja.
+ abstraksi platform kro diinstal dan mengatur sumber daya lokal.

Pola ini mendesentralisasi operasi, dengan tim mengelola layanan platform khusus mereka sendiri dalam satu atau lebih cluster.

 **Hub dan Berbicara dengan Penyebaran ACK Hybrid** 

Menggabungkan model terpusat dan terdesentralisasi, dengan penerapan aplikasi terpusat dan manajemen sumber daya berdasarkan ruang lingkup dan kepemilikan.
+ Kluster hub:
  + Argo CD mengelola GitOps penerapan ke cluster lokal dan semua cluster beban kerja jarak jauh
  + ACK digunakan pada cluster manajemen untuk sumber daya cakupan admin (database produksi, peran IAM,) VPCs
  + kro digunakan pada cluster manajemen untuk abstraksi platform yang dapat digunakan kembali
+ Cluster bicara:
  + Beban kerja dikelola melalui Argo CD pada cluster hub terpusat
  + ACK digunakan secara lokal untuk sumber daya cakupan beban kerja (bucket S3, instance, antrian SQS) ElastiCache 
  + kro digunakan secara lokal untuk komposisi sumber daya dan pola blok bangunan

Pola ini memisahkan keprihatinan—tim platform mengelola infrastruktur penting secara terpusat pada kluster manajemen, secara opsional termasuk klaster beban kerja, sementara tim aplikasi menentukan dan mengelola sumber daya cloud di samping beban kerja.

 **Memilih Pola** 

Pertimbangkan faktor-faktor ini ketika memilih arsitektur:
+  **Struktur organisasi**: Tim platform terpusat mendukung pola hub; tim terdesentralisasi mungkin lebih memilih kemampuan per-cluster
+  **Ruang lingkup sumber daya**: Sumber daya dengan cakupan admin (database, IAM) sering mendapat manfaat dari manajemen pusat; sumber daya beban kerja (bucket, antrian) dapat dikelola secara lokal
+  **Layanan mandiri**: Tim platform terpusat dapat membuat dan mendistribusikan sumber daya khusus preskriptif untuk memungkinkan layanan mandiri sumber daya cloud yang aman untuk kebutuhan beban kerja umum
+  **Manajemen armada cluster**: Cluster manajemen terpusat menyediakan pesawat kontrol milik pelanggan untuk manajemen armada kluster EKS, bersama dengan sumber daya cakupan admin lainnya
+  **Persyaratan kepatuhan**: Beberapa organisasi memerlukan kontrol terpusat untuk audit dan tata kelola
+  **Kompleksitas operasional**: Lebih sedikit contoh kemampuan menyederhanakan operasi tetapi dapat menciptakan kemacetan

**catatan**  
Anda dapat mulai dengan satu pola dan berevolusi ke pola lain saat platform Anda matang. Kemampuan bersifat independen—Anda dapat menerapkannya secara berbeda di seluruh cluster berdasarkan kebutuhan Anda.

## Membandingkan Kemampuan EKS dengan solusi yang dikelola sendiri
<a name="_comparing_eks_capabilities_to_self_managed_solutions"></a>

Kemampuan EKS memberikan pengalaman yang dikelola sepenuhnya untuk alat dan pengontrol Kubernetes populer yang berjalan di EKS. Ini berbeda dari solusi yang dikelola sendiri, yang Anda instal dan operasikan di cluster Anda.

### Perbedaan Utama
<a name="_key_differences"></a>

 **Penerapan dan manajemen** 

 AWS sepenuhnya mengelola Kemampuan EKS tanpa instalasi, konfigurasi, atau pemeliharaan perangkat lunak komponen yang diperlukan. AWS menginstal dan mengelola semua Kubernetes Custom Resource Definitions (CRDs) yang diperlukan di cluster secara otomatis.

Dengan solusi yang dikelola sendiri, Anda menginstal dan mengonfigurasi perangkat lunak klaster menggunakan bagan Helm, kubectl, atau operator lain. Anda memiliki kontrol penuh atas siklus hidup perangkat lunak dan konfigurasi runtime dari solusi yang dikelola sendiri, memberikan penyesuaian pada setiap lapisan solusi.

 **Operasi dan pemeliharaan** 

 AWS mengelola patching dan operasi siklus hidup perangkat lunak lainnya untuk Kemampuan EKS, dengan pembaruan otomatis dan patch keamanan. Kemampuan EKS terintegrasi dengan AWS fitur untuk konfigurasi yang efisien, menyediakan ketersediaan tinggi bawaan dan toleransi kesalahan, dan menghilangkan pemecahan masalah beban kerja pengontrol dalam klaster.

Solusi yang dikelola sendiri mengharuskan Anda untuk memantau kesehatan komponen dan log, menerapkan patch keamanan dan pembaruan versi, mengonfigurasi ketersediaan tinggi dengan beberapa replika dan anggaran gangguan pod, memecahkan masalah dan memulihkan masalah beban kerja pengontrol, dan mengelola rilis dan versi. Anda memiliki kontrol penuh atas penerapan Anda, tetapi ini sering memerlukan solusi yang dipesan lebih dahulu untuk akses klaster pribadi dan integrasi lainnya yang harus selaras dengan standar organisasi dan persyaratan kepatuhan keamanan.

 **Konsumsi sumber daya** 

Kemampuan EKS berjalan di EKS dan di luar cluster Anda, membebaskan sumber daya node dan sumber daya cluster. Kemampuan tidak menggunakan sumber daya beban kerja klaster, tidak menggunakan CPU atau memori pada node pekerja Anda, menskalakan secara otomatis, dan berdampak minimal pada perencanaan kapasitas klaster.

Solusi yang dikelola sendiri menjalankan pengontrol dan komponen lain di node pekerja Anda, secara langsung mengkonsumsi sumber daya node pekerja, cluster IPs, dan sumber daya klaster lainnya. Mengelola layanan klaster memerlukan perencanaan kapasitas untuk beban kerja mereka, dan memerlukan perencanaan dan konfigurasi permintaan dan batasan sumber daya untuk mengelola persyaratan penskalaan dan ketersediaan tinggi.

 **Dukungan fitur** 

Sebagai fitur layanan yang dikelola sepenuhnya, Kemampuan EKS pada dasarnya berpendirian dibandingkan dengan solusi yang dikelola sendiri. Sementara kemampuan akan mendukung sebagian besar fitur dan kasus penggunaan, akan ada perbedaan dalam cakupan jika dibandingkan dengan solusi yang dikelola sendiri.

Dengan solusi yang dikelola sendiri, Anda sepenuhnya mengontrol konfigurasi, fitur opsional, dan aspek fungsionalitas lainnya untuk perangkat lunak Anda. Anda dapat memilih untuk menjalankan gambar kustom Anda sendiri, menyesuaikan semua aspek konfigurasi, dan sepenuhnya mengontrol fungsionalitas solusi yang dikelola sendiri.

 **Pertimbangan Biaya** 

Setiap sumber daya kemampuan EKS memiliki biaya per jam terkait, yang berbeda berdasarkan jenis kemampuan. Sumber daya cluster yang dikelola oleh kapabilitas juga memiliki biaya per jam terkait dengan harga mereka sendiri. Untuk informasi selengkapnya, lihat [harga Amazon EKS](https://aws.amazon.com/eks/pricing/).

Solusi yang dikelola sendiri tidak memiliki biaya langsung yang terkait dengan AWS biaya, tetapi Anda membayar sumber daya komputasi klaster yang digunakan oleh pengontrol dan beban kerja terkait. Di luar konsumsi sumber daya node dan cluster, biaya kepemilikan penuh dengan solusi yang dikelola sendiri mencakup overhead operasional dan biaya pemeliharaan, pemecahan masalah, dan dukungan.

### Memilih antara Kemampuan EKS dan solusi yang dikelola sendiri
<a name="_choosing_between_eks_capabilities_and_self_managed_solutions"></a>

 **Kemampuan EKS** Pertimbangkan pilihan ini ketika Anda ingin mengurangi overhead operasional dan fokus pada nilai yang berbeda dalam perangkat lunak dan sistem Anda, daripada operasi platform cluster untuk persyaratan dasar. Gunakan Kemampuan EKS saat Anda ingin meminimalkan beban operasional patch keamanan dan manajemen siklus hidup perangkat lunak, membebaskan sumber daya node dan cluster untuk beban kerja aplikasi, menyederhanakan konfigurasi dan manajemen keamanan, dan manfaatkan cakupan dukungan. AWS Kemampuan EKS ideal untuk sebagian besar kasus penggunaan produksi dan merupakan pendekatan yang direkomendasikan untuk penerapan baru.

 **Solusi yang dikelola sendiri** Pertimbangkan pilihan ini ketika Anda memerlukan versi API sumber daya Kubernetes tertentu, build pengontrol khusus, memiliki otomatisasi dan perkakas yang ada di sekitar penerapan yang dikelola sendiri, atau memerlukan kustomisasi mendalam konfigurasi runtime pengontrol. Solusi yang dikelola sendiri memberikan fleksibilitas untuk kasus penggunaan khusus, dan Anda memiliki kendali penuh atas konfigurasi penerapan dan runtime Anda.

**catatan**  
Kemampuan EKS dapat hidup berdampingan di cluster Anda dengan solusi yang dikelola sendiri, dan migrasi langkah demi langkah dimungkinkan untuk dicapai.

### Perbandingan Khusus Kemampuan
<a name="_capability_specific_comparisons"></a>

Untuk perbandingan terperinci termasuk fitur khusus kemampuan, perbedaan hulu, dan jalur migrasi, lihat:
+  [Membandingkan Kemampuan EKS untuk ACK dengan ACK yang dikelola sendiri](ack-comparison.md) 
+  [Membandingkan Kemampuan EKS untuk Argo CD dengan Argo CD yang dikelola sendiri](argocd-comparison.md) 
+  [Membandingkan Kemampuan EKS untuk kro dengan kro yang dikelola sendiri](kro-comparison.md) 

# Menerapkan AWS sumber daya dari Kubernetes dengan AWS Controller untuk Kubernetes (ACK)
<a name="ack"></a>

 AWS Controller untuk Kubernetes (ACK) memungkinkan Anda menentukan dan mengelola sumber daya AWS layanan langsung dari Kubernetes. Dengan AWS Controller for Kubernetes (ACK), Anda dapat mengelola sumber daya beban kerja dan infrastruktur cloud menggunakan sumber daya kustom Kubernetes, tepat di samping beban kerja aplikasi Anda menggunakan Kubernetes dan alat yang sudah dikenal. APIs 

Dengan Kemampuan EKS, ACK dikelola sepenuhnya oleh AWS, menghilangkan kebutuhan untuk menginstal, memelihara, dan menskalakan pengontrol ACK di cluster Anda.

## Bagaimana ACK Bekerja
<a name="_how_ack_works"></a>

ACK menerjemahkan spesifikasi sumber daya kustom Kubernetes ke dalam panggilan API. AWS Saat Anda membuat, memperbarui, atau menghapus sumber daya kustom Kubernetes yang mewakili sumber daya AWS layanan, ACK membuat panggilan AWS API yang diperlukan untuk membuat, memperbarui, atau menghapus sumber daya. AWS 

Setiap AWS sumber daya yang didukung oleh ACK memiliki definisi sumber daya kustom (CRD) sendiri yang mendefinisikan skema API Kubernetes untuk menentukan konfigurasinya. Misalnya, ACK menyediakan CRDs S3 termasuk bucket, kebijakan bucket, dan sumber daya S3 lainnya.

ACK terus mendamaikan status AWS sumber daya Anda dengan status yang diinginkan yang ditentukan dalam sumber daya kustom Kubernetes Anda. Jika sumber daya melayang dari keadaan yang diinginkan, ACK mendeteksi ini dan mengambil tindakan korektif untuk membawanya kembali ke keselarasan. Perubahan pada sumber daya Kubernetes langsung tercermin dalam status AWS sumber daya, sementara deteksi drift pasif dan remediasi perubahan AWS sumber daya hulu dapat memakan waktu selama 10 jam (periode sinkronisasi ulang), tetapi biasanya akan terjadi lebih cepat.

 **Contoh manifes sumber daya Bucket S3** 

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-ack-bucket
spec:
  name: my-unique-bucket-name
```

Saat Anda menerapkan sumber daya khusus ini ke klaster, ACK akan membuat bucket Amazon S3 di akun Anda jika belum ada. Perubahan selanjutnya pada sumber daya ini, misalnya menentukan tingkat penyimpanan non-default atau menambahkan kebijakan, akan diterapkan ke sumber daya S3 di. AWS Saat sumber daya ini dihapus dari cluster, bucket S3 akan dihapus AWS secara default.

## Manfaat ACK
<a name="_benefits_of_ack"></a>

ACK menyediakan manajemen AWS sumber daya asli Kubernetes, memungkinkan Anda mengelola sumber AWS daya menggunakan Kubernetes APIs dan alat yang sama yang Anda gunakan untuk aplikasi Anda. Pendekatan terpadu ini menyederhanakan alur kerja manajemen infrastruktur Anda dengan menghilangkan kebutuhan untuk beralih di antara alat yang berbeda atau mempelajari sistem terpisah. infrastructure-as-code Anda mendefinisikan AWS sumber daya Anda secara deklaratif dalam manifes Kubernetes, memungkinkan GitOps alur kerja dan infrastruktur sebagai praktik kode yang terintegrasi secara mulus dengan proses pengembangan yang ada.

ACK terus mendamaikan kondisi AWS sumber daya Anda yang diinginkan dengan keadaan sebenarnya, mengoreksi penyimpangan dan memastikan konsistensi di seluruh infrastruktur Anda. Rekonsiliasi berkelanjutan ini berarti bahwa out-of-band perubahan penting pada AWS sumber daya secara otomatis dikembalikan agar sesuai dengan konfigurasi yang Anda deklarasikan, menjaga integritas infrastruktur Anda sebagai kode. Anda dapat mengonfigurasi ACK untuk mengelola sumber daya di beberapa AWS akun dan wilayah, memungkinkan arsitektur multi-akun yang kompleks tanpa alat tambahan.

Untuk organisasi yang bermigrasi dari alat manajemen infrastruktur lainnya, ACK mendukung adopsi sumber daya, memungkinkan Anda membawa AWS sumber daya yang ada di bawah manajemen ACK tanpa membuatnya kembali. ACK juga menyediakan sumber daya hanya-baca untuk observasi AWS sumber daya tanpa akses modifikasi, dan anotasi untuk mempertahankan AWS sumber daya secara opsional bahkan ketika resource Kubernetes dihapus dari cluster.

Untuk mempelajari lebih lanjut dan memulai dengan Kemampuan EKS untuk ACK, lihat [Konsep ACK](ack-concepts.md) dan[Pertimbangan ACK untuk EKS](ack-considerations.md).

## AWS Layanan yang Didukung
<a name="supported_shared_aws_services"></a>

ACK mendukung berbagai AWS layanan, termasuk namun tidak terbatas pada:
+ Amazon EC2
+ Amazon S3
+ Amazon RDS
+ Amazon DynamoDB
+ Amazon ElastiCache
+ Amazon EKS
+ Amazon SQS
+ Amazon SNS
+  AWS Lambda
+  AWS IAM

Semua AWS layanan yang terdaftar sebagai Umumnya Tersedia di hulu didukung oleh Kemampuan EKS untuk ACK. Lihat [daftar lengkap AWS layanan yang didukung](https://aws-controllers-k8s.github.io/community/docs/community/services/) untuk detailnya.

## Integrasi dengan Kemampuan Terkelola EKS Lainnya
<a name="_integration_with_other_eks_managed_capabilities"></a>

ACK terintegrasi dengan Kemampuan Terkelola EKS lainnya.
+  **Argo CD**: Gunakan Argo CD untuk mengelola penyebaran sumber daya ACK di beberapa cluster, memungkinkan GitOps alur kerja untuk infrastruktur Anda. AWS 
  + ACK memperluas manfaat GitOps ketika dipasangkan dengan ArgoCD, tetapi ACK tidak memerlukan integrasi dengan git.
+  **kro (Kube Resource Orchestrator)**: Gunakan kro untuk menyusun sumber daya yang kompleks dari sumber daya ACK, menciptakan abstraksi tingkat tinggi yang menyederhanakan manajemen sumber daya.
  + Anda dapat membuat resource kustom komposit dengan kro yang mendefinisikan resource dan resource Kubernetes. AWS Anggota tim dapat menggunakan sumber daya khusus ini untuk menyebarkan aplikasi kompleks dengan cepat.

## Memulai dengan ACK
<a name="_getting_started_with_ack"></a>

Untuk memulai dengan Kemampuan EKS untuk ACK:

1. Buat dan konfigurasikan Peran Kemampuan IAM dengan izin yang diperlukan bagi ACK untuk mengelola AWS sumber daya atas nama Anda.

1.  [Buat sumber daya kemampuan ACK](create-ack-capability.md) di kluster EKS Anda melalui AWS Konsol, AWS CLI, atau infrastruktur pilihan Anda sebagai alat kode.

1. Terapkan sumber daya kustom Kubernetes ke klaster Anda untuk mulai mengelola sumber AWS daya Anda di Kubernetes.

# Buat kemampuan ACK
<a name="create-ack-capability"></a>

Bab ini menjelaskan cara membuat kemampuan ACK di cluster Amazon EKS Anda.

## Prasyarat
<a name="_prerequisites"></a>

Sebelum membuat kemampuan ACK, pastikan Anda memiliki:
+ Klaster Amazon EKS
+ Peran Kemampuan IAM dengan izin ACK untuk mengelola sumber daya AWS 
+ Izin IAM yang memadai untuk membuat sumber daya kemampuan di kluster EKS
+ Alat CLI yang sesuai diinstal dan dikonfigurasi, atau akses ke Konsol EKS

Untuk petunjuk tentang cara membuat Peran Kemampuan IAM, lihat[Peran IAM kemampuan Amazon EKS](capability-role.md).

**penting**  
ACK adalah kemampuan manajemen infrastruktur yang memberikan kemampuan untuk membuat, memodifikasi, dan menghapus AWS sumber daya. Ini adalah kemampuan lingkup admin yang harus dikontrol dengan hati-hati. Siapa pun yang memiliki izin untuk membuat sumber daya Kubernetes di klaster Anda dapat secara efektif membuat AWS sumber daya melalui ACK, tunduk pada izin Peran Kemampuan IAM. Peran Kemampuan IAM yang Anda berikan menentukan AWS sumber daya mana yang dapat dibuat dan dikelola ACK. Untuk panduan tentang membuat peran yang sesuai dengan izin hak istimewa paling sedikit, lihat dan. [Peran IAM kemampuan Amazon EKS](capability-role.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Pilih alat Anda
<a name="_choose_your_tool"></a>

Anda dapat membuat kemampuan ACK menggunakan Konsol Manajemen AWS, AWS CLI, atau eksctl:
+  [Buat kemampuan ACK menggunakan Konsol](ack-create-console.md)- Gunakan Konsol untuk pengalaman terpandu
+  [Buat kemampuan ACK menggunakan AWS CLI](ack-create-cli.md)- Gunakan AWS CLI untuk scripting dan otomatisasi
+  [Buat kemampuan ACK menggunakan eksctl](ack-create-eksctl.md)- Gunakan eksctl untuk pengalaman asli Kubernetes

## Apa yang terjadi ketika Anda membuat kemampuan ACK
<a name="_what_happens_when_you_create_an_ack_capability"></a>

Saat Anda membuat kemampuan ACK:

1. EKS membuat layanan kemampuan ACK dan mengonfigurasinya untuk memantau dan mengelola sumber daya di cluster Anda

1. Definisi Sumber Daya Kustom (CRDs) diinstal di klaster Anda

1. Entri akses secara otomatis dibuat untuk Peran Kemampuan IAM Anda dengan kebijakan entri akses khusus kemampuan yang memberikan izin Kubernetes dasar (lihat) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

1. Kemampuan mengasumsikan Peran Kemampuan IAM yang Anda berikan

1. ACK mulai mengawasi sumber daya kustomnya di cluster Anda

1. Status kemampuan berubah dari `CREATING` menjadi `ACTIVE` 

Setelah aktif, Anda dapat membuat sumber daya khusus ACK di cluster Anda untuk mengelola AWS sumber daya.

**catatan**  
Entri akses yang dibuat secara otomatis mencakup `AmazonEKSACKPolicy` yang memberikan izin ACK untuk mengelola AWS sumber daya. Beberapa sumber daya ACK yang mereferensikan rahasia Kubernetes (seperti database RDS dengan kata sandi) memerlukan kebijakan entri akses tambahan. Untuk mempelajari lebih lanjut tentang entri akses dan cara mengonfigurasi izin tambahan, lihat. [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Langkah selanjutnya
<a name="_next_steps"></a>

Setelah membuat kemampuan ACK:
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan memulai dengan AWS sumber daya
+  [Konsep ACK](ack-concepts.md)- Pelajari tentang rekonsiliasi, ekspor lapangan, dan pola adopsi sumber daya
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM dan pola multi-akun

# Buat kemampuan ACK menggunakan Konsol
<a name="ack-create-console"></a>

Topik ini menjelaskan cara membuat kemampuan AWS Controllers for Kubernetes (ACK) menggunakan. Konsol Manajemen AWS

## Buat kemampuan ACK
<a name="_create_the_ack_capability"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Di navigasi kiri, pilih ** AWS Controllers for Kubernetes** (ACK).

1. Pilih **Create AWS Controller untuk kemampuan Kubernetes**.

1. Untuk **Peran Kemampuan IAM**:
   + Jika Anda sudah memiliki Peran Kemampuan IAM, pilih dari dropdown
   + Jika Anda perlu membuat peran, pilih **Buat peran admin** 

     Ini membuka konsol IAM di tab baru dengan kebijakan kepercayaan yang telah diisi sebelumnya dan kebijakan terkelola. `AdministratorAccess` Anda dapat membatalkan pilihan kebijakan ini dan menambahkan izin lain jika diinginkan.

     Setelah membuat peran, kembali ke konsol EKS dan peran akan dipilih secara otomatis.
**penting**  
`AdministratorAccess`Kebijakan yang disarankan memberikan izin luas dan dimaksudkan untuk merampingkan memulai. Untuk penggunaan produksi, ganti ini dengan kebijakan khusus yang hanya memberikan izin yang diperlukan untuk AWS layanan tertentu yang Anda rencanakan untuk dikelola dengan ACK. Untuk panduan tentang membuat kebijakan hak istimewa terkecil, lihat dan. [Konfigurasikan izin ACK](ack-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

1. Pilih **Buat**.

Proses pembuatan kemampuan dimulai.

## Verifikasi kemampuan aktif
<a name="_verify_the_capability_is_active"></a>

1. Pada tab **Kemampuan**, lihat status kemampuan ACK.

1. Tunggu status berubah dari `CREATING` ke`ACTIVE`.

1. Setelah aktif, kemampuan siap digunakan.

Untuk informasi tentang status kemampuan dan pemecahan masalah, lihat. [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)

## Verifikasi sumber daya khusus tersedia
<a name="_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya khusus ACK tersedia di klaster Anda.

 **Menggunakan konsol** 

1. Arahkan ke klaster Anda di konsol Amazon EKS

1. Pilih tab **Sumber Daya**

1. Pilih **Ekstensi** 

1. Pilih **CustomResourceDefinitions** 

Anda akan melihat sejumlah yang CRDs terdaftar untuk AWS sumber daya.

 **Menggunakan kubectl** 

```
kubectl api-resources | grep services.k8s.aws
```

Anda akan melihat sejumlah yang APIs terdaftar untuk AWS sumber daya.

**catatan**  
Kemampuan untuk AWS Controller untuk Kubernetes akan menginstal sejumlah CRDs untuk berbagai sumber daya. AWS 

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan memulai
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM untuk layanan lain AWS 
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan ACK Anda

# Buat kemampuan ACK menggunakan AWS CLI
<a name="ack-create-cli"></a>

Topik ini menjelaskan cara membuat kemampuan AWS Controllers for Kubernetes (ACK) menggunakan CLI. AWS 

## Prasyarat
<a name="_prerequisites"></a>
+  ** AWS CLI** — Versi `2.12.3` atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`aws --version`. Untuk informasi selengkapnya, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) di Panduan Pengguna Antarmuka Baris AWS Perintah.
+  **`kubectl`**— Alat baris perintah untuk bekerja dengan cluster Kubernetes. Untuk informasi selengkapnya, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Lampirkan kebijakan `AdministratorAccess` terkelola ke peran:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**penting**  
`AdministratorAccess`Kebijakan yang disarankan memberikan izin luas dan dimaksudkan untuk merampingkan memulai. Untuk penggunaan produksi, ganti ini dengan kebijakan khusus yang hanya memberikan izin yang diperlukan untuk AWS layanan tertentu yang Anda rencanakan untuk dikelola dengan ACK. Untuk panduan tentang membuat kebijakan hak istimewa paling sedikit, lihat dan. [Konfigurasikan izin ACK](ack-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Langkah 2: Buat kemampuan ACK
<a name="_step_2_create_the_ack_capability"></a>

Buat sumber daya kemampuan ACK di cluster Anda. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --delete-propagation-policy RETAIN
```

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif karena EKS menciptakan infrastruktur dan komponen kemampuan yang diperlukan. EKS akan menginstal Definisi Sumber Daya Kustom Kubernetes yang terkait dengan kemampuan ini di cluster Anda saat sedang dibuat.

**catatan**  
Jika Anda menerima kesalahan bahwa klaster tidak ada atau Anda tidak memiliki izin, verifikasi:  
Nama cluster benar
 AWS CLI Anda dikonfigurasi untuk wilayah yang benar
Anda memiliki izin IAM yang diperlukan

## Langkah 3: Verifikasi kemampuan aktif
<a name="_step_3_verify_the_capability_is_active"></a>

Tunggu kemampuan untuk menjadi aktif. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --query 'capability.status' \
  --output text
```

Kemampuan siap ketika status ditampilkan`ACTIVE`. Jangan melanjutkan ke langkah berikutnya sampai statusnya`ACTIVE`.

Anda juga dapat melihat detail kemampuan lengkap:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack
```

## Langkah 4: Verifikasi sumber daya khusus tersedia
<a name="_step_4_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya khusus ACK tersedia di klaster Anda:

```
kubectl api-resources | grep services.k8s.aws
```

Anda akan melihat sejumlah yang APIs terdaftar untuk AWS sumber daya.

**catatan**  
Kemampuan untuk AWS Controller untuk Kubernetes akan menginstal sejumlah CRDs untuk berbagai sumber daya. AWS 

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan memulai
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM untuk layanan lain AWS 
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan ACK Anda

# Buat kemampuan ACK menggunakan eksctl
<a name="ack-create-eksctl"></a>

Topik ini menjelaskan cara membuat kemampuan AWS Controllers for Kubernetes (ACK) menggunakan eksctl.

**catatan**  
Langkah-langkah berikut memerlukan versi `0.220.0` eksctl atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`eksctl version`.

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Lampirkan kebijakan `AdministratorAccess` terkelola ke peran:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**penting**  
`AdministratorAccess`Kebijakan yang disarankan memberikan izin luas dan dimaksudkan untuk merampingkan memulai. Untuk penggunaan produksi, ganti ini dengan kebijakan khusus yang hanya memberikan izin yang diperlukan untuk AWS layanan tertentu yang Anda rencanakan untuk dikelola dengan ACK. Untuk panduan tentang membuat kebijakan hak istimewa terkecil, lihat dan. [Konfigurasikan izin ACK](ack-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

**penting**  
Kebijakan ini memberikan izin untuk pengelolaan bucket S3`"Resource": "*"`, yang memungkinkan pengoperasian di semua bucket S3.  
Untuk penggunaan produksi: \$1 Batasi `Resource` bidang ke bucket ARNs atau pola nama tertentu \$1 Gunakan kunci kondisi IAM untuk membatasi akses dengan tag sumber daya \$1 Berikan hanya izin minimum yang diperlukan untuk kasus penggunaan Anda  
Untuk AWS layanan lainnya, lihat[Konfigurasikan izin ACK](ack-permissions.md).

Lampirkan kebijakan ke peran:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/ACKS3Policy
```

## Langkah 2: Buat kemampuan ACK
<a name="_step_2_create_the_ack_capability"></a>

Buat kemampuan ACK menggunakan eksctl. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
eksctl create capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --ack-service-controllers s3
```

**catatan**  
`--ack-service-controllers`Bendera adalah opsional. Jika dihilangkan, ACK mengaktifkan semua pengontrol yang tersedia. Untuk kinerja dan keamanan yang lebih baik, pertimbangkan untuk mengaktifkan hanya pengontrol yang Anda butuhkan. Anda dapat menentukan beberapa pengontrol: `--ack-service-controllers s3,rds,dynamodb` 

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif.

## Langkah 3: Verifikasi kemampuan aktif
<a name="_step_3_verify_the_capability_is_active"></a>

Periksa status kemampuan:

```
eksctl get capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack
```

Kemampuan siap ketika status ditampilkan`ACTIVE`.

## Langkah 4: Verifikasi sumber daya khusus tersedia
<a name="_step_4_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya khusus ACK tersedia di klaster Anda:

```
kubectl api-resources | grep services.k8s.aws
```

Anda akan melihat sejumlah yang APIs terdaftar untuk AWS sumber daya.

**catatan**  
Kemampuan untuk AWS Controller untuk Kubernetes akan menginstal sejumlah CRDs untuk berbagai sumber daya. AWS 

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan memulai
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM untuk layanan lain AWS 
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan ACK Anda

# Konsep ACK
<a name="ack-concepts"></a>

ACK mengelola AWS sumber daya melalui Kubernetes APIs dengan terus merekonsiliasi status yang diinginkan dalam manifes Anda dengan status aktual di. AWS Saat Anda membuat atau memperbarui sumber daya kustom Kubernetes, ACK membuat panggilan AWS API yang diperlukan untuk membuat atau memodifikasi AWS sumber daya yang sesuai, lalu memantaunya untuk drift dan memperbarui status Kubernetes untuk mencerminkan status saat ini. Pendekatan ini memungkinkan Anda mengelola infrastruktur menggunakan alat dan alur kerja Kubernetes yang sudah dikenal sambil mempertahankan konsistensi antara klaster Anda dan. AWS

Topik ini menjelaskan konsep dasar di balik bagaimana ACK mengelola AWS sumber daya melalui Kubernetes APIs.

## Memulai dengan ACK
<a name="_getting_started_with_ack"></a>

Setelah membuat kemampuan ACK (lihat[Buat kemampuan ACK](create-ack-capability.md)), Anda dapat mulai mengelola AWS sumber daya menggunakan manifes Kubernetes di klaster Anda.

Sebagai contoh, buat manifes bucket S3 ini di`bucket.yaml`, pilih nama bucket unik Anda sendiri.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-test-bucket
  namespace: default
spec:
  name: my-unique-bucket-name-12345
```

Terapkan manifes:

```
kubectl apply -f bucket.yaml
```

Periksa statusnya:

```
kubectl get bucket my-test-bucket
kubectl describe bucket my-test-bucket
```

Verifikasi bucket telah dibuat di AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Hapus sumber daya Kubernetes:

```
kubectl delete bucket my-test-bucket
```

Verifikasi bucket telah dihapus dari AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Bucket seharusnya tidak lagi muncul dalam daftar, menunjukkan bahwa ACK mengelola siklus hidup penuh sumber daya. AWS 

Untuk informasi lebih lanjut tentang memulai dengan ACK, lihat [Memulai dengan ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/getting-started/).

## Siklus hidup sumber daya dan rekonsiliasi
<a name="_resource_lifecycle_and_reconciliation"></a>

ACK menggunakan loop rekonsiliasi berkelanjutan untuk memastikan AWS sumber daya Anda cocok dengan status yang diinginkan yang ditentukan dalam manifes Kubernetes Anda.

 **Bagaimana rekonsiliasi bekerja**:

1. Anda membuat atau memperbarui sumber daya kustom Kubernetes (misalnya, Bucket S3)

1. ACK mendeteksi perubahan dan membandingkan keadaan yang diinginkan dengan status aktual di AWS 

1. Jika berbeda, ACK membuat panggilan AWS API untuk mendamaikan perbedaannya

1. ACK memperbarui status sumber daya di Kubernetes untuk mencerminkan status saat ini

1. Loop berulang terus menerus, biasanya setiap beberapa jam

Rekonsiliasi dipicu ketika Anda membuat sumber daya Kubernetes baru, memperbarui sumber daya yang ada`spec`, atau ketika ACK mendeteksi penyimpangan dari perubahan manual yang dibuat di luar ACK. AWS Selain itu, ACK melakukan rekonsiliasi berkala dengan periode resync 10 jam. Perubahan pada sumber daya Kubernetes memicu rekonsiliasi segera, sementara deteksi drift pasif terhadap perubahan sumber daya hulu AWS terjadi selama sinkronisasi ulang periodik.

Saat mengerjakan contoh memulai di atas, ACK melakukan langkah-langkah ini:

1. Memeriksa apakah bucket ada di AWS 

1. Jika tidak, panggilan `s3:CreateBucket` 

1. Memperbarui status Kubernetes dengan bucket ARN dan state

1. Melanjutkan pemantauan untuk drift

Untuk mempelajari lebih lanjut tentang cara kerja ACK, lihat [Rekonsiliasi ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/reconciliation/).

## Kondisi status
<a name="_status_conditions"></a>

Sumber daya ACK menggunakan kondisi status untuk mengkomunikasikan keadaan mereka. Memahami kondisi ini membantu Anda memecahkan masalah dan memahami kesehatan sumber daya.
+  **Siap**: Menunjukkan sumber daya siap untuk dikonsumsi (kondisi Kubernetes standar).
+  **ACK. ResourceSynced**: Menunjukkan spesifikasi sumber daya cocok dengan status AWS sumber daya.
+  **ACK.terminal**: Menunjukkan telah terjadi kesalahan yang tidak dapat dipulihkan.
+  **ACK.adopted**: Menunjukkan sumber daya diadopsi dari AWS sumber daya yang ada daripada dibuat baru.
+  **ACK.Recoverable**: Menunjukkan kesalahan yang dapat dipulihkan yang dapat diselesaikan tanpa memperbarui spesifikasi.
+  **ACK.advisory**: Memberikan informasi nasihat tentang sumber daya.
+  **ACK. LateInitialized**: Menunjukkan apakah inisialisasi bidang yang terlambat selesai.
+  **ACK. ReferencesResolved**: Menunjukkan apakah semua `AWSResourceReference` bidang telah diselesaikan.
+  **ACK. IAMRoleDipilih**: Menunjukkan apakah IAMRole Pemilih telah dipilih untuk mengelola sumber daya ini.

Periksa status sumber daya:

```
# Check if resource is ready
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'

# Check for terminal errors
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'
```

Contoh status:

```
status:
  conditions:
  - type: Ready
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.ResourceSynced
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.Terminal
    status: "True"
  ackResourceMetadata:
    arn: arn:aws:s3:::my-unique-bucket-name
    ownerAccountID: "111122223333"
    region: us-west-2
```

Untuk mempelajari lebih lanjut tentang status dan kondisi ACK, lihat [Ketentuan ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/conditions/).

## Kebijakan penghapusan
<a name="_deletion_policies"></a>

Kebijakan penghapusan ACK mengontrol apa yang terjadi pada AWS sumber daya ketika Anda menghapus sumber daya Kubernetes.

 **Hapus (default)** 

 AWS Resource dihapus ketika Anda menghapus sumber daya Kubernetes: Ini adalah perilaku default.

```
# No annotation needed - this is the default
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: temp-bucket
spec:
  name: temporary-bucket
```

Menghapus sumber daya ini akan menghapus bucket S3 di. AWS

 **Pertahankan** 

Sumber AWS daya disimpan saat Anda menghapus sumber daya Kubernetes:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: important-bucket
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  name: production-data-bucket
```

Menghapus sumber daya ini menghapusnya dari Kubernetes tetapi membiarkan bucket S3 masuk. AWS

`retain`Kebijakan ini berguna untuk basis data produksi yang harus hidup lebih lama dari sumber daya Kubernetes, sumber daya bersama yang digunakan oleh beberapa aplikasi, sumber daya dengan data penting yang tidak boleh dihapus secara tidak sengaja, atau manajemen ACK sementara di mana Anda mengadopsi sumber daya, mengonfigurasinya, lalu melepaskannya kembali ke manajemen manual.

Untuk mempelajari selengkapnya tentang kebijakan penghapusan ACK, lihat Kebijakan [Penghapusan ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/deletion-policy/).

## Adopsi sumber daya
<a name="_resource_adoption"></a>

Adopsi memungkinkan Anda untuk membawa AWS sumber daya yang ada di bawah manajemen ACK tanpa membuatnya kembali.

Kapan menggunakan adopsi:
+ Migrasi infrastruktur yang ada ke manajemen ACK
+ Memulihkan sumber daya yatim piatu jika terjadi penghapusan AWS sumber daya yang tidak disengaja di Kubernetes
+ Mengimpor sumber daya yang dibuat oleh alat lain (CloudFormation, Terraform)

Cara kerja adopsi:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Saat Anda membuat sumber daya ini:

1. ACK memeriksa apakah ember dengan nama itu ada di AWS 

1. Jika ditemukan, ACK mengadopsinya (tidak ada panggilan API untuk dibuat)

1. ACK membaca konfigurasi saat ini dari AWS 

1. ACK memperbarui status Kubernetes untuk mencerminkan keadaan sebenarnya

1. Pembaruan di masa mendatang merekonsiliasi sumber daya secara normal

Setelah diadopsi, sumber daya dikelola seperti sumber daya ACK lainnya, dan menghapus sumber daya Kubernetes akan menghapus sumber daya kecuali Anda menggunakan kebijakan penghapusan. AWS `retain`

Saat mengadopsi sumber daya, AWS sumber daya harus sudah ada dan ACK membutuhkan izin baca untuk menemukannya. `adopt-or-create`Kebijakan mengadopsi sumber daya jika ada, atau membuatnya jika tidak. Ini berguna ketika Anda menginginkan alur kerja deklaratif yang berfungsi apakah sumber daya ada atau tidak.

Untuk mempelajari lebih lanjut tentang adopsi sumber daya ACK, lihat [Adopsi Sumber Daya ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/).

## Sumber daya lintas akun dan lintas wilayah
<a name="_cross_account_and_cross_region_resources"></a>

ACK dapat mengelola sumber daya di berbagai AWS akun dan wilayah dari satu cluster.

 **Anotasi sumber daya lintas wilayah** 

Anda dapat menentukan wilayah AWS sumber daya menggunakan anotasi:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: eu-bucket
  annotations:
    services.k8s.aws/region: eu-west-1
spec:
  name: my-eu-bucket
```

Anda juga dapat menentukan wilayah dari semua sumber AWS daya yang dibuat dalam namespace tertentu:

 **Anotasi namespace** 

Menetapkan wilayah default untuk semua sumber daya di namespace:

```
apiVersion: v1
kind: Namespace
metadata:
  name: production
  annotations:
    services.k8s.aws/default-region: us-west-2
```

Sumber daya yang dibuat di namespace ini menggunakan wilayah ini kecuali diganti dengan anotasi tingkat sumber daya.

 **Lintas akun** 

Gunakan Penyeleksi Peran IAM untuk memetakan peran IAM tertentu ke ruang nama:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: target-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

Sumber daya yang dibuat di namespace yang dipetakan secara otomatis menggunakan peran yang ditentukan.

Untuk mempelajari selengkapnya tentang Penyeleksi Peran IAM, lihat Manajemen Sumber Daya [Lintas Akun ACK](https://aws-controllers-k8s.github.io/docs/guides/cross-account). Untuk detail konfigurasi lintas akun, lihat[Konfigurasikan izin ACK](ack-permissions.md).

## Penanganan kesalahan dan perilaku coba lagi
<a name="_error_handling_and_retry_behavior"></a>

ACK secara otomatis menangani kesalahan sementara dan mencoba ulang operasi yang gagal.

Coba lagi strategi:
+ Kesalahan sementara (pembatasan tarif, masalah layanan sementara, izin tidak mencukupi) memicu percobaan ulang otomatis
+ Backoff eksponensial mencegah kewalahan AWS APIs
+ Upaya coba ulang maksimum bervariasi menurut jenis kesalahan
+ Kesalahan permanen (parameter tidak valid, konflik nama sumber daya) jangan coba lagi

Periksa status sumber daya untuk detail kesalahan menggunakan`kubectl describe`:

```
kubectl describe bucket my-bucket
```

Cari kondisi status dengan pesan kesalahan, peristiwa yang menunjukkan upaya rekonsiliasi terbaru, dan `message` bidang dalam kondisi status yang menjelaskan kegagalan. Kesalahan umum termasuk izin IAM yang tidak mencukupi, konflik nama sumber daya AWS, nilai konfigurasi yang tidak valid dalam`spec`, dan melebihi kuota layanan. AWS 

Untuk mengatasi masalah kesalahan umum, lihat. [Memecahkan masalah dengan kemampuan ACK](ack-troubleshooting.md)

## Komposisi sumber daya dengan kro
<a name="_resource_composition_with_kro"></a>

Untuk menyusun dan menghubungkan beberapa sumber daya ACK bersama-sama, gunakan Kemampuan EKS untuk kro (Kube Resource Orchestrator). kro menyediakan cara deklaratif untuk mendefinisikan kelompok sumber daya, meneruskan konfigurasi antar sumber daya untuk mengelola pola infrastruktur yang kompleks secara sederhana.

Untuk contoh rinci tentang membuat komposisi sumber daya kustom dengan sumber daya ACK, lihat [konsep kro](kro-concepts.md) 

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Pertimbangan ACK untuk EKS](ack-considerations.md)- Pola dan strategi integrasi khusus EKS

# Konfigurasikan izin ACK
<a name="ack-permissions"></a>

ACK memerlukan izin IAM untuk membuat dan mengelola AWS sumber daya atas nama Anda. Topik ini menjelaskan cara kerja IAM dengan ACK dan memberikan panduan tentang mengonfigurasi izin untuk kasus penggunaan yang berbeda.

## Bagaimana IAM bekerja dengan ACK
<a name="_how_iam_works_with_ack"></a>

ACK menggunakan peran IAM untuk mengautentikasi AWS dan melakukan tindakan pada sumber daya Anda. Ada dua cara untuk memberikan izin ke ACK:

 **Peran Kemampuan: Peran** IAM yang Anda berikan saat membuat kemampuan ACK. Peran ini digunakan secara default untuk semua operasi ACK.

 **IAM Role Selectors**: Peran IAM tambahan yang dapat dipetakan ke ruang nama atau sumber daya tertentu. Peran ini mengesampingkan Peran Kemampuan untuk sumber daya dalam cakupannya.

Ketika ACK perlu membuat atau mengelola sumber daya, ACK menentukan peran IAM mana yang akan digunakan:

1. Periksa apakah IAMRole Selector cocok dengan namespace sumber daya

1. Jika kecocokan ditemukan, asumsikan bahwa peran IAM

1. Jika tidak, gunakan Peran Kemampuan

Pendekatan ini memungkinkan manajemen izin yang fleksibel dari pengaturan peran tunggal sederhana hingga konfigurasi multi-akun dan multi-tim yang kompleks.

## Memulai: Pengaturan izin sederhana
<a name="_getting_started_simple_permission_setup"></a>

Untuk pengembangan, pengujian, atau kasus penggunaan sederhana, Anda dapat menambahkan semua izin layanan yang diperlukan langsung ke Peran Kemampuan.

Pendekatan ini bekerja dengan baik ketika:
+ Anda memulai dengan ACK
+ Semua sumber daya berada di AWS akun yang sama
+ Satu tim mengelola semua sumber daya ACK
+ Anda mempercayai semua pengguna ACK untuk memiliki izin yang sama

## Praktik terbaik produksi: Penyeleksi Peran IAM
<a name="_production_best_practice_iam_role_selectors"></a>

Untuk lingkungan produksi, gunakan Penyeleksi Peran IAM untuk menerapkan akses hak istimewa dan isolasi tingkat ruang nama.

Saat menggunakan Penyeleksi Peran IAM, Peran Kemampuan hanya membutuhkan `sts:AssumeRole` dan `sts:TagSession` izin untuk mengambil peran khusus layanan. Anda tidak perlu menambahkan izin AWS layanan apa pun (seperti S3 atau RDS) ke Peran Kemampuan itu sendiri—izin tersebut diberikan kepada masing-masing peran IAM yang diasumsikan oleh Peran Kemampuan.

 **Memilih antara model izin**:

Gunakan **izin langsung** (menambahkan izin layanan ke Peran Kemampuan) saat:
+ Anda memulai dan menginginkan pengaturan yang paling sederhana
+ Semua sumber daya berada di akun yang sama dengan cluster Anda
+ Anda memiliki persyaratan izin administratif dan seluruh klaster
+ Semua tim dapat berbagi izin yang sama

Gunakan **Penyeleksi Peran IAM** saat:
+ Mengelola sumber daya di beberapa AWS akun
+ Tim atau ruang nama yang berbeda memerlukan izin yang berbeda
+ Anda memerlukan kontrol akses berbutir halus per namespace
+ Anda ingin mengikuti praktik keamanan dengan hak istimewa paling sedikit

Anda dapat memulai dengan izin langsung dan bermigrasi ke Penyeleksi Peran IAM nanti seiring bertambahnya kebutuhan Anda.

 **Mengapa menggunakan Penyeleksi Peran IAM dalam produksi:** 
+  **Hak istimewa paling sedikit**: Setiap namespace hanya mendapatkan izin yang dibutuhkannya
+  **Isolasi tim**: Tim A tidak dapat secara tidak sengaja menggunakan izin Tim B
+  **Audit yang lebih mudah**: Pemetaan yang jelas dari namespace mana yang menggunakan peran mana
+  **Dukungan lintas akun**: Diperlukan untuk mengelola sumber daya di beberapa akun
+  **Pemisahan kekhawatiran**: Layanan atau lingkungan yang berbeda menggunakan peran yang berbeda

### Pengaturan Pemilih Peran IAM Dasar
<a name="_basic_iam_role_selector_setup"></a>

 **Langkah 1: Buat peran IAM khusus layanan** 

Buat peran IAM dengan izin untuk layanan tertentu AWS :

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": "*"
    }
  ]
}
```

Konfigurasikan kebijakan kepercayaan untuk memungkinkan Peran Kemampuan untuk mengasumsikannya:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

 **Langkah 2: Berikan AssumeRole izin untuk Peran Kemampuan** 

Tambahkan izin ke Peran Kemampuan untuk mengambil peran khusus layanan:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
    }
  ]
}
```

 **Langkah 3: Buat IAMRole Selector** 

Petakan peran IAM ke namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: s3-namespace-config
spec:
  arn: arn:aws:iam::111122223333:role/ACK-S3-Role
  namespaceSelector:
    names:
      - s3-resources
```

 **Langkah 4: Buat sumber daya di namespace yang dipetakan** 

Sumber daya di `s3-resources` namespace secara otomatis menggunakan peran yang ditentukan:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: s3-resources
spec:
  name: my-production-bucket
```

## Manajemen multi-akun
<a name="_multi_account_management"></a>

Gunakan Penyeleksi Peran IAM untuk mengelola sumber daya di beberapa AWS akun.

 **Langkah 1: Buat peran IAM lintas akun** 

Di akun target (444455556666), buat peran yang mempercayai Peran Kemampuan akun sumber:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

Lampirkan izin khusus layanan ke peran ini.

 **Langkah 2: Berikan AssumeRole izin** 

Di akun sumber (111122223333), izinkan Peran Kemampuan untuk mengambil peran akun target:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
    }
  ]
}
```

 **Langkah 3: Buat IAMRole Selector** 

Memetakan peran lintas akun ke namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: production-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

 **Langkah 4: Buat sumber daya** 

Sumber daya di `production` namespace dibuat di akun target:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: production
spec:
  name: my-cross-account-bucket
```

## Tanda sesi
<a name="_session_tags"></a>

Kemampuan EKS ACK secara otomatis menetapkan tag sesi pada semua permintaan AWS API. Tag ini memungkinkan kontrol akses dan audit berbutir halus dengan mengidentifikasi sumber setiap permintaan.

### Tag sesi yang tersedia
<a name="_available_session_tags"></a>

Tag sesi berikut disertakan dengan setiap panggilan AWS API yang dibuat oleh ACK:


| Tag Kunci | Deskripsi | 
| --- | --- | 
|   `eks:eks-capability-arn`   |  ARN dari kemampuan EKS membuat permintaan  | 
|   `eks:kubernetes-namespace`   |  Namespace Kubernetes dari sumber daya yang sedang dikelola  | 
|   `eks:kubernetes-api-group`   |  Grup API Kubernetes dari sumber daya (misalnya,) `s3.services.k8s.aws`  | 

### Menggunakan tag sesi untuk kontrol akses
<a name="_using_session_tags_for_access_control"></a>

Anda dapat menggunakan tag sesi ini dalam kondisi kebijakan IAM untuk membatasi sumber daya yang dapat dikelola ACK. Ini memberikan lapisan keamanan tambahan di luar Penyeleksi Peran IAM berbasis namespace.

 **Contoh: Batasi dengan namespace** 

Izinkan ACK membuat bucket S3 hanya ketika permintaan berasal dari namespace: `production`

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:kubernetes-namespace": "production"
        }
      }
    }
  ]
}
```

 **Contoh: Batasi dengan kemampuan** 

Izinkan tindakan hanya dari kemampuan ACK tertentu:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
        }
      }
    }
  ]
}
```

**catatan**  
Tag sesi adalah perbedaan dari ACK yang dikelola sendiri, yang tidak mengatur tag ini secara default. Ini memungkinkan kontrol akses yang lebih terperinci dengan kemampuan terkelola.

## Pola Pemilih Peran IAM Tingkat Lanjut
<a name="_advanced_iam_role_selector_patterns"></a>

[Untuk konfigurasi lanjutan termasuk pemilih label, pemetaan peran khusus sumber daya, dan contoh tambahan, lihat Dokumentasi ACK IRSA.](https://aws-controllers-k8s.github.io/community/docs/user-docs/irsa/)

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan siklus hidup sumber daya
+  [Konsep ACK](ack-concepts.md)- Pelajari tentang kebijakan adopsi dan penghapusan sumber daya
+  [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)- Memahami praktik terbaik keamanan untuk kemampuan

# Pertimbangan ACK untuk EKS
<a name="ack-considerations"></a>

Topik ini mencakup pertimbangan penting untuk menggunakan Kemampuan EKS untuk ACK, termasuk konfigurasi IAM, pola multi-akun, dan integrasi dengan kemampuan EKS lainnya.

## Pola konfigurasi IAM
<a name="_iam_configuration_patterns"></a>

Kemampuan ACK menggunakan Peran Kemampuan IAM untuk mengautentikasi dengan. AWS Pilih pola IAM yang tepat berdasarkan kebutuhan Anda.

### Sederhana: Peran Kemampuan Tunggal
<a name="_simple_single_capability_role"></a>

Untuk pengembangan, pengujian, atau kasus penggunaan sederhana, berikan semua izin yang diperlukan langsung ke Peran Kemampuan.

 **Kapan menggunakan**:
+ Memulai dengan ACK
+ Penerapan akun tunggal
+ Semua sumber daya dikelola oleh satu tim
+ Lingkungan pengembangan dan pengujian

 **Contoh**: Tambahkan izin S3 dan RDS ke Peran Kemampuan Anda dengan kondisi penandaan sumber daya:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["rds:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        },
      }
    }
  ]
}
```

Contoh ini membatasi operasi S3 dan RDS ke wilayah tertentu dan membutuhkan sumber daya RDS untuk memiliki tag. `ManagedBy: ACK`

### Produksi: Penyeleksi Peran IAM
<a name="_production_iam_role_selectors"></a>

Untuk lingkungan produksi, gunakan Penyeleksi Peran IAM untuk mengimplementasikan akses hak istimewa terkecil dan isolasi tingkat ruang nama.

 **Kapan menggunakan**:
+ Lingkungan produksi
+ Cluster multi-tim
+ Manajemen sumber daya multi-akun
+ Persyaratan keamanan dengan hak istimewa paling sedikit
+ Layanan yang berbeda memerlukan izin yang berbeda

 **Manfaat**:
+ Setiap namespace hanya mendapatkan izin yang dibutuhkannya
+ Isolasi tim - Tim A tidak dapat menggunakan izin Tim B
+ Audit dan kepatuhan yang lebih mudah
+ Diperlukan untuk manajemen sumber daya lintas akun

Untuk konfigurasi Pemilih Peran IAM yang mendetail, lihat. [Konfigurasikan izin ACK](ack-permissions.md)

## Integrasi dengan kemampuan EKS lainnya
<a name="_integration_with_other_eks_capabilities"></a>

### GitOps dengan Argo CD
<a name="_gitops_with_argo_cd"></a>

Gunakan Kemampuan EKS untuk Argo CD untuk menyebarkan sumber daya ACK dari repositori Git, memungkinkan GitOps alur kerja untuk manajemen infrastruktur.

 **Pertimbangan**:
+ Simpan sumber daya ACK bersama manifes aplikasi untuk end-to-end GitOps
+ Atur berdasarkan lingkungan, layanan, atau jenis sumber daya berdasarkan struktur tim Anda
+ Gunakan sinkronisasi otomatis Argo CD untuk rekonsiliasi berkelanjutan
+ Aktifkan pemangkasan untuk menghapus sumber daya yang dihapus secara otomatis
+ Pertimbangkan hub-and-spoke pola untuk manajemen infrastruktur multi-cluster

GitOps menyediakan jalur audit, kemampuan rollback, dan manajemen infrastruktur deklaratif. Untuk informasi lebih lanjut tentang Argo CD, lihat[Bekerja dengan Argo CD](working-with-argocd.md).

### Komposisi sumber daya dengan kro
<a name="_resource_composition_with_kro"></a>

Gunakan Kemampuan EKS untuk kro (Kube Resource Orchestrator) untuk menyusun beberapa sumber daya ACK ke dalam abstraksi dan kustom tingkat yang lebih tinggi. APIs

 **Kapan menggunakan kro dengan ACK**:
+ Buat pola yang dapat digunakan kembali untuk tumpukan infrastruktur umum (database\$1cadangan\$1pemantauan)
+ Membangun platform swalayan dengan disederhanakan APIs untuk tim aplikasi
+ Kelola dependensi sumber daya dan berikan nilai antar sumber daya (ARN bucket S3 ke fungsi Lambda)
+ Standarisasi konfigurasi infrastruktur di seluruh tim
+ Kurangi kompleksitas dengan menyembunyikan detail implementasi di balik sumber daya khusus

 **Contoh pola**:
+ Tumpukan aplikasi: ember S3\$1antrian SQS\$1konfigurasi notifikasi
+ Pengaturan basis data: contoh RDS\$1grup parameter\$1grup keamanan\$1rahasia
+ Jaringan: VPC\$1subnet\$1tabel rute\$1grup keamanan

kro menangani pengurutan ketergantungan, propagasi status, dan manajemen siklus hidup untuk sumber daya tersusun. Untuk informasi lebih lanjut tentang kro, lihat[konsep kro](kro-concepts.md).

## Mengatur sumber daya Anda
<a name="_organizing_your_resources"></a>

Atur sumber daya ACK menggunakan ruang nama Kubernetes dan tag AWS sumber daya untuk pengelolaan, kontrol akses, dan pelacakan biaya yang lebih baik.

### Organisasi namespace
<a name="_namespace_organization"></a>

Gunakan ruang nama Kubernetes untuk memisahkan sumber daya ACK secara logis berdasarkan lingkungan (produksi, pementasan, pengembangan), tim (platform, data, mL), atau aplikasi.

 **Manfaat**:
+ RBAC dengan cakupan ruang nama untuk kontrol akses
+ Setel wilayah default per namespace menggunakan anotasi
+ Pengelolaan dan pembersihan sumber daya yang lebih mudah
+ Pemisahan logis selaras dengan struktur organisasi

### Penandaan sumber daya
<a name="_resource_tagging"></a>

Kemampuan EKS ACK secara otomatis menerapkan tag default ke semua AWS sumber daya yang dibuatnya. Tag ini berbeda dari ACK yang dikelola sendiri dan memberikan kemampuan penelusuran yang ditingkatkan.

 **Tag default diterapkan oleh kemampuan**:


| Tag Kunci | Deskripsi | 
| --- | --- | 
|   `eks:controller-version`   |  Versi pengontrol ACK  | 
|   `eks:kubernetes-namespace`   |  Namespace Kubernetes dari sumber daya ACK  | 
|   `eks:kubernetes-resource-name`   |  Nama sumber daya Kubernetes  | 
|   `eks:kubernetes-api-group`   |  Grup API Kubernetes (misalnya,) `s3.services.k8s.aws`  | 
|   `eks:eks-capability-arn`   |  ARN dari kemampuan EKS ACK  | 

**catatan**  
ACK yang dikelola sendiri menggunakan tag default yang berbeda: `services.k8s.aws/controller-version` dan`services.k8s.aws/namespace`. Tag kemampuan menggunakan `eks:` awalan untuk konsistensi dengan fitur EKS lainnya.

 **Tag tambahan yang direkomendasikan**:

Tambahkan tag khusus untuk alokasi biaya, pelacakan kepemilikan, dan tujuan organisasi:
+ Lingkungan (Produksi, Pementasan, Pengembangan)
+ Kepemilikan tim atau departemen
+ Pusat biaya untuk alokasi penagihan
+ Nama aplikasi atau layanan

## Migrasi dari Infrastructure-as-code alat lain
<a name="_migration_from_other_infrastructure_as_code_tools"></a>

Banyak organisasi menemukan nilai dalam standarisasi Kubernetes di luar orkestrasi beban kerja mereka. Migrasi infrastruktur dan manajemen AWS sumber daya ke ACK memungkinkan Anda menstandarisasi manajemen infrastruktur menggunakan Kubernetes APIs di samping beban kerja aplikasi Anda.

 **Manfaat standarisasi di Kubernetes** untuk infrastruktur:
+  **Sumber kebenaran tunggal**: Mengelola aplikasi dan infrastruktur di Kubernetes, memungkinkan praktik end-to-end GitOps 
+  **Perkakas terpadu: Tim menggunakan sumber daya dan perkakas** Kubernetes daripada mempelajari beberapa alat dan kerangka kerja
+  **Rekonsiliasi yang konsisten**: ACK terus merekonsiliasi AWS sumber daya seperti yang dilakukan Kubernetes untuk beban kerja, mendeteksi dan mengoreksi penyimpangan dibandingkan dengan alat penting
+  **Komposisi asli**: Dengan kro dan ACK bersama-sama, referensi AWS sumber daya secara langsung dalam manifes aplikasi dan sumber daya, meneruskan string koneksi dan ARNs antar sumber daya
+  **Operasi yang disederhanakan**: Satu bidang kontrol untuk penerapan, rollback, dan observabilitas di seluruh sistem Anda

ACK mendukung adopsi AWS sumber daya yang ada tanpa membuatnya kembali, memungkinkan migrasi zero-downtime dari, Terraform CloudFormation, atau sumber daya di luar cluster.

 **Mengadopsi sumber daya yang ada**:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Setelah diadopsi, sumber daya dikelola oleh ACK dan dapat diperbarui melalui manifes Kubernetes. Anda dapat bermigrasi secara bertahap, mengadopsi sumber daya sesuai kebutuhan sambil mempertahankan alat IAc yang ada untuk sumber daya lain.

ACK juga mendukung sumber daya read-only. Untuk sumber daya yang dikelola oleh tim atau alat lain yang ingin Anda referensikan tetapi tidak diubah, gabungkan adopsi dengan kebijakan `retain` penghapusan dan berikan izin IAM baca saja. Hal ini memungkinkan aplikasi untuk menemukan infrastruktur bersama (VPCs, peran IAM, kunci KMS) melalui Kubernetes tanpa risiko modifikasi APIs .

Untuk informasi lebih lanjut tentang adopsi sumber daya, lihat[Konsep ACK](ack-concepts.md).

## Kebijakan penghapusan
<a name="_deletion_policies"></a>

Kebijakan penghapusan mengontrol apa yang terjadi pada AWS sumber daya ketika Anda menghapus sumber daya Kubernetes yang sesuai. Pilih kebijakan yang tepat berdasarkan siklus hidup sumber daya dan persyaratan operasional Anda.

### Hapus (default)
<a name="_delete_default"></a>

Sumber AWS daya akan dihapus ketika Anda menghapus sumber daya Kubernetes. Ini menjaga konsistensi antara cluster Anda dan AWS, memastikan sumber daya tidak menumpuk.

 **Kapan menggunakan hapus**:
+ Lingkungan pengembangan dan pengujian di mana pembersihan itu penting
+ Sumber daya sementara yang terkait dengan siklus hidup aplikasi (database pengujian, ember sementara)
+ Sumber daya yang seharusnya tidak hidup lebih lama dari aplikasi (antrian SQS, cluster) ElastiCache 
+ Optimalisasi biaya - secara otomatis membersihkan sumber daya yang tidak digunakan
+ Lingkungan yang dikelola dengan GitOps tempat penghapusan sumber daya dari Git harus menghapus infrastruktur

Kebijakan penghapusan default sejalan dengan model deklaratif Kubernetes: apa yang ada di klaster cocok dengan apa yang ada di dalamnya. AWS

### Mempertahankan
<a name="_retain"></a>

Sumber AWS daya disimpan saat Anda menghapus sumber daya Kubernetes. Ini melindungi data penting dan memungkinkan sumber daya untuk hidup lebih lama dari representasi Kubernetes mereka.

 **Kapan menggunakan pertahankan**:
+ Database produksi dengan data penting yang harus bertahan dari perubahan klaster
+ Ember penyimpanan jangka panjang dengan kepatuhan atau persyaratan audit
+ Sumber daya bersama yang digunakan oleh beberapa aplikasi atau tim
+ Sumber daya dimigrasikan ke alat manajemen yang berbeda
+ Skenario pemulihan bencana di mana Anda ingin melestarikan infrastruktur
+ Sumber daya dengan dependensi kompleks yang membutuhkan penonaktifan yang cermat

```
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBInstance
metadata:
  name: production-db
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  dbInstanceIdentifier: prod-db
  # ... configuration
```

**penting**  
Sumber daya yang tertahan terus mengeluarkan AWS biaya dan harus dihapus secara manual dari AWS saat tidak lagi diperlukan. Gunakan penandaan sumber daya untuk melacak sumber daya yang disimpan untuk pembersihan.

Untuk selengkapnya tentang kebijakan penghapusan, lihat. [Konsep ACK](ack-concepts.md)

## Dokumentasi hulu
<a name="_upstream_documentation"></a>

Untuk informasi rinci tentang penggunaan ACK:
+  [Panduan penggunaan ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/usage/) - Membuat dan mengelola sumber daya
+  [Referensi ACK API](https://aws-controllers-k8s.github.io/community/reference/) - Dokumentasi API lengkap untuk semua layanan
+  [Dokumentasi ACK - Dokumentasi](https://aws-controllers-k8s.github.io/community/docs/) pengguna yang komprehensif

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM dan pola multi-akun
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan siklus hidup sumber daya
+  [Memecahkan masalah dengan kemampuan ACK](ack-troubleshooting.md)- Memecahkan masalah ACK
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Menyebarkan sumber daya ACK dengan GitOps
+  [konsep kro](kro-concepts.md)- Tulis sumber daya ACK ke dalam abstraksi tingkat yang lebih tinggi

# Memecahkan masalah dengan kemampuan ACK
<a name="ack-troubleshooting"></a>

Topik ini memberikan panduan pemecahan masalah untuk Kemampuan EKS untuk ACK, termasuk pemeriksaan kesehatan kemampuan, verifikasi status sumber daya, dan masalah izin IAM.

**catatan**  
Kemampuan EKS sepenuhnya dikelola dan dijalankan di luar cluster Anda. Anda tidak memiliki akses ke log pengontrol atau ruang nama pengontrol. Pemecahan masalah berfokus pada kesehatan kemampuan, status sumber daya, dan konfigurasi IAM.

## Kemampuan aktif tetapi sumber daya tidak dibuat
<a name="_capability_is_active_but_resources_arent_being_created"></a>

Jika kemampuan ACK Anda menunjukkan `ACTIVE` status tetapi sumber daya tidak dibuat AWS, periksa kesehatan kemampuan, status sumber daya, dan izin IAM.

 **Periksa kesehatan kemampuan**:

Anda dapat melihat masalah kesehatan dan status kemampuan di konsol EKS atau menggunakan AWS CLI.

 **Konsol**:

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda.

1. Pilih tab **Observability**.

1. Pilih **Monitor cluster**.

1. Pilih tab **Kemampuan** untuk melihat kesehatan dan status untuk semua kemampuan.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack

# Look for issues in the health section
```

 **Penyebab umum**:
+  **Izin IAM hilang**: Peran Kemampuan tidak memiliki izin untuk layanan AWS 
+  **Namespace yang salah**: Sumber daya dibuat di namespace tanpa Selector yang tepat IAMRole
+  **Spesifikasi sumber daya tidak valid**: Periksa kondisi status sumber daya untuk kesalahan validasi
+  **Pelambatan API: Batas** laju AWS API tercapai
+  **Webhooks penerimaan**: Webhook masuk memblokir pengontrol dari menambal status sumber daya

 **Periksa status sumber daya**:

```
# Describe the resource to see conditions and events
kubectl describe bucket my-bucket -n default

# Look for status conditions
kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}'

# View resource events
kubectl get events --field-selector involvedObject.name=my-bucket -n default
```

 **Verifikasi izin IAM**:

```
# View the Capability Role's policies
aws iam list-attached-role-policies --role-name my-ack-capability-role
aws iam list-role-policies --role-name my-ack-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name
```

## Sumber daya dibuat AWS tetapi tidak ditampilkan di Kubernetes
<a name="resources_created_in_shared_aws_but_not_showing_in_kubernetes"></a>

ACK hanya melacak sumber daya yang dibuatnya melalui manifes Kubernetes. Untuk mengelola AWS sumber daya yang ada dengan ACK, gunakan fitur adopsi.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Untuk informasi lebih lanjut tentang adopsi sumber daya, lihat[Konsep ACK](ack-concepts.md).

## Sumber daya lintas akun tidak dibuat
<a name="_cross_account_resources_not_being_created"></a>

Jika sumber daya tidak dibuat di AWS akun target saat menggunakan Penyeleksi Peran IAM, verifikasi hubungan kepercayaan dan konfigurasi IAMRole Pemilih.

 **Verifikasi hubungan kepercayaan**:

```
# Check the trust policy in the target account role
aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'
```

Kebijakan kepercayaan harus memungkinkan Peran Kemampuan akun sumber untuk mengasumsikannya.

 **Konfirmasikan konfigurasi IAMRole Selector**:

```
# List IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Describe specific selector
kubectl describe iamroleselector my-selector
```

 **Verifikasi penyelarasan namespace**:

IAMRoleSelector adalah sumber daya dengan cakupan cluster tetapi menargetkan ruang nama tertentu. Pastikan sumber daya ACK Anda berada di namespace yang cocok dengan pemilih namespace IAMRole Selector:

```
# Check resource namespace
kubectl get bucket my-cross-account-bucket -n production

# List all IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Check which namespace the selector targets
kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'
```

 **Periksa Kondisi IAMRole yang dipilih**:

Verifikasi bahwa IAMRole Pemilih berhasil dicocokkan dengan sumber daya Anda dengan memeriksa kondisi: `ACK.IAMRoleSelected`

```
# Check if IAMRoleSelector was matched
kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'
```

Jika kondisinya ada `False` atau hilang, IAMRole pemilih namespace Selector tidak cocok dengan namespace sumber daya. Verifikasi bahwa pemilih `namespaceSelector` cocok dengan label namespace sumber daya Anda.

 **Periksa izin Peran Kemampuan**:

Kebutuhan `sts:AssumeRole` dan `sts:TagSession` izin Peran Kemampuan untuk peran akun target:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::[.replaceable]`444455556666`:role/[.replaceable]`cross-account-ack-role`"
    }
  ]
}
```

Untuk konfigurasi lintas akun yang mendetail, lihat[Konfigurasikan izin ACK](ack-permissions.md).

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Pertimbangan ACK untuk EKS](ack-considerations.md)- Pertimbangan ACK dan praktik terbaik
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan izin IAM dan pola multi-akun
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan siklus hidup sumber daya
+  [Memecahkan Masalah Kemampuan EKS](capabilities-troubleshooting.md)- Panduan pemecahan masalah kemampuan umum

# Membandingkan Kemampuan EKS untuk ACK dengan ACK yang dikelola sendiri
<a name="ack-comparison"></a>

Kemampuan EKS untuk ACK menyediakan fungsionalitas yang sama dengan pengontrol ACK yang dikelola sendiri, tetapi dengan keunggulan operasional yang signifikan. Untuk perbandingan umum Kemampuan EKS vs solusi yang dikelola sendiri, lihat[Pertimbangan Kemampuan EKS](capabilities-considerations.md). Topik ini berfokus pada perbedaan spesifik ACK.

## Perbedaan dari ACK hulu
<a name="_differences_from_upstream_ack"></a>

Kemampuan EKS untuk ACK didasarkan pada pengontrol ACK hulu tetapi berbeda dalam integrasi IAM.

 **Peran Kemampuan IAM: Kemampuan menggunakan peran** IAM khusus dengan kebijakan kepercayaan yang memungkinkan prinsipal `capabilities.eks.amazonaws.com` layanan, bukan IRSA (Peran IAM untuk Akun Layanan). Anda dapat melampirkan kebijakan IAM langsung ke Peran Kemampuan tanpa perlu membuat atau membuat anotasi akun layanan Kubernetes atau mengonfigurasi penyedia OIDC. Praktik terbaik untuk kasus penggunaan produksi adalah mengonfigurasi izin layanan menggunakan`IAMRoleSelector`. Lihat [Konfigurasikan izin ACK](ack-permissions.md) untuk detail selengkapnya.

 **Tag sesi**: Kemampuan terkelola secara otomatis menetapkan tag sesi pada semua permintaan AWS API, memungkinkan kontrol akses dan audit berbutir halus. Tag termasuk`eks:eks-capability-arn`,`eks:kubernetes-namespace`, dan`eks:kubernetes-api-group`. Ini berbeda dari ACK yang dikelola sendiri, yang tidak mengatur tag ini secara default. Lihat [Konfigurasikan izin ACK](ack-permissions.md) detail tentang penggunaan tag sesi dalam kebijakan IAM.

 **Tag sumber daya**: Kemampuan menerapkan tag default yang berbeda ke AWS sumber daya daripada ACK yang dikelola sendiri. Kemampuan menggunakan tag `eks:` awalan (seperti`eks:kubernetes-namespace`,`eks:eks-capability-arn`) alih-alih `services.k8s.aws/` tag yang digunakan oleh ACK yang dikelola sendiri. Lihat [Pertimbangan ACK untuk EKS](ack-considerations.md) daftar lengkap tag sumber daya default.

 **Kompatibilitas sumber daya**: Sumber daya kustom ACK bekerja secara identik dengan ACK upstream tanpa perubahan pada file YAMAL sumber daya ACK Anda. Kemampuannya menggunakan Kubernetes yang sama APIs dan CRDs, jadi alat seperti `kubectl` bekerja dengan cara yang sama. Semua pengontrol GA dan sumber daya dari ACK hulu didukung.

Untuk dokumentasi ACK lengkap dan panduan khusus layanan, lihat dokumentasi [ACK](https://aws-controllers-k8s.github.io/community/).

## Jalur migrasi
<a name="_migration_path"></a>

Anda dapat bermigrasi dari ACK yang dikelola sendiri ke kemampuan terkelola tanpa waktu henti:

1. Perbarui pengontrol ACK yang dikelola sendiri `kube-system` untuk digunakan untuk sewa pemilihan pemimpin, misalnya:

   ```
   helm upgrade --install ack-s3-controller \
     oci://public.ecr.aws/aws-controllers-k8s/s3-chart \
     --namespace ack-system \
     --set leaderElection.namespace=kube-system
   ```

   Ini memindahkan sewa pengontrol`kube-system`, memungkinkan kemampuan terkelola untuk berkoordinasi dengannya.

1. Buat kemampuan ACK di cluster Anda (lihat[Buat kemampuan ACK](create-ack-capability.md))

1. Kemampuan terkelola mengenali AWS sumber daya yang dikelola ACK yang ada dan mengambil alih rekonsiliasi

1. Secara bertahap turunkan atau hapus penerapan pengontrol yang dikelola sendiri:

   ```
   helm uninstall ack-s3-controller --namespace ack-system
   ```

Pendekatan ini memungkinkan kedua pengendali untuk hidup berdampingan dengan aman selama migrasi. Kemampuan yang dikelola secara otomatis mengadopsi sumber daya yang sebelumnya dikelola oleh pengendali yang dikelola sendiri, memastikan rekonsiliasi berkelanjutan tanpa konflik.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Buat kemampuan ACK](create-ack-capability.md)- Buat sumber daya kemampuan ACK
+  [Konsep ACK](ack-concepts.md)- Memahami konsep ACK dan siklus hidup sumber daya
+  [Konfigurasikan izin ACK](ack-permissions.md)- Konfigurasikan IAM dan izin

# Penerapan Berkelanjutan dengan Argo CD
<a name="argocd"></a>

Argo CD adalah alat pengiriman GitOps kontinu deklaratif untuk Kubernetes. Dengan Argo CD, Anda dapat mengotomatiskan penerapan dan manajemen siklus hidup aplikasi Anda di beberapa cluster dan lingkungan. Argo CD mendukung beberapa jenis sumber termasuk repositori Git, registri Helm (HTTP dan OCI), dan gambar OCI—memberikan fleksibilitas bagi organisasi dengan persyaratan keamanan dan kepatuhan yang berbeda.

Dengan Kemampuan EKS, Argo CD sepenuhnya dikelola oleh AWS, menghilangkan kebutuhan untuk menginstal, memelihara, dan menskalakan pengontrol CD Argo dan dependensinya pada cluster Anda.

## Bagaimana Argo CD Bekerja
<a name="_how_argo_cd_works"></a>

Argo CD mengikuti GitOps pola, di mana sumber aplikasi Anda (repositori Git, registri Helm, atau gambar OCI) adalah sumber kebenaran untuk mendefinisikan status aplikasi yang diinginkan. Ketika Anda membuat resource Argo CD, Anda menentukan `Application` sumber yang berisi manifes aplikasi Anda dan cluster Kubernetes target dan namespace. Argo CD terus memantau sumber dan status langsung di cluster, secara otomatis menyinkronkan perubahan apa pun untuk memastikan status cluster cocok dengan status yang diinginkan.

**catatan**  
Dengan Kemampuan EKS untuk Argo CD, perangkat lunak Argo CD berjalan di bidang AWS kontrol, bukan pada node pekerja Anda. Ini berarti node pekerja Anda tidak memerlukan akses langsung ke repositori Git atau registri Helm — kapabilitas menangani akses sumber dari akun. AWS 

Argo CD menyediakan tiga jenis sumber daya utama:
+  **Aplikasi**: Mendefinisikan penerapan dari repositori Git ke kluster target
+  **ApplicationSet**: Menghasilkan beberapa Aplikasi dari template untuk penerapan multi-cluster
+  **AppProject**: Menyediakan pengelompokan logis dan kontrol akses untuk Aplikasi

 **Contoh: Membuat Aplikasi Argo CD** 

Contoh berikut menunjukkan cara membuat `Application` sumber daya Argo CD:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

**catatan**  
Gunakan `destination.name` dengan nama cluster yang Anda gunakan saat mendaftarkan cluster (seperti `in-cluster` untuk cluster lokal). `destination.server`Bidang ini juga berfungsi dengan cluster EKS ARNs, tetapi menggunakan nama cluster direkomendasikan untuk keterbacaan yang lebih baik.

## Manfaat Argo CD
<a name="_benefits_of_argo_cd"></a>

Argo CD mengimplementasikan GitOps alur kerja di mana Anda menentukan konfigurasi aplikasi Anda di repositori Git dan Argo CD secara otomatis menyinkronkan aplikasi Anda agar sesuai dengan status yang diinginkan. Pendekatan GIT-sentris ini menyediakan jejak audit lengkap dari semua perubahan, memungkinkan pengembalian yang mudah, dan terintegrasi secara alami dengan peninjauan kode dan proses persetujuan Anda yang ada. Argo CD secara otomatis mendeteksi dan merekonsiliasi penyimpangan antara status yang diinginkan di Git dan status aktual di cluster Anda, memastikan penerapan Anda tetap konsisten dengan konfigurasi yang Anda deklarasikan.

Dengan Argo CD, Anda dapat menyebarkan dan mengelola aplikasi di beberapa cluster dari satu instance CD Argo, menyederhanakan operasi di lingkungan multi-cluster dan multi-wilayah. Argo CD UI menyediakan kemampuan visualisasi dan pemantauan, memungkinkan Anda untuk melihat status penerapan, kesehatan, dan riwayat aplikasi Anda. UI terintegrasi dengan AWS Identity Center (sebelumnya AWS SSO) untuk otentikasi dan otorisasi tanpa batas, memungkinkan Anda untuk mengontrol akses menggunakan infrastruktur manajemen identitas yang ada.

Sebagai bagian dari Kemampuan Terkelola EKS, Argo CD sepenuhnya dikelola oleh AWS, menghilangkan kebutuhan untuk menginstal, mengkonfigurasi, dan memelihara infrastruktur Argo CD. AWS menangani penskalaan, penambalan, dan manajemen operasional, yang memungkinkan tim Anda untuk fokus pada pengiriman aplikasi daripada pemeliharaan alat.

## Integrasi dengan Pusat AWS Identitas
<a name="integration_with_shared_aws_identity_center"></a>

EKS Managed Capabilities menyediakan integrasi langsung antara Argo CD dan AWS Identity Center, memungkinkan otentikasi dan otorisasi tanpa batas untuk pengguna Anda. Saat Anda mengaktifkan kemampuan Argo CD, Anda dapat mengonfigurasi integrasi Pusat AWS Identitas untuk memetakan grup Pusat Identitas dan pengguna ke peran Argo CD RBAC, memungkinkan Anda mengontrol siapa yang dapat mengakses dan mengelola aplikasi di Argo CD.

## Integrasi dengan Kemampuan Terkelola EKS Lainnya
<a name="_integration_with_other_eks_managed_capabilities"></a>

Argo CD terintegrasi dengan Kemampuan Terkelola EKS lainnya.
+  ** AWS Controller for Kubernetes (ACK)**: Gunakan Argo CD untuk mengelola penyebaran sumber daya ACK di beberapa cluster, memungkinkan alur kerja untuk infrastruktur Anda. GitOps AWS 
+  **kro (Kube Resource Orchestrator)**: Gunakan Argo CD untuk menyebarkan komposisi kro di beberapa cluster, memungkinkan komposisi sumber daya yang konsisten di seluruh estate Kubernetes Anda.

## Memulai dengan Argo CD
<a name="_getting_started_with_argo_cd"></a>

Untuk memulai dengan Kemampuan EKS untuk Argo CD:

1. Buat dan konfigurasikan Peran Kemampuan IAM dengan izin yang diperlukan untuk Argo CD untuk mengakses sumber Anda dan mengelola aplikasi.

1.  [Buat sumber daya kemampuan Argo CD](create-argocd-capability.md) di kluster EKS Anda melalui AWS Konsol, AWS CLI, atau infrastruktur pilihan Anda sebagai alat kode.

1. Konfigurasikan akses repositori dan daftarkan cluster untuk penerapan aplikasi.

1. Buat sumber daya Aplikasi untuk menyebarkan aplikasi Anda dari sumber deklaratif Anda.

# Membuat kemampuan Argo CD
<a name="create-argocd-capability"></a>

Topik ini menjelaskan cara membuat kemampuan Argo CD di cluster Amazon EKS Anda.

## Prasyarat
<a name="_prerequisites"></a>

Sebelum membuat kemampuan Argo CD, pastikan Anda memiliki:
+ Cluster Amazon EKS yang sudah ada yang menjalankan versi Kubernetes yang didukung (semua versi dalam dukungan standar dan diperpanjang didukung)
+  ** AWS Pusat Identitas dikonfigurasi** - Diperlukan untuk otentikasi CD Argo (pengguna lokal tidak didukung)
+ Peran Kemampuan IAM dengan izin untuk Argo CD
+ Izin IAM yang memadai untuk membuat sumber daya kemampuan di kluster EKS
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda
+ (Opsional) Argo CD CLI diinstal untuk manajemen cluster dan repositori yang lebih mudah
+ (Untuk CLI/Eksctl) Alat CLI yang sesuai diinstal dan dikonfigurasi

Untuk petunjuk tentang cara membuat Peran Kemampuan IAM, lihat[Peran IAM kemampuan Amazon EKS](capability-role.md). Untuk penyiapan Pusat Identitas, lihat [Memulai dengan Pusat AWS Identitas](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**penting**  
Peran Kemampuan IAM yang Anda berikan menentukan AWS sumber daya yang dapat diakses Argo CD. Ini termasuk akses repositori Git via CodeConnections dan rahasia di Secrets Manager. Untuk panduan tentang membuat peran yang sesuai dengan izin hak istimewa paling sedikit, lihat dan. [Peran IAM kemampuan Amazon EKS](capability-role.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Pilih alat Anda
<a name="_choose_your_tool"></a>

Anda dapat membuat kemampuan Argo CD menggunakan, AWS CLI Konsol Manajemen AWS, atau eksctl:
+  [Buat kemampuan Argo CD menggunakan Konsol](argocd-create-console.md)- Gunakan Konsol untuk pengalaman terpandu
+  [Buat kemampuan Argo CD menggunakan CLI AWS](argocd-create-cli.md)- Gunakan AWS CLI untuk scripting dan otomatisasi
+  [Buat kemampuan Argo CD menggunakan eksctl](argocd-create-eksctl.md)- Gunakan eksctl untuk pengalaman asli Kubernetes

## Apa yang terjadi ketika Anda membuat kemampuan Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Saat Anda membuat kemampuan Argo CD:

1. EKS menciptakan layanan kemampuan Argo CD di bidang AWS kontrol

1. Definisi Sumber Daya Kustom (CRDs) diinstal di klaster Anda

1. Entri akses dibuat secara otomatis untuk Peran Kemampuan IAM Anda dengan kebijakan entri akses khusus kemampuan yang memberikan izin Kubernetes dasar (lihat) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

1. Argo CD mulai menonton sumber daya kustomnya (Aplikasi, ApplicationSets, AppProjects)

1. Status kemampuan berubah dari `CREATING` menjadi `ACTIVE` 

1. Argo CD UI dapat diakses melalui URL-nya

Setelah aktif, Anda dapat membuat Aplikasi Argo CD di cluster Anda untuk menyebarkan dari sumber deklaratif Anda.

**catatan**  
Entri akses yang dibuat secara otomatis tidak memberikan izin untuk menyebarkan aplikasi ke cluster. Untuk menerapkan aplikasi, Anda harus mengonfigurasi izin Kubernetes RBAC tambahan untuk setiap kluster target. Lihat [Daftarkan cluster target](argocd-register-clusters.md) detail tentang mendaftarkan kluster dan mengonfigurasi akses.

## Langkah selanjutnya
<a name="_next_steps"></a>

Setelah membuat kemampuan Argo CD:
+  [Konsep Argo CD](argocd-concepts.md)- Pelajari tentang GitOps prinsip, kebijakan sinkronisasi, dan pola multi-cluster
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Konfigurasikan akses repositori, daftarkan cluster target, dan buat Aplikasi
+  [Pertimbangan Argo CD](argocd-considerations.md)- Jelajahi pola arsitektur multi-cluster dan konfigurasi lanjutan

# Buat kemampuan Argo CD menggunakan Konsol
<a name="argocd-create-console"></a>

Topik ini menjelaskan cara membuat kemampuan Argo CD menggunakan file. Konsol Manajemen AWS

## Prasyarat
<a name="_prerequisites"></a>
+  ** AWS Pusat Identitas dikonfigurasi** - Argo CD memerlukan Pusat AWS Identitas untuk otentikasi. Pengguna lokal tidak didukung. Jika Anda belum menyiapkan Pusat AWS Identitas, lihat [Memulai dengan Pusat AWS Identitas](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) untuk membuat instance Pusat Identitas, dan [Menambahkan pengguna](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) dan [Menambahkan grup](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) untuk membuat pengguna dan grup untuk akses CD Argo.

## Buat kemampuan Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Di navigasi kiri, pilih **Argo CD**.

1. Pilih **Buat kemampuan CD Argo**.

1. Untuk **Peran Kemampuan IAM**:
   + Jika Anda sudah memiliki Peran Kemampuan IAM, pilih dari dropdown
   + Jika Anda perlu membuat peran, pilih **Buat peran CD Argo** 

     Ini membuka konsol IAM di tab baru dengan kebijakan kepercayaan yang telah diisi sebelumnya dan akses baca penuh ke Secrets Manager. Tidak ada izin lain yang ditambahkan secara default, tetapi Anda dapat menambahkannya jika diperlukan. Jika Anda berencana untuk menggunakan CodeCommit repositori atau AWS layanan lain, tambahkan izin yang sesuai sebelum membuat peran.

     Setelah membuat peran, kembali ke konsol EKS dan peran akan dipilih secara otomatis.
**catatan**  
Jika Anda berencana untuk menggunakan integrasi opsional dengan AWS Secrets Manager atau AWS CodeConnections, Anda harus menambahkan izin ke peran tersebut. Untuk contoh kebijakan IAM dan panduan konfigurasi, lihat [Kelola rahasia aplikasi dengan AWS Secrets Manager](integration-secrets-manager.md) dan[Connect ke repositori Git dengan AWS CodeConnections](integration-codeconnections.md).

1. Konfigurasikan integrasi Pusat AWS Identitas:

   1. Pilih **Aktifkan integrasi Pusat AWS Identitas**.

   1. Pilih instans Pusat Identitas Anda dari dropdown.

   1. Konfigurasikan pemetaan peran untuk RBAC dengan menetapkan pengguna atau grup ke peran Argo CD (ADMIN, EDITOR, atau VIEWER)

1. Pilih **Buat**.

Proses pembuatan kapabilitas dimulai.

## Verifikasi kemampuan aktif
<a name="_verify_the_capability_is_active"></a>

1. Pada tab **Capabilities**, lihat status kemampuan Argo CD.

1. Tunggu status berubah dari `CREATING` ke`ACTIVE`.

1. Setelah aktif, kemampuan siap digunakan.

Untuk informasi tentang status kemampuan dan pemecahan masalah, lihat. [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)

## Akses UI CD Argo
<a name="_access_the_argo_cd_ui"></a>

Setelah kemampuan aktif, Anda dapat mengakses Argo CD UI:

1. Pada halaman kemampuan Argo CD, pilih **Open Argo CD UI**.

1. Argo CD UI terbuka di tab browser baru.

1. Anda sekarang dapat membuat Aplikasi dan mengelola penerapan melalui UI.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Konfigurasikan repositori, daftarkan cluster, dan buat Aplikasi
+  [Pertimbangan Argo CD](argocd-considerations.md)- Arsitektur multi-cluster dan konfigurasi lanjutan
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan Argo CD Anda

# Buat kemampuan Argo CD menggunakan CLI AWS
<a name="argocd-create-cli"></a>

Topik ini menjelaskan cara membuat kemampuan Argo CD menggunakan AWS CLI.

## Prasyarat
<a name="_prerequisites"></a>
+  ** AWS CLI** — Versi `2.12.3` atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`aws --version`. Untuk informasi selengkapnya, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) di Panduan Pengguna Antarmuka Baris AWS Perintah.
+  **`kubectl`**— Alat baris perintah untuk bekerja dengan cluster Kubernetes. Untuk informasi selengkapnya, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).
+  ** AWS Pusat Identitas dikonfigurasi** - Argo CD memerlukan Pusat AWS Identitas untuk otentikasi. Pengguna lokal tidak didukung. Jika Anda belum menyiapkan Pusat AWS Identitas, lihat [Memulai dengan Pusat AWS Identitas](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) untuk membuat instance Pusat Identitas, dan [Menambahkan pengguna](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) dan [Menambahkan grup](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) untuk membuat pengguna dan grup untuk akses CD Argo.

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**catatan**  
Jika Anda berencana untuk menggunakan integrasi opsional dengan AWS Secrets Manager atau AWS CodeConnections, Anda harus menambahkan izin ke peran tersebut. Untuk contoh kebijakan IAM dan panduan konfigurasi, lihat [Kelola rahasia aplikasi dengan AWS Secrets Manager](integration-secrets-manager.md) dan[Connect ke repositori Git dengan AWS CodeConnections](integration-codeconnections.md).

## Langkah 2: Buat kemampuan Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Buat sumber daya kemampuan Argo CD di cluster Anda.

Pertama, atur variabel lingkungan untuk konfigurasi Pusat Identitas Anda:

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

Buat kemampuan dengan integrasi Pusat Identitas. Ganti *region-code* dengan AWS Wilayah tempat klaster Anda berada dan *my-cluster* dengan nama cluster Anda dan *idc-region-code* dengan kode wilayah tempat Pusat Identitas IAM Anda telah dikonfigurasi:

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif karena EKS menciptakan infrastruktur dan komponen kemampuan yang diperlukan. EKS akan menginstal Definisi Sumber Daya Kustom Kubernetes yang terkait dengan kemampuan ini di cluster Anda saat sedang dibuat.

**catatan**  
Jika Anda menerima kesalahan bahwa klaster tidak ada atau Anda tidak memiliki izin, verifikasi:  
Nama klaster sudah benar
 AWS CLI Anda dikonfigurasi untuk wilayah yang benar
Anda memiliki izin IAM yang diperlukan

## Langkah 3: Verifikasi kemampuan aktif
<a name="_step_3_verify_the_capability_is_active"></a>

Tunggu kemampuan untuk menjadi aktif. Ganti *region-code* dengan AWS Wilayah tempat klaster Anda berada dan *my-cluster* dengan nama cluster Anda.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.status' \
  --output text
```

Kemampuan siap ketika status ditampilkan`ACTIVE`. Jangan melanjutkan ke langkah berikutnya sampai statusnya`ACTIVE`.

Anda juga dapat melihat detail kemampuan lengkap:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd
```

## Langkah 4: Verifikasi sumber daya kustom tersedia
<a name="_step_4_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya kustom Argo CD tersedia di cluster Anda:

```
kubectl api-resources | grep argoproj.io
```

Anda harus melihat `Application` dan jenis `ApplicationSet` sumber daya terdaftar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Konfigurasikan repositori, daftarkan cluster, dan buat Aplikasi
+  [Pertimbangan Argo CD](argocd-considerations.md)- Arsitektur multi-cluster dan konfigurasi lanjutan
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan Argo CD Anda

# Buat kemampuan Argo CD menggunakan eksctl
<a name="argocd-create-eksctl"></a>

Topik ini menjelaskan cara membuat kemampuan Argo CD menggunakan eksctl.

**catatan**  
Langkah-langkah berikut memerlukan versi `0.220.0` eksctl atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`eksctl version`.

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**catatan**  
Untuk pengaturan dasar ini, tidak diperlukan kebijakan IAM tambahan. Jika Anda berencana menggunakan Secrets Manager untuk kredenal repositori atau CodeConnections, Anda harus menambahkan izin ke peran tersebut. Untuk contoh kebijakan IAM dan panduan konfigurasi, lihat [Kelola rahasia aplikasi dengan AWS Secrets Manager](integration-secrets-manager.md) dan[Connect ke repositori Git dengan AWS CodeConnections](integration-codeconnections.md).

## Langkah 2: Dapatkan konfigurasi Pusat AWS Identitas Anda
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Dapatkan ARN dan ID pengguna instance Identity Center Anda untuk konfigurasi RBAC:

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

Perhatikan nilai-nilai ini - Anda akan membutuhkannya di langkah berikutnya.

## Langkah 3: Buat file konfigurasi eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Buat file dengan nama `argocd-capability.yaml` dengan konten berikut ini. Ganti nilai placeholder dengan nama cluster Anda, wilayah cluster, ARN peran IAM, ARN instance Identity Center, wilayah Pusat Identitas, dan ID pengguna:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**catatan**  
Anda dapat menambahkan beberapa pengguna atau grup ke pemetaan RBAC. Untuk grup, gunakan `type: SSO_GROUP` dan berikan ID grup. Peran yang tersedia adalah `ADMIN``EDITOR`,, dan`VIEWER`.

## Langkah 4: Buat kemampuan Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Terapkan file konfigurasi:

```
eksctl create capability -f argocd-capability.yaml
```

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif.

## Langkah 5: Verifikasi kemampuan aktif
<a name="_step_5_verify_the_capability_is_active"></a>

Periksa status kemampuan. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-argocd
```

Kemampuan siap ketika status ditampilkan`ACTIVE`.

## Langkah 6: Verifikasi sumber daya kustom tersedia
<a name="_step_6_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya kustom Argo CD tersedia di cluster Anda:

```
kubectl api-resources | grep argoproj.io
```

Anda harus melihat `Application` dan jenis `ApplicationSet` sumber daya terdaftar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Pelajari cara membuat dan mengelola Aplikasi Argo CD
+  [Pertimbangan Argo CD](argocd-considerations.md)- Konfigurasikan akses SSO dan multi-cluster
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan Argo CD Anda

# Konsep Argo CD
<a name="argocd-concepts"></a>

Argo CD mengimplementasikan GitOps dengan memperlakukan Git sebagai satu-satunya sumber kebenaran untuk penerapan aplikasi Anda. Topik ini berjalan melalui contoh praktis, kemudian menjelaskan konsep inti yang perlu Anda pahami ketika bekerja dengan Kemampuan EKS untuk Argo CD.

## Memulai dengan Argo CD
<a name="_getting_started_with_argo_cd"></a>

Setelah membuat kemampuan Argo CD (lihat[Membuat kemampuan Argo CD](create-argocd-capability.md)), Anda dapat mulai menerapkan aplikasi. Contoh ini berjalan melalui pendaftaran cluster dan membuat Aplikasi.

### Langkah 1: Mengatur
<a name="_step_1_set_up"></a>

 **Daftarkan cluster Anda** (wajib)

Daftarkan cluster tempat Anda ingin menyebarkan aplikasi. Untuk contoh ini, kami akan mendaftarkan cluster yang sama di mana Argo CD berjalan (Anda dapat menggunakan nama `in-cluster` untuk kompatibilitas dengan sebagian besar contoh Argo CD):

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**catatan**  
Untuk informasi tentang mengonfigurasi CLI CD Argo agar berfungsi dengan kemampuan Argo CD di EKS, lihat. [Menggunakan Argo CD CLI dengan kemampuan terkelola](argocd-comparison.md#argocd-cli-configuration)

Atau, daftarkan klaster menggunakan Kubernetes Secret (lihat [Daftarkan cluster target](argocd-register-clusters.md) detailnya).

 **Konfigurasikan akses repositori (opsional**)

Contoh ini menggunakan GitHub repositori publik, jadi tidak diperlukan konfigurasi repositori. Untuk repositori pribadi, konfigurasikan akses menggunakan AWS Secrets Manager, CodeConnections, atau Kubernetes Secrets (lihat detailnya). [Konfigurasikan akses repositori](argocd-configure-repositories.md)

Untuk AWS layanan (ECR untuk bagan Helm,, dan CodeCommit) CodeConnections, Anda dapat mereferensikannya secara langsung di sumber daya Aplikasi tanpa membuat Repositori. Peran Kemampuan harus memiliki izin IAM yang diperlukan. Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail.

### Langkah 2: Buat Aplikasi
<a name="_step_2_create_an_application"></a>

Buat manifes Aplikasi ini di`my-app.yaml`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

Terapkan Aplikasi:

```
kubectl apply -f my-app.yaml
```

Setelah menerapkan Aplikasi ini, Argo CD: 1. Menyinkronkan aplikasi dari Git ke klaster Anda (penerapan awal) 2. Memonitor repositori Git untuk perubahan 3. Secara otomatis menyinkronkan perubahan berikutnya ke cluster 4 Anda. Mendeteksi dan mengoreksi penyimpangan apa pun dari keadaan yang diinginkan 5. Menyediakan status kesehatan dan riwayat sinkronisasi di UI

Lihat status aplikasi:

```
kubectl get application guestbook -n argocd
```

Anda juga dapat melihat aplikasi menggunakan Argo CD CLI atau Argo CD UI (dapat diakses dari konsol EKS di bawah tab Capabilities cluster Anda).

**catatan**  
Saat menggunakan Argo CD CLI dengan kemampuan terkelola, tentukan aplikasi dengan awalan namespace:. `argocd app get argocd/guestbook`

**catatan**  
Gunakan nama cluster di `destination.name` (nama yang Anda gunakan saat mendaftarkan cluster). Kemampuan terkelola tidak mendukung default lokal dalam cluster (`kubernetes.default.svc`).

## Konsep inti
<a name="_core_concepts"></a>

### GitOps prinsip dan jenis sumber
<a name="_gitops_principles_and_source_types"></a>

Argo CD mengimplementasikan GitOps, di mana sumber aplikasi Anda adalah satu-satunya sumber kebenaran untuk penerapan:
+  **Deklaratif** - Status yang diinginkan dideklarasikan menggunakan manifes YAMAL, bagan Helm, atau overlay Kustomize
+  **Berversi** - Setiap perubahan dilacak dengan jejak audit lengkap
+  **Otomatis** - Argo CD terus memantau sumber dan secara otomatis menyinkronkan perubahan
+  **Penyembuhan diri** - Mendeteksi dan mengoreksi penyimpangan antara keadaan cluster yang diinginkan dan aktual

 **Jenis sumber yang didukung**:
+  **Repositori** Git - GitHub, GitLab, Bitbucket, CodeCommit (HTTPS, SSH, atau) CodeConnections
+  Pendaftaran **Helm - pendaftar** HTTP (seperti`https://aws.github.io/eks-charts`) dan pendaftar OCI (seperti) `public.ecr.aws`
+  Gambar **OCI - Gambar** kontainer yang berisi manifes atau bagan Helm (seperti) `oci://registry-1.docker.io/user/my-app`

Fleksibilitas ini memungkinkan organisasi untuk memilih sumber yang memenuhi persyaratan keamanan dan kepatuhan mereka. Misalnya, organisasi yang membatasi akses Git dari cluster dapat menggunakan ECR untuk bagan Helm atau gambar OCI.

Untuk informasi selengkapnya, lihat [Sumber Aplikasi](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) dalam dokumentasi Argo CD.

### Sinkronisasi dan rekonsiliasi
<a name="_sync_and_reconciliation"></a>

Argo CD terus memantau sumber dan cluster Anda untuk mendeteksi dan memperbaiki perbedaan:

1. Sumber jajak pendapat untuk perubahan (default: setiap 6 menit)

1. Membandingkan status yang diinginkan dengan status cluster

1. Menandai aplikasi sebagai `Synced` atau `OutOfSync` 

1. Menyinkronkan perubahan secara otomatis (jika dikonfigurasi) atau menunggu persetujuan manual

1. Memantau kesehatan sumber daya setelah sinkronisasi

 **Gelombang sinkronisasi** mengontrol urutan pembuatan sumber daya menggunakan anotasi:

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

Sumber daya diterapkan dalam urutan gelombang (angka yang lebih rendah terlebih dahulu, termasuk angka negatif seperti`-1`). Gelombang `0` adalah default jika tidak ditentukan. Hal ini memungkinkan Anda untuk membuat dependensi seperti namespaces (wave`-1`) sebelum deployment (wave) sebelum services (wave`0`). `1`

 **Penyembuhan diri** secara otomatis mengembalikan perubahan manual:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**catatan**  
Kemampuan terkelola menggunakan pelacakan sumber daya berbasis anotasi (bukan berbasis label) untuk kompatibilitas yang lebih baik dengan konvensi Kubernetes dan alat lainnya.

Untuk informasi rinci tentang fase sinkronisasi, kait, dan pola lanjutan, lihat dokumentasi [sinkronisasi CD Argo](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/).

### Aplikasi kesehatan
<a name="_application_health"></a>

Argo CD memantau kesehatan semua sumber daya dalam aplikasi Anda:

 **Status Kesehatan**: \$1 **Sehat** - Semua sumber daya berjalan seperti yang diharapkan \$1 **Kemajuan** - Sumber daya sedang dibuat atau diperbarui \$1 **Terdegradasi - Beberapa sumber daya tidak sehat (pod mogok, pekerjaan gagal) \$1 **Ditangguhkan** - Aplikasi sengaja dijeda \$1 **Hilang** - Sumber daya yang didefinisikan dalam Git** tidak ada di klaster

Argo CD memiliki pemeriksaan kesehatan bawaan untuk sumber daya Kubernetes umum (Deployment,, Jobs StatefulSets, dll.) dan mendukung pemeriksaan kesehatan khusus untuk. CRDs

Kesehatan aplikasi ditentukan oleh semua sumber dayanya - jika ada sumber daya`Degraded`, aplikasinya`Degraded`.

Untuk informasi lebih lanjut, lihat [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) dalam dokumentasi Argo CD.

### Pola multi-cluster
<a name="_multi_cluster_patterns"></a>

Argo CD mendukung dua pola penyebaran utama:

 **H ub-and-spoke** - Jalankan Argo CD pada cluster manajemen khusus yang menyebarkan ke beberapa cluster beban kerja: \$1 Kontrol dan visibilitas terpusat \$1 Kebijakan yang konsisten di semua cluster \$1 Satu instance CD Argo untuk dikelola \$1 Pemisahan yang jelas antara bidang kontrol dan beban kerja

 **Per-cluster** - Jalankan Argo CD di setiap cluster, hanya mengelola aplikasi cluster itu: \$1 Pemisahan cluster (satu kegagalan tidak memengaruhi yang lain) \$1 Jaringan yang lebih sederhana (tidak ada komunikasi lintas cluster) \$1 Pengaturan awal yang lebih mudah (tanpa registrasi cluster)

Pilih hub-and-spoke tim platform yang mengelola banyak cluster, atau per-cluster untuk tim independen atau ketika cluster harus sepenuhnya terisolasi.

Untuk konfigurasi multi-cluster yang mendetail, lihat[Pertimbangan Argo CD](argocd-considerations.md).

### Proyek
<a name="_projects"></a>

Proyek menyediakan pengelompokan logis dan kontrol akses untuk Aplikasi:
+  **Pembatasan sumber** - Batasi repositori Git mana yang dapat digunakan
+  **Pembatasan tujuan** - Batasi cluster dan ruang nama mana yang dapat ditargetkan
+  **Pembatasan sumber daya** - Batasi tipe sumber daya Kubernetes mana yang dapat digunakan
+  **Integrasi RBAC** - Memetakan proyek ke pengguna dan AWS grup Pusat Identitas IDs

Aplikasi milik satu proyek. Jika tidak ditentukan, mereka menggunakan `default` proyek, yang tidak memiliki batasan secara default. Untuk penggunaan produksi, edit `default` proyek untuk membatasi akses dan membuat proyek baru dengan batasan yang sesuai.

Untuk konfigurasi proyek dan pola RBAC, lihat. [Konfigurasikan izin Argo CD](argocd-permissions.md)

### Opsi sinkronisasi
<a name="_sync_options"></a>

Sempurnakan perilaku sinkronisasi dengan opsi umum:
+  `CreateNamespace=true`- Secara otomatis membuat namespace tujuan
+  `ServerSideApply=true`- Gunakan aplikasi sisi server untuk resolusi konflik yang lebih baik
+  `SkipDryRunOnMissingResource=true`- Lewati dry run saat CRDs belum ada (berguna untuk instance kro)

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

Untuk daftar lengkap opsi sinkronisasi, lihat [dokumentasi opsi sinkronisasi CD Argo](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konfigurasikan akses repositori](argocd-configure-repositories.md)- Konfigurasikan akses repositori Git
+  [Daftarkan cluster target](argocd-register-clusters.md)- Daftarkan cluster target untuk penyebaran
+  [Buat Aplikasi](argocd-create-application.md)- Buat Aplikasi pertama Anda
+  [Pertimbangan Argo CD](argocd-considerations.md)- Pola khusus EKS, integrasi Pusat Identitas, dan konfigurasi multi-cluster
+  [Dokumentasi CD Argo - Dokumentasi](https://argo-cd.readthedocs.io/en/stable/) CD Argo yang komprehensif termasuk kait sinkronisasi, pemeriksaan kesehatan, dan pola lanjutan

# Konfigurasikan izin Argo CD
<a name="argocd-permissions"></a>

Kemampuan terkelola Argo CD terintegrasi dengan AWS Identity Center untuk otentikasi dan menggunakan peran RBAC bawaan untuk otorisasi. Topik ini menjelaskan cara mengonfigurasi izin untuk pengguna dan tim.

## Cara kerja izin dengan Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

Kemampuan Argo CD menggunakan AWS Identity Center untuk otentikasi dan menyediakan tiga peran RBAC bawaan untuk otorisasi.

Saat pengguna mengakses Argo CD:

1. Mereka mengautentikasi menggunakan Pusat AWS Identitas (yang dapat berfederasi ke penyedia identitas perusahaan Anda)

1.  AWS Identity Center menyediakan informasi pengguna dan grup ke Argo CD

1. Argo CD memetakan pengguna dan grup ke peran RBAC berdasarkan konfigurasi Anda

1. Pengguna hanya melihat aplikasi dan sumber daya yang mereka miliki izin untuk diakses

## Peran RBAC bawaan
<a name="_built_in_rbac_roles"></a>

Kemampuan Argo CD menyediakan tiga peran bawaan yang Anda petakan ke pengguna dan grup Pusat AWS Identitas. Ini adalah **peran cakupan global** yang mengontrol akses ke sumber daya Argo CD seperti proyek, cluster, dan repositori.

**penting**  
Peran global mengontrol akses ke Argo CD itu sendiri, bukan ke sumber daya cakupan proyek seperti Aplikasi. Pengguna EDITOR dan VIEWER tidak dapat melihat atau mengelola Aplikasi secara default—mereka memerlukan peran proyek untuk mengakses sumber daya cakupan proyek. Lihat [Peran proyek dan akses cakupan proyek](#project-roles) detail tentang pemberian akses ke Aplikasi dan sumber daya cakupan proyek lainnya.

 **ADMIN** 

Akses penuh ke semua sumber daya dan pengaturan Argo CD:
+ Buat, perbarui, dan hapus Aplikasi dan ApplicationSets dalam proyek apa pun
+ Kelola konfigurasi Argo CD
+ Mendaftarkan dan mengelola cluster target penyebaran
+ Konfigurasikan akses repositori
+ Membuat dan mengelola proyek
+ Lihat semua status dan riwayat aplikasi
+ Daftar dan akses semua cluster dan repositori

 **PENYUNTING** 

Dapat memperbarui proyek dan mengonfigurasi peran proyek, tetapi tidak dapat mengubah pengaturan CD Argo global:
+ Perbarui proyek yang ada (tidak dapat membuat atau menghapus proyek)
+ Konfigurasikan peran dan izin proyek
+ Lihat kunci dan sertifikat GPG
+ Tidak dapat mengubah konfigurasi CD Argo global
+ Tidak dapat mengelola cluster atau repositori secara langsung
+ Tidak dapat melihat atau mengelola Aplikasi tanpa peran proyek

 **PENAMPIL** 

Akses hanya-baca ke sumber daya Argo CD:
+ Lihat konfigurasi proyek
+ Buat daftar semua proyek (termasuk proyek yang tidak ditetapkan oleh pengguna)
+ Lihat kunci dan sertifikat GPG
+ Tidak dapat mencantumkan cluster atau repositori
+ Tidak dapat membuat perubahan apa pun
+ Tidak dapat melihat atau mengelola Aplikasi tanpa peran proyek

**catatan**  
Untuk memberikan akses kepada pengguna EDITOR atau VIEWER ke Aplikasi, ADMIN atau EDITOR harus membuat peran proyek yang memetakan grup Pusat Identitas ke izin tertentu dalam proyek.

## Peran proyek dan akses cakupan proyek
<a name="project-roles"></a>

Peran global (ADMIN, EDITOR, VIEWER) mengontrol akses ke Argo CD itu sendiri. Peran proyek mengontrol akses ke sumber daya dan kemampuan dalam proyek tertentu, termasuk:
+  **Sumber Daya**: Aplikasi, ApplicationSets, kredensi repositori, kredensi cluster
+  **Kemampuan**: Akses log, akses exec ke pod aplikasi

 **Memahami model izin dua tingkat**:
+  **Cakupan global**: Peran bawaan menentukan apa yang dapat dilakukan pengguna dengan proyek, cluster, repositori, dan pengaturan Argo CD
+  **Ruang lingkup proyek**: Peran proyek menentukan apa yang dapat dilakukan pengguna dengan sumber daya dan kemampuan dalam proyek tertentu

Ini berarti:
+ Pengguna ADMIN dapat mengakses semua sumber daya dan kemampuan proyek tanpa konfigurasi tambahan
+ Pengguna EDITOR dan VIEWER harus diberikan peran proyek untuk mengakses sumber daya dan kemampuan proyek
+ Pengguna EDITOR dapat membuat peran proyek untuk memberikan akses kepada diri mereka sendiri dan orang lain dalam proyek yang dapat mereka perbarui

 **Contoh alur kerja**:

1. ADMIN memetakan grup Pusat Identitas ke peran EDITOR secara global

1. Admin membuat proyek untuk tim

1. EDITOR mengonfigurasi peran proyek dalam proyek tersebut untuk memberikan anggota tim akses ke sumber daya cakupan proyek

1. Anggota tim (yang mungkin memiliki peran global VIEWER) sekarang dapat melihat dan mengelola Aplikasi dalam proyek tersebut berdasarkan izin peran proyek mereka

Untuk detail tentang mengonfigurasi peran proyek, lihat[Kontrol akses berbasis proyek](#_project_based_access_control).

## Konfigurasikan pemetaan peran
<a name="_configure_role_mappings"></a>

Peta pengguna dan grup Pusat AWS Identitas ke peran CD Argo saat membuat atau memperbarui kemampuan.

 **Contoh pemetaan peran**:

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["AdminGroup", "alice@example.com"],
    "EDITOR": ["DeveloperGroup", "DevOpsTeam"],
    "VIEWER": ["ReadOnlyGroup", "bob@example.com"]
  }
}
```

**catatan**  
Nama peran peka huruf besar/kecil dan harus huruf besar (ADMIN, EDITOR, VIEWER).

**penting**  
Integrasi Kemampuan EKS dengan AWS Identity Center mendukung hingga 1.000 identitas per kemampuan Argo CD. Identitas dapat berupa pengguna atau grup.

 **Perbarui pemetaan peran**:

```
aws eks update-capability \
  --region us-east-1 \
  --cluster-name cluster \
  --capability-name capname \
  --endpoint "https://eks.ap-northeast-2.amazonaws.com" \
  --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \
  --configuration '{
    "argoCd": {
      "rbacRoleMappings": {
        "addOrUpdateRoleMappings": [
          {
            "role": "ADMIN",
            "identities": [
              { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" }
            ]
          }
        ]
      }
    }
  }'
```

## Penggunaan akun admin
<a name="_admin_account_usage"></a>

Akun admin dirancang untuk penyiapan awal dan tugas administratif seperti mendaftarkan cluster dan mengkonfigurasi repositori.

 **Kapan akun admin sesuai**:
+ Pengaturan dan konfigurasi kemampuan awal
+ Pengembangan solo atau demonstrasi cepat
+ Tugas administratif (pendaftaran cluster, konfigurasi repositori, pembuatan proyek)

 **Praktik terbaik untuk akun admin**:
+ Jangan komit token akun ke kontrol versi
+ Putar token segera jika terpapar
+ Batasi penggunaan token akun untuk pengaturan dan tugas administratif
+ Atur waktu kedaluwarsa pendek (maksimum 12 jam)
+ Hanya 5 token akun yang dapat dibuat pada waktu tertentu

 **Kapan menggunakan akses berbasis proyek** sebagai gantinya:
+ Lingkungan pengembangan bersama dengan banyak pengguna
+ Lingkungan apa pun yang menyerupai produksi
+ Bila Anda membutuhkan jejak audit tentang siapa yang melakukan tindakan
+ Ketika Anda perlu menegakkan pembatasan sumber daya atau batas akses

Untuk lingkungan produksi dan skenario multi-pengguna, gunakan kontrol akses berbasis proyek dengan peran RBAC khusus yang dipetakan ke grup Pusat Identitas. AWS 

## Kontrol akses berbasis proyek
<a name="_project_based_access_control"></a>

Gunakan Argo CD Projects (AppProject) untuk menyediakan kontrol akses halus dan isolasi sumber daya untuk tim.

**penting**  
Sebelum menetapkan pengguna atau grup ke peran khusus proyek, Anda harus terlebih dahulu memetakannya ke peran CD Argo global (ADMIN, EDITOR, atau VIEWER) dalam konfigurasi kemampuan. Pengguna tidak dapat mengakses Argo CD tanpa pemetaan peran global, meskipun mereka ditugaskan ke peran proyek.  
Pertimbangkan untuk memetakan pengguna ke peran VIEWER secara global, lalu berikan izin tambahan melalui peran khusus proyek. Ini memberikan akses dasar sambil memungkinkan kontrol berbutir halus di tingkat proyek.

Proyek menyediakan:
+  **Pembatasan sumber**: Batasi repositori Git mana yang dapat digunakan
+  **Pembatasan tujuan**: Batasi cluster dan ruang nama mana yang dapat ditargetkan
+  **Pembatasan sumber daya**: Batasi tipe sumber daya Kubernetes mana yang dapat digunakan
+  **Integrasi RBAC**: Memetakan proyek ke grup Pusat AWS Identitas atau peran CD Argo

 **Contoh proyek untuk isolasi tim**:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Team A applications

  # Required: Specify which namespaces this project watches for Applications
  sourceNamespaces:
  - argocd

  # Source restrictions
  sourceRepos:
  - https://github.com/myorg/team-a-apps

  # Destination restrictions
  destinations:
  - namespace: team-a-*
    server: arn:aws:eks:us-west-2:111122223333:cluster/production

  # Resource restrictions
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace
  namespaceResourceWhitelist:
  - group: 'apps'
    kind: Deployment
  - group: ''
    kind: Service
  - group: ''
    kind: ConfigMap
```

### Ruang nama sumber
<a name="_source_namespaces"></a>

Saat menggunakan kemampuan CD EKS Argo, `spec.sourceNamespaces` bidang ini diperlukan dalam AppProject definisi. Bidang ini menentukan namespace mana yang dapat berisi Aplikasi atau referensi proyek ApplicationSets ini.

**penting**  
Kemampuan EKS Argo CD hanya mendukung satu namespace untuk Aplikasi dan ApplicationSets —namespace yang Anda tentukan saat membuat kemampuan (biasanya). `argocd` Ini berbeda dari CD Argo open source yang mendukung beberapa ruang nama.

 **AppProject konfigurasi** 

Semua AppProjects harus menyertakan namespace yang dikonfigurasi kemampuan di: `sourceNamespaces`

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Specify the capability's configured namespace (configuration.argoCd.namespace)
  sourceNamespaces:
    - argocd  # Must match your capability's namespace configuration

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
```

**catatan**  
Jika Anda menghilangkan namespace kemampuan dari`sourceNamespaces`, Aplikasi atau ApplicationSets dalam namespace itu tidak dapat mereferensikan proyek ini, yang mengakibatkan kegagalan penerapan.

 **Tetapkan pengguna ke proyek**:

Peran proyek memberi pengguna EDITOR dan VIEWER akses ke sumber daya proyek (Aplikasi, ApplicationSets, repositori, dan kredensi cluster) dan kemampuan (log, exec). Tanpa peran proyek, pengguna ini tidak dapat mengakses sumber daya ini bahkan jika mereka memiliki akses peran global.

Pengguna ADMIN memiliki akses ke semua Aplikasi tanpa memerlukan peran proyek.

 **Contoh: Memberikan akses Aplikasi ke anggota tim** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  # ... project configuration ...

  sourceNamespaces:
  - argocd

  # Project roles grant Application-level access
  roles:
  - name: developer
    description: Team A developers - can manage Applications
    policies:
    - p, proj:team-a:developer, applications, *, team-a/*, allow
    - p, proj:team-a:developer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 686103e0-f051-7068-b225-e6392b959d9e  # Identity Center group ID

  - name: viewer
    description: Team A viewers - read-only Application access
    policies:
    - p, proj:team-a:viewer, applications, get, team-a/*, allow
    - p, proj:team-a:viewer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 786203e0-f051-7068-b225-e6392b959d9f  # Identity Center group ID
```

**catatan**  
Sertakan `clusters, get, *, allow` dalam peran proyek untuk memungkinkan pengguna melihat nama cluster di UI. Tanpa izin ini, cluster tujuan ditampilkan sebagai “tidak diketahui”.

 **Memahami kebijakan peran proyek**:

Format kebijakan adalah: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Kebijakan sumber daya**:
+  `applications, , team-a/, allow`- Akses penuh ke semua Aplikasi dalam tim-proyek
+  `applications, get, team-a/*, allow`- Akses hanya-baca ke Aplikasi
+  `applications, sync, team-a/*, allow`- Dapat menyinkronkan Aplikasi tetapi tidak membuat/menghapus
+  `applications, delete, team-a/*, allow`- Dapat menghapus Aplikasi (gunakan dengan hati-hati)
+  `applicationsets, , team-a/, allow`- Akses penuh ke ApplicationSets
+  `repositories, *, *, allow`- Akses ke kredensi repositori
+  `clusters, *, *, allow`- Akses ke kredensi cluster

 **Kebijakan kemampuan**:
+  `logs, , team-a/, allow`- Akses ke log aplikasi
+  `exec, , team-a/, allow`- Akses Exec ke pod aplikasi

**catatan**  
Pengguna EDITOR dapat membuat peran proyek untuk memberikan izin kepada diri mereka sendiri dan orang lain dalam proyek yang dapat mereka perbarui. Hal ini memungkinkan lead tim untuk mengontrol akses ke sumber daya cakupan proyek untuk tim mereka tanpa memerlukan intervensi ADMIN.

**catatan**  
Gunakan grup Pusat Identitas IDs (bukan nama grup) di `groups` bidang. Anda juga dapat menggunakan pengguna Pusat Identitas IDs untuk akses pengguna individu. Temukan ini IDs di konsol Pusat AWS Identitas atau menggunakan AWS CLI.

## Pola izin umum
<a name="_common_permission_patterns"></a>

 **Pola 1: Tim admin dengan akses penuh** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam", "SRETeam"]
  }
}
```

Pengguna ADMIN dapat melihat dan mengelola semua sumber daya cakupan proyek tanpa konfigurasi tambahan.

 **Pola 2: Pemimpin tim mengelola proyek, akses pengembang melalui peran proyek** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

1. ADMIN membuat proyek untuk setiap tim

1. Pemimpin tim (EDITOR) mengonfigurasi peran proyek untuk memberikan pengembang mereka akses ke sumber daya proyek (Aplikasi, ApplicationSets, kredensi) dan kemampuan (log, eksekutif)

1. Pengembang (VIEWER) hanya dapat mengakses sumber daya dan kemampuan yang diizinkan oleh peran proyek mereka

 **Pola 3: Akses berbasis tim dengan peran proyek** 

1. ADMIN membuat proyek dan tim peta mengarah ke peran EDITOR secara global

1. Pemimpin tim (EDITOR) menetapkan anggota tim untuk peran proyek dalam proyek mereka

1. Anggota tim hanya membutuhkan peran global VIEWER — peran proyek menyediakan akses ke sumber daya dan kemampuan proyek

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

## Praktik terbaik
<a name="_best_practices"></a>

 **Gunakan grup alih-alih pengguna individu**: Petakan grup Pusat AWS Identitas ke peran CD Argo daripada pengguna individu untuk pengelolaan yang lebih mudah.

 **Mulailah dengan hak istimewa paling sedikit**: Mulailah dengan akses VIEWER dan berikan EDITOR atau ADMIN sesuai kebutuhan.

 **Gunakan proyek untuk isolasi tim**: Buat terpisah AppProjects untuk tim atau lingkungan yang berbeda untuk menegakkan batasan.

 **Federasi Pusat Identitas Leverage**: Konfigurasikan Pusat AWS Identitas untuk berfederasi dengan penyedia identitas perusahaan Anda untuk manajemen pengguna terpusat.

 **Tinjauan akses reguler**: Tinjau pemetaan peran dan tugas proyek secara berkala untuk memastikan tingkat akses yang sesuai.

 **Batasi akses klaster**: Ingat bahwa Argo CD RBAC mengontrol akses ke sumber daya dan operasi Argo CD, tetapi tidak sesuai dengan Kubernetes RBAC. Pengguna dengan akses CD Argo dapat menyebarkan aplikasi ke cluster yang dapat diakses oleh Argo CD. Batasi cluster mana Argo CD dapat mengakses dan menggunakan batasan tujuan proyek untuk mengontrol di mana aplikasi dapat digunakan.

## AWS izin layanan
<a name="shared_aws_service_permissions"></a>

Untuk menggunakan AWS layanan secara langsung di sumber daya Aplikasi (tanpa membuat sumber daya Repositori), lampirkan izin IAM yang diperlukan ke Peran Kemampuan.

 **ECR untuk grafik Helm**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
```

 **CodeCommit repositori**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

 **CodeConnections (GitHub, GitLab, Bitbucket)**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeconnections:UseConnection"
      ],
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail tentang menggunakan integrasi ini.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Pelajari cara membuat aplikasi dan mengelola penerapan
+  [Konsep Argo CD](argocd-concepts.md)- Memahami konsep Argo CD termasuk Proyek
+  [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)- Tinjau praktik terbaik keamanan untuk kemampuan

# Bekerja dengan Argo CD
<a name="working-with-argocd"></a>

Dengan Argo CD, Anda mendefinisikan aplikasi di repositori Git dan Argo CD secara otomatis menyinkronkannya ke cluster Kubernetes Anda. Ini memungkinkan penerapan aplikasi deklaratif yang dikendalikan versi dengan deteksi drift otomatis.

## Prasyarat
<a name="_prerequisites"></a>

Sebelum bekerja dengan Argo CD, Anda perlu:
+ Cluster EKS dengan kemampuan Argo CD dibuat (lihat[Membuat kemampuan Argo CD](create-argocd-capability.md))
+ Repositori Git yang berisi manifes Kubernetes
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda

## Tugas umum
<a name="_common_tasks"></a>

Topik berikut memandu Anda melalui tugas-tugas CD Argo umum:

 **[Konfigurasikan akses repositori](argocd-configure-repositories.md)**- Konfigurasikan CD Argo untuk mengakses repositori Git Anda menggunakan AWS Secrets Manager, AWS CodeConnections, atau Kubernetes Secrets.

 **[Daftarkan cluster target](argocd-register-clusters.md)**- Daftarkan cluster target tempat Argo CD akan menyebarkan aplikasi.

 **[Bekerja dengan Proyek CD Argo](argocd-projects.md)**- Mengatur aplikasi dan menegakkan batasan keamanan menggunakan Proyek untuk lingkungan multi-penyewa.

 **[Buat Aplikasi](argocd-create-application.md)**- Buat Aplikasi yang menyebarkan dari repositori Git dengan kebijakan sinkronisasi otomatis atau manual.

 **[Gunakan ApplicationSets](argocd-applicationsets.md)**- Gunakan ApplicationSets untuk menyebarkan aplikasi di beberapa lingkungan atau cluster menggunakan template dan generator.

## Akses UI CD Argo
<a name="_access_the_argo_cd_ui"></a>

Akses UI CD Argo melalui konsol EKS:

1. Buka konsol Amazon EKS

1. Pilih klaster Anda

1. Pilih tab **Kemampuan**

1. Pilih **Argo CD** 

1. Pilih **Buka Argo CD UI** 

UI menyediakan topologi aplikasi visual, status sinkronisasi dan riwayat, kesehatan sumber daya dan peristiwa, kontrol sinkronisasi manual, dan manajemen aplikasi.

## Dokumentasi hulu
<a name="_upstream_documentation"></a>

Untuk informasi rinci tentang fitur Argo CD:
+  [Dokumentasi CD Argo](https://argo-cd.readthedocs.io/) - Panduan pengguna lengkap
+  [Spesifikasi Aplikasi - Referensi](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/) API Aplikasi Lengkap
+  [ApplicationSet Panduan](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/) - ApplicationSet pola dan contoh
+  [Argo CD GitHub](https://github.com/argoproj/argo-cd) - Kode sumber dan contoh

# Konfigurasikan akses repositori
<a name="argocd-configure-repositories"></a>

Sebelum menerapkan aplikasi, konfigurasikan Argo CD untuk mengakses repositori Git dan registrasi bagan Helm Anda. Argo CD mendukung beberapa metode otentikasi untuk GitHub, Bitbucket GitLab,, dan ECR. AWS CodeCommit AWS 

**catatan**  
Untuk integrasi AWS layanan langsung (bagan Helm ECR, CodeCommit repositori, dan CodeConnections), Anda dapat mereferensikannya secara langsung di sumber daya Aplikasi tanpa membuat konfigurasi Repositori. Peran Kemampuan harus memiliki izin IAM yang diperlukan. Lihat [Konfigurasikan izin Argo CD](argocd-permissions.md) untuk detail.

## Prasyarat
<a name="_prerequisites"></a>
+ Cluster EKS dengan kemampuan Argo CD dibuat
+ Repositori Git yang berisi manifes Kubernetes
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda

**catatan**  
 AWS CodeConnections dapat terhubung ke server Git yang berada di AWS Cloud atau lokal. Untuk informasi selengkapnya, lihat [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Metode otentikasi
<a name="_authentication_methods"></a>


| Metode | Kasus Penggunaan | Izin IAM Diperlukan | 
| --- | --- | --- | 
|   **Integrasi langsung dengan AWS layanan**   | 
|  CodeCommit  |  Integrasi langsung dengan AWS CodeCommit repositori Git. Tidak diperlukan konfigurasi Repositori.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Connect to GitHub, GitLab, atau Bitbucket dengan autentikasi terkelola. Membutuhkan pengaturan koneksi.  |   `codeconnections:UseConnection`   | 
|  Artefak ECR OCI  |  Integrasi langsung dengan AWS ECR untuk bagan Helm OCI dan gambar manifes. Tidak diperlukan konfigurasi Repositori.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Konfigurasi repositori dengan kredensional**   | 
|   AWS Secrets Manager (Nama Pengguna/Token)  |  Simpan token atau kata sandi akses pribadi. Mengaktifkan rotasi kredenal tanpa akses Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (Kunci SSH)  |  Gunakan otentikasi kunci SSH. Mengaktifkan rotasi kredenal tanpa akses Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (GitHub Aplikasi)  |  GitHub Otentikasi aplikasi dengan kunci pribadi. Mengaktifkan rotasi kredenal tanpa akses Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Rahasia Kubernetes  |  Metode CD Argo standar menggunakan rahasia in-cluster  |  Tidak ada (izin ditangani oleh EKS Access Entry dengan Kubernetes RBAC)  | 

## Akses langsung ke AWS layanan
<a name="direct_access_to_shared_aws_services"></a>

Untuk AWS layanan, Anda dapat mereferensikannya secara langsung di sumber daya Aplikasi tanpa membuat konfigurasi Repositori. Peran Kemampuan harus memiliki izin IAM yang diperlukan.

### CodeCommit repositori
<a name="_codecommit_repositories"></a>

 CodeCommit Repositori referensi langsung di Aplikasi:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Izin Peran Kemampuan yang Diperlukan:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

### CodeConnections
<a name="_codeconnections"></a>

Referensi GitHub, GitLab, atau repositori Bitbucket melalui. CodeConnections Format URL repositori berasal dari koneksi CodeConnections ARN.

Format URL repositori adalah:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Izin Peran Kemampuan yang Diperlukan:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codeconnections:UseConnection",
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

### Grafik ECR Helm
<a name="_ecr_helm_charts"></a>

ECR menyimpan bagan Helm sebagai artefak OCI. Argo CD mendukung dua cara untuk mereferensikannya:

 **Format helm** (direkomendasikan untuk bagan Helm):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-helm
  namespace: argocd
spec:
  source:
    repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
    helm:
      valueFiles:
        - values.yaml
```

Catatan: Jangan sertakan `oci://` awalan saat menggunakan format Helm. Gunakan `chart` bidang untuk menentukan nama bagan.

 **Format OCI** (untuk artefak OCI dengan manifes Kubernetes):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-oci
  namespace: argocd
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: artifact-version
    path: path-to-manifests
```

Catatan: Sertakan `oci://` awalan saat menggunakan format OCI. Gunakan `path` bidang sebagai ganti`chart`.

Izin Peran Kemampuan yang Diperlukan - lampirkan kebijakan terkelola:

```
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

Kebijakan ini mencakup izin ECR yang diperlukan:`ecr:GetAuthorizationToken`,`ecr:BatchGetImage`, dan. `ecr:GetDownloadUrlForLayer`

## Menggunakan AWS Secrets Manager
<a name="using_shared_aws_secrets_manager"></a>

Simpan kredensyal repositori di Secrets Manager dan referensikan mereka dalam konfigurasi Argo CD Repository. Menggunakan Secrets Manager memungkinkan rotasi kredenal otomatis tanpa memerlukan akses Kubernetes RBAC — kredensyal dapat diputar menggunakan izin IAM ke Secrets Manager, dan Argo CD secara otomatis membaca nilai yang diperbarui.

**catatan**  
Untuk penggunaan kembali kredensyal di beberapa repositori (misalnya, semua repositori di bawah GitHub organisasi), gunakan templat kredensyal repositori dengan. `argocd.argoproj.io/secret-type: repo-creds` Ini memberikan UX yang lebih baik daripada membuat rahasia repositori individu. Untuk informasi selengkapnya, lihat [Kredensial Repositori](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) dalam dokumentasi Argo CD.

### Otentikasi nama pengguna dan token
<a name="_username_and_token_authentication"></a>

Untuk repositori HTTPS dengan token atau kata sandi akses pribadi:

 **Buat rahasia di Secrets Manager**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo \
  --description "GitHub credentials for Argo CD" \
  --secret-string '{"username":"your-username","token":"your-personal-access-token"}'
```

 **Bidang sertifikat klien TLS opsional** (untuk server Git pribadi):

```
aws secretsmanager create-secret \
  --name argocd/my-private-repo \
  --secret-string '{
    "username":"your-username",
    "token":"your-token",
    "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t",
    "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t"
  }'
```

**catatan**  
`tlsClientCertKey`Nilai `tlsClientCertData` dan harus dikodekan base64.

 **Buat Rahasia Repositori yang mereferensikan Secrets Manager**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf
  project: default
```

### Otentikasi kunci SSH
<a name="_ssh_key_authentication"></a>

Untuk akses Git berbasis SSH, simpan kunci pribadi sebagai plaintext (bukan JSON):

 **Buat rahasia dengan kunci pribadi SSH**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo-ssh \
  --description "SSH key for Argo CD" \
  --secret-string "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----"
```

 **Buat Rahasia Repositori untuk SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
  project: default
```

### GitHub Otentikasi aplikasi
<a name="_github_app_authentication"></a>

Untuk otentikasi GitHub Aplikasi dengan kunci pribadi:

 **Buat rahasia dengan kredensyal GitHub Aplikasi**:

```
aws secretsmanager create-secret \
  --name argocd/github-app \
  --description "GitHub App credentials for Argo CD" \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678"
  }'
```

**catatan**  
`githubAppPrivateKeySecret`Nilai harus dikodekan base64.

 **Bidang opsional untuk GitHub Perusahaan**:

```
aws secretsmanager create-secret \
  --name argocd/github-enterprise-app \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678",
    "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3"
  }'
```

 **Buat Rahasia Repositori untuk GitHub Aplikasi**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-github-app
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf
  project: default
```

### Templat kredensi repositori
<a name="_repository_credential_templates"></a>

Untuk penggunaan kembali kredensyal di beberapa repositori (misalnya, semua repositori di bawah GitHub organisasi atau pengguna), gunakan templat kredensi repositori dengan. `argocd.argoproj.io/secret-type: repo-creds` Ini memberikan UX yang lebih baik daripada membuat rahasia repositori individual untuk setiap repositori.

 **Buat template kredensi repositori**:

```
apiVersion: v1
kind: Secret
metadata:
  name: github-org-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/your-org
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf
```

Template kredensyal ini berlaku untuk semua repositori yang cocok dengan awalan URL. `https://github.com/your-org` Anda kemudian dapat mereferensikan repositori apa pun di bawah organisasi ini di Aplikasi tanpa membuat rahasia tambahan.

Untuk informasi selengkapnya, lihat [Kredensial Repositori](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) dalam dokumentasi Argo CD.

**penting**  
Pastikan Peran Kemampuan IAM Anda memiliki kebijakan terkelola yang `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` dilampirkan, atau izin yang setara termasuk `secretsmanager:GetSecretValue` dan izin dekripsi KMS. Lihat [Pertimbangan Argo CD](argocd-considerations.md) konfigurasi kebijakan IAM.

## Menggunakan AWS CodeConnections
<a name="using_shared_aws_codeconnections"></a>

Untuk CodeConnections integrasi, lihat[Connect ke repositori Git dengan AWS CodeConnections](integration-codeconnections.md).

CodeConnections menyediakan otentikasi terkelola untuk GitHub, GitLab, dan Bitbucket tanpa menyimpan kredensyal.

## Menggunakan Rahasia Kubernetes
<a name="_using_kubernetes_secrets"></a>

Simpan kredensyal secara langsung di Kubernetes menggunakan metode CD Argo standar.

 **Untuk HTTPS dengan token akses pribadi**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  username: your-username
  password: your-personal-access-token
```

 **Untuk SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ... your private key ...
    -----END OPENSSH PRIVATE KEY-----
```

## CodeCommit repositori
<a name="_codecommit_repositories_2"></a>

Untuk AWS CodeCommit, berikan CodeCommit izin Peran Kemampuan IAM Anda ()`codecommit:GitPull`.

Konfigurasikan repositori:

```
apiVersion: v1
kind: Secret
metadata:
  name: codecommit-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo
  project: default
```

Untuk konfigurasi kebijakan IAM yang mendetail, lihat[Pertimbangan Argo CD](argocd-considerations.md).

## Verifikasi koneksi repositori
<a name="_verify_repository_connection"></a>

Periksa status koneksi melalui Argo CD UI di bawah Pengaturan → Repositori. UI menunjukkan status koneksi dan kesalahan otentikasi apa pun.

Rahasia Repositori tidak termasuk informasi status.

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Daftarkan cluster target](argocd-register-clusters.md)- Daftarkan cluster target untuk penerapan
+  [Buat Aplikasi](argocd-create-application.md)- Buat Aplikasi pertama Anda
+  [Pertimbangan Argo CD](argocd-considerations.md)- Izin IAM dan konfigurasi keamanan
+  [Repositori Pribadi - Referensi](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/) konfigurasi repositori hulu

# Daftarkan cluster target
<a name="argocd-register-clusters"></a>

Daftarkan cluster untuk mengaktifkan Argo CD untuk menyebarkan aplikasi ke mereka. Anda dapat mendaftarkan cluster yang sama di mana Argo CD berjalan (cluster lokal) atau cluster jarak jauh di akun atau wilayah yang berbeda. Setelah cluster terdaftar, itu akan tetap dalam keadaan koneksi Tidak Dikenal sampai Anda membuat aplikasi dalam cluster itu. Untuk membuat aplikasi Argo CD setelah cluster Anda terdaftar, lihat[Buat Aplikasi](argocd-create-application.md).

## Prasyarat
<a name="_prerequisites"></a>
+ Cluster EKS dengan kemampuan Argo CD dibuat
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda
+ Untuk cluster jarak jauh: izin IAM yang sesuai dan entri akses

## Daftarkan cluster lokal
<a name="_register_the_local_cluster"></a>

Untuk menyebarkan aplikasi ke cluster yang sama di mana Argo CD berjalan, daftarkan sebagai target penyebaran.

**penting**  
Kemampuan Argo CD tidak secara otomatis mendaftarkan cluster lokal. Anda harus mendaftarkannya secara eksplisit untuk menyebarkan aplikasi ke cluster yang sama. Anda dapat menggunakan nama cluster `in-cluster` untuk kompatibilitas dengan sebagian besar contoh Argo CD online.

**catatan**  
Entri Akses EKS secara otomatis dibuat untuk cluster lokal dengan Peran Kemampuan CD Argo, tetapi tidak ada izin RBAC Kubernetes yang diberikan secara default. Ini mengikuti prinsip hak istimewa terkecil — Anda harus secara eksplisit mengonfigurasi izin yang dibutuhkan Argo CD berdasarkan kasus penggunaan Anda. Misalnya, jika Anda hanya menggunakan klaster ini sebagai hub CD Argo untuk mengelola klaster jarak jauh, klaster ini tidak memerlukan izin penerapan lokal. Lihat bagian Persyaratan RBAC Entri Akses di bawah ini untuk opsi konfigurasi.

 **Menggunakan Argo CD CLI**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \
  --name local-cluster
```

 **Menggunakan Rahasia Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: local-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: local-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
  project: default
```

Terapkan konfigurasi:

```
kubectl apply -f local-cluster.yaml
```

**catatan**  
Gunakan ARN cluster EKS di `server` bidang, bukan URL server API Kubernetes. Kemampuan yang dikelola diperlukan ARNs untuk mengidentifikasi cluster. Default `kubernetes.default.svc` tidak didukung.

## Daftarkan cluster jarak jauh
<a name="_register_remote_clusters"></a>

Untuk menyebarkan ke cluster jarak jauh:

 **Langkah 1: Buat entri akses pada cluster jarak jauh** 

Ganti *region-code* dengan AWS Wilayah tempat cluster jarak jauh Anda berada, ganti *remote-cluster* dengan nama cluster jarak jauh Anda, dan ganti ARN dengan peran kemampuan Argo CD ARN Anda.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD
```

 **Langkah 2: Kaitkan kebijakan akses dengan izin Kubernetes RBAC** 

Entri Akses memerlukan izin Kubernetes RBAC untuk Argo CD untuk menyebarkan aplikasi. Untuk memulai dengan cepat, Anda dapat menggunakan`AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**penting**  
`AmazonEKSClusterAdminPolicy`Ini menyediakan akses cluster-admin penuh (setara dengan). `system:masters` Ini nyaman untuk memulai tetapi tidak boleh digunakan dalam produksi. Untuk lingkungan produksi, gunakan izin yang lebih ketat dengan mengaitkan Entri Akses dengan grup Kubernetes kustom dan membuat Peran atau binding yang sesuai. ClusterRole Lihat bagian penyiapan produksi di bawah ini untuk konfigurasi hak istimewa paling sedikit.

 **Langkah 3: Daftarkan cluster di Argo CD** 

 **Menggunakan Argo CD CLI**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \
  --name remote-cluster
```

 **Menggunakan Rahasia Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: remote-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: remote-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster
  project: default
```

Terapkan konfigurasi:

```
kubectl apply -f remote-cluster.yaml
```

## Cluster lintas akun
<a name="_cross_account_clusters"></a>

Untuk menyebarkan ke cluster di akun yang berbeda AWS :

1. Di akun target, buat Access Entry pada cluster EKS target menggunakan Argo CD IAM Capability Role ARN dari akun sumber sebagai prinsipal

1. Kaitkan kebijakan akses dengan izin Kubernetes RBAC yang sesuai

1. Daftarkan cluster di Argo CD menggunakan ARN cluster EKS nya

Tidak diperlukan pembuatan peran IAM tambahan atau konfigurasi kebijakan kepercayaan — Entri Akses EKS menangani akses lintas akun.

Format ARN cluster mencakup wilayah, sehingga penerapan lintas wilayah menggunakan proses yang sama dengan penerapan wilayah yang sama.

## Verifikasi pendaftaran klaster
<a name="_verify_cluster_registration"></a>

Lihat cluster terdaftar:

```
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
```

Atau periksa status cluster di Argo CD UI di bawah Pengaturan → Clusters.

## klaster privat
<a name="_private_clusters"></a>

Kemampuan Argo CD menyediakan akses transparan ke cluster EKS yang sepenuhnya pribadi tanpa memerlukan peering VPC atau konfigurasi jaringan khusus.

 AWS mengelola konektivitas antara kemampuan Argo CD dan cluster jarak jauh pribadi secara otomatis.

Cukup daftarkan cluster pribadi menggunakan ARN-nya — tidak diperlukan pengaturan jaringan tambahan.

## Persyaratan Akses Entri RBAC
<a name="_access_entry_rbac_requirements"></a>

Saat Anda membuat kemampuan CD Argo, Entri Akses EKS secara otomatis dibuat untuk Peran Kemampuan, tetapi tidak ada izin RBAC Kubernetes yang diberikan secara default. Desain yang disengaja ini mengikuti prinsip hak istimewa paling kecil—kasus penggunaan yang berbeda memerlukan izin yang berbeda.

Misalnya: \$1 Jika Anda menggunakan cluster hanya sebagai hub CD Argo untuk mengelola cluster jarak jauh, itu tidak memerlukan izin penerapan lokal \$1 Jika Anda menerapkan aplikasi secara lokal, perlu akses baca di seluruh cluster dan tulis akses ke ruang nama tertentu\$1 Jika Anda perlu membuat, itu memerlukan izin cluster-admin tambahan CRDs

Anda harus secara eksplisit mengonfigurasi izin yang dibutuhkan Argo CD berdasarkan kebutuhan Anda.

### Izin minimum untuk Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

Argo CD membutuhkan dua jenis izin untuk berfungsi tanpa kesalahan:

 **Izin baca (seluruh cluster)**: Argo CD harus dapat membaca semua jenis sumber daya dan Definisi Sumber Daya Kustom (CRDs) di seluruh cluster untuk:
+ Penemuan sumber daya dan pemeriksaan kesehatan
+ Mendeteksi penyimpangan antara keadaan yang diinginkan dan sebenarnya
+ Memvalidasi sumber daya sebelum penerapan

 **Izin tulis (khusus ruang nama)**: Argo CD perlu membuat, memperbarui, dan menghapus izin untuk sumber daya yang ditentukan dalam Aplikasi:
+ Menyebarkan beban kerja aplikasi (Deployment, Services, ConfigMaps dll.)
+ Terapkan Sumber Daya Kustom (CRDs khusus untuk aplikasi Anda)
+ Kelola siklus hidup aplikasi

### Pengaturan cepat
<a name="_quick_setup"></a>

Untuk memulai dengan cepat, pengujian, atau lingkungan pengembangan, gunakan`AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**penting**  
`AmazonEKSClusterAdminPolicy`Ini menyediakan akses cluster-admin penuh (setara dengan`system:masters`), termasuk kemampuan untuk membuat, memodifikasi sumber daya di seluruh cluster CRDs, dan menyebarkan ke namespace apa pun. Ini nyaman untuk pengembangan dan POCs tetapi tidak boleh digunakan dalam produksi. Untuk produksi, gunakan pengaturan hak istimewa paling sedikit di bawah ini.

### Pengaturan produksi dengan hak istimewa paling sedikit
<a name="_production_setup_with_least_privilege"></a>

Untuk lingkungan produksi, buat Kubernetes RBAC kustom yang memberikan:
+ Akses baca seluruh cluster ke semua sumber daya (untuk penemuan dan pemeriksaan kesehatan)
+ Akses tulis khusus ruang nama (untuk penerapan)

 **Langkah 1: Kaitkan Entri Akses dengan grup Kubernetes kustom** 

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
  --access-scope type=namespace,namespaces=app-namespace
```

 **Langkah 2: Buat ClusterRole untuk akses baca** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argocd-read-all
rules:
# Read access to all resources for discovery and health checks
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

 **Langkah 3: Buat Peran untuk akses tulis ke ruang nama aplikasi** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-deploy
  namespace: app-namespace
rules:
# Full access to deploy application resources
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
```

 **Langkah 4: Mengikat peran ke grup Kubernetes** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argocd-read-all
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: argocd-read-all
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argocd-deploy
  namespace: app-namespace
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: argocd-deploy
  apiGroup: rbac.authorization.k8s.io
```

**catatan**  
Format nama grup untuk Entri Akses `eks-access-entry:` diikuti oleh ARN utama. Ulangi RoleBinding untuk setiap namespace di mana Argo CD harus menyebarkan aplikasi.

**penting**  
Argo CD harus dapat membaca semua jenis sumber daya di seluruh cluster untuk pemeriksaan dan penemuan kesehatan, meskipun hanya diterapkan ke ruang nama tertentu. Tanpa akses baca di seluruh cluster, Argo CD akan menampilkan kesalahan saat memeriksa kesehatan aplikasi.

## Batasi akses klaster dengan Proyek
<a name="_restrict_cluster_access_with_projects"></a>

Gunakan Proyek untuk mengontrol kluster dan ruang nama mana yang dapat diterapkan Aplikasi dengan mengonfigurasi cluster target dan ruang nama yang diizinkan di: `spec.destinations`

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  destinations:
  - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster
    namespace: '*'
  - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster
    namespace: '*'
  sourceRepos:
  - 'https://github.com/example/production-apps'
```

Lihat perinciannya di [Bekerja dengan Proyek CD Argo](argocd-projects.md).

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Bekerja dengan Proyek CD Argo](argocd-projects.md)- Mengatur aplikasi dan menegakkan batas-batas keamanan
+  [Buat Aplikasi](argocd-create-application.md)- Menyebarkan aplikasi pertama Anda
+  [Gunakan ApplicationSets](argocd-applicationsets.md)- Menyebarkan ke beberapa cluster dengan ApplicationSets
+  [Pertimbangan Argo CD](argocd-considerations.md)- Pola multi-cluster dan pengaturan lintas akun
+  [Pengaturan Kluster Deklaratif](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters) - Referensi konfigurasi cluster hulu

# Bekerja dengan Proyek CD Argo
<a name="argocd-projects"></a>

Argo CD Projects (AppProject) menyediakan pengelompokan logis dan kontrol akses untuk Aplikasi. Proyek menentukan repositori Git, cluster target, dan ruang nama yang dapat digunakan Aplikasi, memungkinkan batas multi-tenancy dan keamanan dalam instance CD Argo bersama.

## Kapan menggunakan Proyek
<a name="_when_to_use_projects"></a>

Gunakan Proyek untuk:
+ Pisahkan aplikasi berdasarkan tim, lingkungan, atau unit bisnis
+ Batasi tim repositori mana yang dapat digunakan
+ Batasi cluster dan ruang nama mana yang dapat diterapkan oleh tim
+ Menerapkan kuota sumber daya dan jenis sumber daya yang diizinkan
+ Menyediakan penerapan aplikasi swalayan dengan pagar pembatas

## Proyek Default
<a name="_default_project"></a>

Setiap kemampuan Argo CD mencakup `default` proyek yang memungkinkan akses ke semua repositori, cluster, dan ruang nama. Meskipun berguna untuk pengujian awal, buat proyek khusus dengan batasan eksplisit untuk penggunaan produksi.

Untuk detail tentang konfigurasi proyek default dan cara membatasinya, lihat [Proyek Default](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) dalam dokumentasi Argo CD.

## Buat Proyek
<a name="_create_a_project"></a>

Buat Proyek dengan menerapkan sumber `AppProject` daya ke cluster Anda.

 **Contoh: Proyek khusus tim** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Applications for Team A

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'
    - 'https://github.com/my-org/shared-libs'

  # Destination clusters and namespaces
  destinations:
    - name: dev-cluster
      namespace: team-a-dev
    - name: prod-cluster
      namespace: team-a-prod

  # Allowed resource types
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace

  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
```

Terapkan Proyek:

```
kubectl apply -f team-a-project.yaml
```

## Konfigurasi proyek
<a name="_project_configuration"></a>

### Repositori sumber
<a name="_source_repositories"></a>

Kontrol repositori Git mana yang dapat digunakan Aplikasi dalam proyek ini:

```
spec:
  sourceRepos:
    - 'https://github.com/my-org/app-*'  # Wildcard pattern
    - 'https://github.com/my-org/infra'  # Specific repo
```

Anda dapat menggunakan wildcard dan pola negasi (`!`awalan) untuk mengizinkan atau menolak repositori tertentu. Untuk detailnya, lihat [Mengelola Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) dalam dokumentasi Argo CD.

### Pembatasan tujuan
<a name="_destination_restrictions"></a>

Batasi tempat Aplikasi dapat menyebarkan:

```
spec:
  destinations:
    - name: prod-cluster  # Specific cluster by name
      namespace: production
    - name: '*'  # Any cluster
      namespace: team-a-*  # Namespace pattern
```

**penting**  
Gunakan nama cluster dan pola namespace tertentu daripada wildcard untuk Proyek produksi. Ini mencegah penyebaran yang tidak disengaja ke cluster atau ruang nama yang tidak sah.

Anda dapat menggunakan wildcard dan pola negasi untuk mengontrol tujuan. Untuk detailnya, lihat [Mengelola Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) dalam dokumentasi Argo CD.

### Pembatasan sumber daya
<a name="_resource_restrictions"></a>

Kontrol tipe sumber daya Kubernetes mana yang dapat digunakan:

 **Sumber daya cakupan cluster**:

```
spec:
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
    - group: 'rbac.authorization.k8s.io'
      kind: Role
```

 Sumber daya dengan **cakupan ruang nama:**

```
spec:
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
    - group: 's3.services.k8s.aws'
      kind: Bucket
```

Gunakan daftar hitam untuk menolak sumber daya tertentu:

```
spec:
  namespaceResourceBlacklist:
    - group: ''
      kind: Secret  # Prevent direct Secret creation
```

## Tetapkan Aplikasi ke Proyek
<a name="_assign_applications_to_projects"></a>

Saat membuat Aplikasi, tentukan proyek di `spec.project` lapangan:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: team-a  # Assign to team-a project
  source:
    repoURL: https://github.com/my-org/my-app
    path: manifests
  destination:
    name: prod-cluster
    namespace: team-a-prod
```

Aplikasi tanpa proyek tertentu menggunakan `default` proyek.

## Peran proyek dan RBAC
<a name="_project_roles_and_rbac"></a>

Proyek dapat menentukan peran khusus untuk kontrol akses berbutir halus. Petakan peran proyek ke pengguna dan grup Pusat AWS Identitas dalam konfigurasi kemampuan Anda untuk mengontrol siapa yang dapat menyinkronkan, memperbarui, atau menghapus aplikasi.

 **Contoh: Proyek dengan peran pengembang dan admin** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  sourceRepos:
    - '*'
  destinations:
    - name: '*'
      namespace: 'team-a-*'

  roles:
    - name: developer
      description: Developers can sync applications
      policies:
        - p, proj:team-a:developer, applications, sync, team-a/*, allow
        - p, proj:team-a:developer, applications, get, team-a/*, allow
      groups:
        - team-a-developers

    - name: admin
      description: Admins have full access
      policies:
        - p, proj:team-a:admin, applications, *, team-a/*, allow
      groups:
        - team-a-admins
```

Untuk detail tentang peran proyek, token JWT untuk CI/CD pipeline, dan konfigurasi RBAC, lihat [Peran Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) dalam dokumentasi Argo CD.

## Pola umum
<a name="_common_patterns"></a>

### Proyek Berbasis Lingkungan
<a name="_environment_based_projects"></a>

Buat proyek terpisah untuk setiap lingkungan:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/*'
  destinations:
    - name: prod-cluster
      namespace: '*'
  # Strict resource controls for production
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
```

### Proyek Berbasis Tim
<a name="_team_based_projects"></a>

Mengisolasi tim dengan proyek khusus:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: platform-team
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/platform-*'
  destinations:
    - name: '*'
      namespace: 'platform-*'
  # Platform team can manage cluster resources
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
```

### Proyek Multi-cluster
<a name="_multi_cluster_projects"></a>

Terapkan ke beberapa cluster dengan kebijakan yang konsisten:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: global-app
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/global-app'
  destinations:
    - name: us-west-cluster
      namespace: app
    - name: eu-west-cluster
      namespace: app
    - name: ap-south-cluster
      namespace: app
```

## Praktik terbaik
<a name="_best_practices"></a>

 **Mulailah dengan Proyek yang membatasi**: Mulailah dengan izin sempit dan perluas sesuai kebutuhan daripada memulai dengan akses luas.

 **Gunakan pola namespace**: Manfaatkan wildcard dalam batasan namespace (seperti`team-a-*`) untuk memungkinkan fleksibilitas sambil mempertahankan batas.

 **Proyek produksi terpisah: Gunakan Proyek** khusus untuk produksi dengan kontrol yang lebih ketat dan kebijakan sinkronisasi manual.

 **Tujuan Proyek Dokumen**: Gunakan `description` bidang untuk menjelaskan untuk apa setiap Proyek dan siapa yang harus menggunakannya.

 **Tinjau izin Proyek secara teratur**: Audit Proyek secara berkala untuk memastikan pembatasan masih selaras dengan kebutuhan tim dan persyaratan keamanan.

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Konfigurasikan izin Argo CD](argocd-permissions.md)- Konfigurasikan integrasi RBAC dan Identity Center
+  [Buat Aplikasi](argocd-create-application.md)- Buat Aplikasi dalam Proyek
+  [Gunakan ApplicationSets](argocd-applicationsets.md)- Gunakan ApplicationSets dengan Proyek untuk penyebaran multi-cluster
+  [Dokumentasi Proyek CD Argo - Referensi](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/) hulu lengkap

# Buat Aplikasi
<a name="argocd-create-application"></a>

Aplikasi mewakili penerapan dalam cluster target. Setiap Aplikasi mendefinisikan sumber (repositori Git) dan tujuan (cluster dan namespace). Ketika diterapkan, Argo CD akan membuat sumber daya yang ditentukan oleh manifes dalam repositori Git ke namespace di cluster. Aplikasi sering menentukan penerapan beban kerja, tetapi mereka dapat mengelola sumber daya Kubernetes apa pun yang tersedia di klaster tujuan.

## Prasyarat
<a name="_prerequisites"></a>
+ Cluster EKS dengan kemampuan Argo CD dibuat
+ Akses repositori dikonfigurasi (lihat) [Konfigurasikan akses repositori](argocd-configure-repositories.md)
+ Kluster target terdaftar (lihat[Daftarkan cluster target](argocd-register-clusters.md))
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda

## Buat Aplikasi dasar
<a name="_create_a_basic_application"></a>

Tentukan Aplikasi yang menyebarkan dari repositori Git:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**catatan**  
Gunakan `destination.name` dengan nama cluster yang Anda gunakan saat mendaftarkan cluster (seperti `in-cluster` untuk cluster lokal). `destination.server`Bidang ini juga berfungsi dengan cluster EKS ARNs, tetapi menggunakan nama cluster direkomendasikan untuk keterbacaan yang lebih baik.

Terapkan Aplikasi:

```
kubectl apply -f application.yaml
```

Lihat status Aplikasi:

```
kubectl get application guestbook -n argocd
```

## Konfigurasi sumber
<a name="_source_configuration"></a>

 **Repositori** Git:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **Tag atau komit Git tertentu**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Bagan helm**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **Bagan helm dengan nilai dari repositori Git eksternal** (pola multi-sumber):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

Untuk informasi selengkapnya, lihat [File Nilai Helm dari Repositori Git Eksternal dalam dokumentasi](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) Argo CD.

 **Bagan helm dari ECR**:

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

Jika Peran Kemampuan memiliki izin ECR yang diperlukan, repositori digunakan secara langsung dan tidak diperlukan konfigurasi Repositori. Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail.

 **Repositori** Git dari: CodeCommit

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Jika Peran Kemampuan memiliki CodeCommit izin yang diperlukan, repositori digunakan secara langsung dan tidak diperlukan konfigurasi Repositori. Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail.

 **Repositori** Git dari: CodeConnections

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Format URL repositori berasal dari koneksi CodeConnections ARN. Jika Peran Kemampuan memiliki CodeConnections izin yang diperlukan dan koneksi dikonfigurasi, repositori digunakan secara langsung dan tidak ada konfigurasi Repositori yang diperlukan. Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail.

 **Kustomisasi**:

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## Kebijakan sinkronisasi
<a name="_sync_policies"></a>

Kontrol bagaimana Argo CD menyinkronkan aplikasi.

 **Sinkronisasi manual (default)**:

Aplikasi memerlukan persetujuan manual untuk menyinkronkan:

```
spec:
  syncPolicy: {}  # No automated sync
```

Memicu sinkronisasi secara manual:

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **Sinkronisasi otomatis**:

Aplikasi secara otomatis menyinkronkan ketika perubahan Git terdeteksi:

```
spec:
  syncPolicy:
    automated: {}
```

 **Penyembuhan diri**:

Secara otomatis mengembalikan perubahan manual ke cluster:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

Saat diaktifkan, Argo CD mengembalikan setiap perubahan manual yang dibuat langsung ke cluster, memastikan Git tetap menjadi sumber kebenaran.

 **Pemangkasan**:

Secara otomatis menghapus sumber daya yang dihapus dari Git:

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**Awas**  
Pemangkasan akan menghapus sumber daya dari cluster Anda. Gunakan dengan hati-hati di lingkungan produksi.

 **Sinkronisasi otomatis gabungan**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **Coba lagi konfigurasi**:

Konfigurasikan perilaku coba lagi untuk sinkronisasi yang gagal:

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

Ini sangat berguna untuk sumber daya yang bergantung pada CRDs pembuatan terlebih dahulu, atau ketika bekerja dengan instance kro di mana CRD mungkin tidak segera tersedia.

## Opsi sinkronisasi
<a name="_sync_options"></a>

Konfigurasi sinkronisasi tambahan:

 **Buat namespace jika tidak ada**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **Lewati dry run untuk sumber daya yang hilang**:

Berguna saat menerapkan sumber daya CRDs yang bergantung pada yang belum ada (seperti instance kro):

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

Ini juga dapat diterapkan pada sumber daya tertentu menggunakan label pada sumber daya itu sendiri.

 **Validasi sumber daya sebelum menerapkan**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **Terapkan tidak sinkron saja**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## Fitur sinkronisasi lanjutan
<a name="_advanced_sync_features"></a>

Argo CD mendukung fitur sinkronisasi lanjutan untuk penerapan kompleks:
+  **Gelombang sinkronisasi** - Kontrol urutan pembuatan sumber daya dengan `argocd.argoproj.io/sync-wave` anotasi
+  **Sinkronkan kait** - Jalankan pekerjaan sebelum atau sesudah sinkronisasi dengan `argocd.argoproj.io/hook` anotasi (PreSync,, PostSync) SyncFail
+  **Penilaian kesehatan sumber daya** - Pemeriksaan kesehatan khusus untuk sumber daya khusus aplikasi

Untuk detailnya, lihat [Menyinkronkan Gelombang](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) dan [Kait Sumber Daya](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) dalam dokumentasi Argo CD.

## Abaikan perbedaan
<a name="_ignore_differences"></a>

Mencegah Argo CD menyinkronkan bidang tertentu yang dikelola oleh pengontrol lain (seperti replika pengelola HPA):

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

Untuk detail tentang pola abaikan dan pengecualian bidang, lihat [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) dalam dokumentasi Argo CD.

## Penyebaran multi-lingkungan
<a name="_multi_environment_deployment"></a>

Terapkan aplikasi yang sama ke beberapa lingkungan:

 **Pengembangan**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **Produksi**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Memantau dan mengelola Aplikasi
<a name="_monitor_and_manage_applications"></a>

 **Lihat status Aplikasi**:

```
kubectl get application my-app -n argocd
```

 **Akses UI CD Argo**:

Buka Argo CD UI melalui konsol EKS untuk melihat topologi aplikasi, status sinkronisasi, kesehatan sumber daya, dan riwayat penerapan. Lihat [Bekerja dengan Argo CD](working-with-argocd.md) petunjuk akses UI.

 **Aplikasi Rollback**:

Kembalikan ke revisi sebelumnya menggunakan Argo CD UI, Argo CD CLI, atau dengan memperbarui spesifikasi Aplikasi ke commit atau tag Git sebelumnya. `targetRevision`

Menggunakan Argo CD CLI:

```
argocd app rollback argocd/my-app <revision-id>
```

**catatan**  
Saat menggunakan Argo CD CLI dengan kemampuan terkelola, tentukan aplikasi dengan awalan namespace:. `namespace/appname`

Untuk informasi selengkapnya, lihat [rollback aplikasi argocd](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) di dokumentasi Argo CD.

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Bekerja dengan Proyek CD Argo](argocd-projects.md)- Mengatur aplikasi dengan Proyek untuk lingkungan multi-penyewa
+  [Gunakan ApplicationSets](argocd-applicationsets.md)- Menyebarkan ke beberapa cluster dengan template
+  [Spesifikasi Aplikasi](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/) - Referensi API Aplikasi Lengkap
+  [Opsi Sinkronisasi](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/) - Konfigurasi sinkronisasi lanjutan

# Gunakan ApplicationSets
<a name="argocd-applicationsets"></a>

ApplicationSets menghasilkan beberapa Aplikasi dari template, memungkinkan Anda untuk menyebarkan aplikasi yang sama di beberapa cluster, lingkungan, atau ruang nama dengan definisi sumber daya tunggal.

## Prasyarat
<a name="_prerequisites"></a>
+ Cluster EKS dengan kemampuan Argo CD dibuat
+ Akses repositori dikonfigurasi (lihat) [Konfigurasikan akses repositori](argocd-configure-repositories.md)
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda

**catatan**  
Beberapa cluster target tidak diperlukan untuk ApplicationSets. Anda dapat menggunakan generator selain generator cluster (seperti generator list, git, atau matriks) untuk menyebarkan aplikasi tanpa cluster jarak jauh.

## Bagaimana cara ApplicationSets kerja
<a name="_how_applicationsets_work"></a>

ApplicationSets gunakan generator untuk menghasilkan parameter, lalu terapkan parameter tersebut ke template Aplikasi. Setiap set parameter yang dihasilkan menciptakan satu Aplikasi.

Generator umum untuk penerapan EKS:
+  **Generator daftar** - Secara eksplisit mendefinisikan cluster dan parameter untuk setiap lingkungan
+  **Generator cluster** - Secara otomatis menyebarkan ke semua cluster terdaftar
+  **Generator Git** - Hasilkan Aplikasi dari struktur repositori
+  **Generator matriks** - Gabungkan generator untuk penerapan multi-dimensi
+  **Gabungkan generator** - Gabungkan parameter dari beberapa generator

Untuk referensi generator lengkap, lihat [ApplicationSet Dokumentasi](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/).

## Daftar Generator
<a name="_list_generator"></a>

Terapkan ke beberapa cluster dengan konfigurasi eksplisit:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook-all-clusters
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - environment: dev
        replicas: "2"
      - environment: staging
        replicas: "3"
      - environment: prod
        replicas: "5"
  template:
    metadata:
      name: 'guestbook-{{environment}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/guestbook
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{environment}}-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

**catatan**  
Gunakan `destination.name` dengan nama cluster untuk keterbacaan yang lebih baik. `destination.server`Bidang ini juga berfungsi dengan cluster EKS ARNs jika diperlukan.

Ini menciptakan tiga Aplikasi:`guestbook-dev`,`guestbook-staging`, dan`guestbook-prod`.

## Generator cluster
<a name="_cluster_generator"></a>

Terapkan ke semua cluster terdaftar secara otomatis:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
  - clusters: {}
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/cluster-addons
        targetRevision: HEAD
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

Ini secara otomatis membuat Aplikasi untuk setiap cluster terdaftar.

 **Cluster filter**:

Gunakan `matchLabels` untuk menyertakan cluster tertentu, atau `matchExpressions` untuk mengecualikan cluster:

```
spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          environment: production
        matchExpressions:
        - key: skip-appset
          operator: DoesNotExist
```

## Generator Git
<a name="_git_generators"></a>

Generator Git membuat Aplikasi berdasarkan struktur repositori:
+  **Generator direktori** - Menyebarkan setiap direktori sebagai Aplikasi terpisah (berguna untuk layanan mikro)
+  **Generator file** - Hasilkan Aplikasi dari file parameter (berguna untuk penyebaran multi-penyewa)

 **Contoh: Penyebaran Microservices** 

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: microservices
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/example/microservices
      revision: HEAD
      directories:
      - path: services/*
  template:
    metadata:
      name: '{{path.basename}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/microservices
        targetRevision: HEAD
        path: '{{path}}'
      destination:
        name: my-cluster
        namespace: '{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true
```

Untuk detail tentang generator Git dan konfigurasi berbasis file, lihat [Git Generator dalam dokumentasi](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) Argo CD.

## Generator matriks
<a name="_matrix_generator"></a>

Gabungkan beberapa generator untuk digunakan di berbagai dimensi (lingkungan × cluster):

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-env-multi-cluster
  namespace: argocd
spec:
  generators:
  - matrix:
      generators:
      - list:
          elements:
          - environment: dev
          - environment: staging
          - environment: prod
      - clusters:
          selector:
            matchLabels:
              region: us-west-2
  template:
    metadata:
      name: 'app-{{environment}}-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{name}}'
        namespace: 'app-{{environment}}'
```

Untuk detail tentang menggabungkan generator, lihat [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) dalam dokumentasi Argo CD.

## Penyebaran multi-wilayah
<a name="_multi_region_deployment"></a>

Terapkan ke cluster di beberapa wilayah:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: global-app
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - clusterName: prod-us-west
        region: us-west-2
      - clusterName: prod-us-east
        region: us-east-1
      - clusterName: prod-eu-west
        region: eu-west-1
  template:
    metadata:
      name: 'app-{{region}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: kubernetes
        helm:
          parameters:
          - name: region
            value: '{{region}}'
      destination:
        name: '{{clusterName}}'
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

## Mengelola ApplicationSets
<a name="_manage_applicationsets"></a>

 **Lihat ApplicationSets dan dihasilkan Aplikasi**:

```
kubectl get applicationsets -n argocd
kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>
```

 **Perbarui ApplicationSet**:

Ubah ApplicationSet spesifikasi dan aplikasikan kembali. Argo CD secara otomatis memperbarui semua Aplikasi yang dihasilkan:

```
kubectl apply -f applicationset.yaml
```

 **Hapus sebuah ApplicationSet**:

```
kubectl delete applicationset <name> -n argocd
```

**Awas**  
Menghapus ApplicationSet menghapus semua Aplikasi yang dihasilkan. Jika Aplikasi tersebut memiliki`prune: true`, sumber daya mereka juga akan dihapus dari cluster target.  
Untuk mempertahankan sumber daya yang digunakan saat menghapus ApplicationSet, setel `.syncPolicy.preserveResourcesOnDeletion` ke `true` dalam spesifikasi. ApplicationSet Untuk informasi lebih lanjut, lihat [Pemangkasan Aplikasi & Penghapusan Sumber Daya](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) dalam dokumentasi Argo CD.

**penting**  
 ApplicationSets Fitur Argo CD memiliki pertimbangan keamanan yang harus Anda ketahui sebelum menggunakannya. ApplicationSets Untuk informasi selengkapnya, lihat [ApplicationSet Keamanan](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) dalam dokumentasi Argo CD.

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Bekerja dengan Proyek CD Argo](argocd-projects.md)- Mengatur ApplicationSets dengan Proyek
+  [Buat Aplikasi](argocd-create-application.md)- Memahami konfigurasi Aplikasi
+  [ApplicationSet Dokumentasi](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/) - Referensi dan pola generator lengkap
+  [Referensi Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/) - Spesifikasi generator terperinci

# Pertimbangan Argo CD
<a name="argocd-considerations"></a>

Topik ini mencakup pertimbangan penting untuk menggunakan Kemampuan EKS untuk Argo CD, termasuk perencanaan, izin, otentikasi, dan pola penyebaran multi-cluster.

## Perencanaan
<a name="_planning"></a>

Sebelum menerapkan Argo CD, pertimbangkan hal berikut:

 **Strategi repositori**: Tentukan di mana manifes aplikasi Anda akan disimpan (CodeCommit,, GitHub GitLab, Bitbucket). Rencanakan struktur repositori dan strategi percabangan Anda untuk lingkungan yang berbeda.

 **Strategi RBAC**: Rencanakan tim atau pengguna mana yang harus memiliki akses admin, editor, atau penampil. Petakan ini ke grup Pusat AWS Identitas atau peran CD Argo.

 **Arsitektur multi-cluster**: Tentukan apakah Anda akan mengelola beberapa cluster dari satu instance Argo CD. Pertimbangkan untuk menggunakan cluster manajemen khusus untuk Argo CD.

 **Organisasi aplikasi**: Rencanakan bagaimana Anda akan menyusun Aplikasi dan ApplicationSets. Pertimbangkan untuk menggunakan proyek untuk mengatur aplikasi berdasarkan tim atau lingkungan.

 **Kebijakan sinkronisasi**: Putuskan apakah aplikasi harus disinkronkan secara otomatis atau memerlukan persetujuan manual. Sinkronisasi otomatis adalah umum untuk pengembangan, manual untuk produksi.

## Izin
<a name="_permissions"></a>

Untuk informasi rinci tentang Peran Kemampuan IAM, kebijakan kepercayaan, dan praktik terbaik keamanan, lihat [Peran IAM kemampuan Amazon EKS](capability-role.md) dan[Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md).

### Ikhtisar Peran Kemampuan IAM
<a name="_iam_capability_role_overview"></a>

Saat Anda membuat sumber daya kemampuan Argo CD, Anda menyediakan Peran Kemampuan IAM. Tidak seperti ACK, Argo CD terutama mengelola sumber daya Kubernetes, bukan sumber daya secara langsung. AWS Namun, Peran Kemampuan IAM diperlukan untuk:
+ Mengakses repositori Git pribadi di CodeCommit
+ Integrasi dengan Pusat AWS Identitas untuk otentikasi
+ Mengakses AWS rahasia di Secrets Manager (jika dikonfigurasi)
+ Penerapan lintas-cluster ke cluster EKS lainnya

### CodeCommit integrasi
<a name="_codecommit_integration"></a>

Jika Anda menggunakan CodeCommit repositori, lampirkan kebijakan dengan izin baca:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "*"
    }
  ]
}
```

**penting**  
Untuk penggunaan produksi, batasi `Resource` bidang ke repositori tertentu ARNs alih-alih menggunakan. `"*"`  
Contoh:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Ini membatasi akses kemampuan Argo CD hanya ke repositori yang perlu dikelola.

### Integrasi Secrets Manager
<a name="_secrets_manager_integration"></a>

Jika Anda menyimpan kredensyal repositori di Secrets Manager, lampirkan kebijakan terkelola untuk akses baca:

```
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
```

Kebijakan ini mencakup izin yang diperlukan:`secretsmanager:GetSecretValue`,`secretsmanager:DescribeSecret`, dan izin dekripsi KMS.

### Pengaturan dasar
<a name="_basic_setup"></a>

Untuk fungsionalitas CD Argo dasar dengan repositori Git publik, tidak ada kebijakan IAM tambahan yang diperlukan di luar kebijakan kepercayaan.

## Autentikasi
<a name="_authentication"></a>

### AWS Integrasi Pusat Identitas
<a name="shared_aws_identity_center_integration"></a>

Kemampuan terkelola Argo CD terintegrasi langsung dengan AWS Identity Center (sebelumnya AWS SSO), memungkinkan Anda menggunakan penyedia identitas yang ada untuk otentikasi.

Saat Anda mengonfigurasi integrasi Pusat AWS Identitas:

1. Pengguna mengakses Argo CD UI melalui konsol EKS

1. Mereka mengautentikasi menggunakan Pusat AWS Identitas (yang dapat berfederasi ke penyedia identitas perusahaan Anda)

1.  AWS Identity Center menyediakan informasi pengguna dan grup ke Argo CD

1. Argo CD memetakan pengguna dan grup ke peran RBAC berdasarkan konfigurasi Anda

1. Pengguna hanya melihat aplikasi dan sumber daya yang mereka miliki izin untuk diakses

### Menyederhanakan akses dengan set izin Pusat Identitas
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 AWS Identity Center menyediakan dua jalur otentikasi yang berbeda saat bekerja dengan Argo CD:

 **Otentikasi Argo CD API**: Identity Center menyediakan otentikasi SSO ke UI dan API Argo CD. Ini dikonfigurasi melalui pemetaan peran RBAC kemampuan Argo CD.

 **Akses kluster EKS**: Kemampuan Argo CD menggunakan peran IAM yang disediakan pelanggan untuk mengautentikasi dengan kluster EKS melalui entri akses. Entri akses ini dapat dikonfigurasi secara manual untuk menambah atau menghapus izin.

Anda dapat menggunakan [set izin Pusat Identitas](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) untuk menyederhanakan manajemen identitas dengan mengizinkan satu identitas untuk mengakses kluster Argo CD dan EKS. Ini mengurangi overhead dengan mengharuskan Anda mengelola hanya satu identitas di kedua sistem, daripada mempertahankan kredensi terpisah untuk akses CD Argo dan akses cluster.

### Pemetaan peran RBAC
<a name="_rbac_role_mappings"></a>

Argo CD memiliki peran bawaan yang dapat Anda petakan ke pengguna dan grup Pusat AWS Identitas:

 **ADMIN**: Akses penuh ke semua aplikasi dan pengaturan. Dapat membuat, memperbarui, dan menghapus aplikasi. Dapat mengelola konfigurasi Argo CD.

 **EDITOR**: Dapat membuat dan memodifikasi aplikasi. Tidak dapat mengubah pengaturan CD Argo atau menghapus aplikasi.

 **VIEWER**: Akses hanya-baca ke aplikasi. Dapat melihat status dan riwayat aplikasi. Tidak dapat membuat perubahan.

**catatan**  
Nama peran peka huruf besar/kecil dan harus huruf besar (ADMIN, EDITOR, VIEWER).

**penting**  
Integrasi Kemampuan EKS dengan AWS Identity Center mendukung hingga 1.000 identitas per kemampuan Argo CD. Identitas dapat berupa pengguna atau grup.

## Penerapan multi-cluster
<a name="_multi_cluster_deployments"></a>

Kemampuan terkelola Argo CD mendukung penerapan multi-cluster, memungkinkan Anda mengelola aplikasi di seluruh cluster pengembangan, pementasan, dan produksi dari satu instance CD Argo.

### Cara kerja multi-cluster
<a name="_how_multi_cluster_works"></a>

Saat Anda mendaftarkan cluster tambahan dengan Argo CD:

1. Anda membuat rahasia cluster yang mereferensikan kluster EKS target oleh ARN

1. Anda membuat Aplikasi atau ApplicationSets yang menargetkan cluster yang berbeda

1. Argo CD terhubung ke setiap cluster untuk menyebarkan dan menonton sumber daya

1. Anda melihat dan mengelola semua cluster dari satu Argo CD UI

### Prasyarat untuk multi-cluster
<a name="_prerequisites_for_multi_cluster"></a>

Sebelum mendaftarkan cluster tambahan:
+ Buat Entri Akses pada cluster target untuk peran kemampuan Argo CD
+ Pastikan konektivitas jaringan antara kemampuan Argo CD dan cluster target
+ Verifikasi izin IAM untuk mengakses kluster target

### Daftarkan klaster
<a name="_register_a_cluster"></a>

Daftarkan cluster menggunakan Kubernetes Secrets di namespace. `argocd`

Dapatkan ARN cluster target. Ganti *region-code* dengan AWS Region tempat cluster target Anda berada dan ganti *target-cluster* dengan nama cluster target Anda.

```
aws eks describe-cluster \
  --region region-code \
  --name target-cluster \
  --query 'cluster.arn' \
  --output text
```

Buat rahasia cluster menggunakan ARN cluster:

```
apiVersion: v1
kind: Secret
metadata:
  name: target-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: target-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster
  project: default
```

**penting**  
Gunakan ARN cluster EKS di `server` bidang, bukan URL server API Kubernetes. Kemampuan yang dikelola diperlukan ARNs untuk mengidentifikasi cluster target.

Terapkan rahasianya:

```
kubectl apply -f cluster-secret.yaml
```

### Konfigurasikan Entri Akses pada kluster target
<a name="_configure_access_entry_on_target_cluster"></a>

Cluster target harus memiliki Entri Akses yang memberikan izin peran kemampuan Argo CD untuk menyebarkan aplikasi. Ganti *region-code* dengan AWS Region tempat cluster target Anda berada, ganti *target-cluster* dengan nama cluster target Anda, dan ganti ARN dengan peran kemampuan Argo CD ARN Anda.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD \
  --kubernetes-groups system:masters
```

**catatan**  
Untuk penggunaan produksi, pertimbangkan untuk menggunakan grup Kubernetes yang lebih ketat daripada grup Kubernetes. `system:masters`

### Akses klaster pribadi
<a name="_private_cluster_access"></a>

Kemampuan terkelola Argo CD dapat diterapkan ke cluster EKS yang sepenuhnya pribadi tanpa memerlukan peering VPC atau konfigurasi jaringan khusus. AWS mengelola konektivitas antara kemampuan Argo CD dan cluster jarak jauh pribadi secara otomatis. Pastikan kontrol akses repositori Anda dan kebijakan Argo CD RBAC dikonfigurasi dengan benar.

### Penerapan lintas akun
<a name="_cross_account_deployments"></a>

Untuk penerapan lintas akun, tambahkan Peran Kemampuan IAM Argo CD dari akun sumber ke Entri Akses EKS kluster target:

1. Di akun target, buat Entri Akses pada kluster EKS target

1. Gunakan Argo CD IAM Capability Role ARN dari akun sumber sebagai prinsipal

1. Konfigurasikan izin Kubernetes RBAC yang sesuai untuk Entri Akses

1. Daftarkan kluster target di Argo CD menggunakan ARN cluster EKS miliknya

Tidak diperlukan pembuatan peran IAM tambahan atau konfigurasi kebijakan kepercayaan — Entri Akses EKS menangani akses lintas akun.

## Praktik terbaik
<a name="_best_practices"></a>

 **Gunakan sumber deklaratif sebagai sumber kebenaran**: Simpan semua manifes aplikasi Anda dalam sumber deklaratif (repositori Git, pendaftar Helm, atau gambar OCI), aktifkan kontrol versi, jejak audit, dan kolaborasi.

 **Menerapkan RBAC yang tepat**: Gunakan integrasi Pusat AWS Identitas untuk mengontrol siapa yang dapat mengakses dan mengelola aplikasi dalam Argo CD. Argo CD mendukung kontrol akses halus ke sumber daya dalam Aplikasi (Deployment, Pod,, Secrets). ConfigMaps

 **Gunakan ApplicationSets untuk penerapan multi-lingkungan**: Gunakan ApplicationSets untuk menyebarkan aplikasi di beberapa cluster atau ruang nama dengan konfigurasi yang berbeda.

## Manajemen siklus hidup
<a name="_lifecycle_management"></a>

### Kebijakan sinkronisasi aplikasi
<a name="_application_sync_policies"></a>

Kontrol bagaimana Argo CD menyinkronkan aplikasi:

 **Sinkronisasi manual**: Aplikasi memerlukan persetujuan manual untuk menyinkronkan perubahan. Direkomendasikan untuk lingkungan **produksi**.

 **Sinkronisasi otomatis**: Aplikasi secara otomatis menyinkronkan ketika perubahan Git terdeteksi. Umum untuk lingkungan pengembangan dan pementasan.

 **Penyembuhan diri**: Secara otomatis mengembalikan perubahan manual yang dibuat ke cluster. Memastikan status klaster cocok dengan Git.

 **Pemangkasan**: Secara otomatis menghapus sumber daya yang dihapus dari Git. Gunakan dengan hati-hati karena ini dapat menghapus sumber daya.

### Aplikasi kesehatan
<a name="_application_health"></a>

Argo CD terus memantau kesehatan aplikasi:
+  **Sehat**: Semua sumber daya berjalan seperti yang diharapkan
+  **Kemajuan**: Sumber daya sedang dibuat atau diperbarui
+  **Terdegradasi**: Beberapa sumber daya tidak sehat
+  **Ditangguhkan**: Aplikasi dijeda
+  **Hilang**: Sumber daya hilang dari cluster

### Sinkronkan jendela
<a name="_sync_windows"></a>

Konfigurasikan jendela sinkronisasi untuk mengontrol kapan aplikasi dapat disinkronkan:
+ Izinkan sinkronisasi hanya selama jendela pemeliharaan
+ Blokir sinkronisasi selama jam kerja
+ Jadwalkan sinkronisasi otomatis untuk waktu tertentu
+ Gunakan jendela sinkronisasi dalam situasi di mana Anda perlu membuat perubahan dan menghentikan sinkronisasi apa pun (skenario break-glass)

## Konfigurasi Webhook untuk sinkronisasi lebih cepat
<a name="_webhook_configuration_for_faster_sync"></a>

Secara default, Argo CD polling repositori Git setiap 6 menit untuk mendeteksi perubahan. Untuk penerapan yang lebih responsif, konfigurasikan webhook Git untuk memicu sinkronisasi langsung saat perubahan didorong.

Webhook memberikan beberapa manfaat:
+ Respons sinkronisasi segera saat kode didorong (detik vs menit)
+ Mengurangi overhead pemungutan suara dan meningkatkan kinerja sistem
+ Penggunaan batas tarif API yang lebih efisien
+ Pengalaman pengguna yang lebih baik dengan umpan balik yang lebih cepat

### Titik akhir webhook
<a name="_webhook_endpoint"></a>

URL webhook mengikuti pola`${serverUrl}/api/webhook`, di mana `serverUrl` URL server CD Argo Anda.

Misalnya, jika URL server CD Argo Anda`https://abc123.eks-capabilities.us-west-2.amazonaws.com`, URL webhook adalah:

```
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
```

### Konfigurasikan webhook oleh penyedia Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: Di pengaturan repositori Anda, tambahkan webhook dengan URL webhook Argo CD. Atur jenis konten ke `application/json` dan pilih “Just the push event”.

 **GitLab**: Dalam pengaturan proyek Anda, tambahkan webhook dengan URL webhook Argo CD. Aktifkan “Push events” dan opsional “Tag push events”.

 **Bitbucket**: Di pengaturan repositori Anda, tambahkan webhook dengan URL webhook Argo CD. Pilih “Repository push” sebagai pemicunya.

 **CodeCommit**: Buat EventBridge aturan Amazon yang memicu perubahan status CodeCommit repositori dan mengirimkan notifikasi ke titik akhir webhook Argo CD.

Untuk petunjuk konfigurasi webhook yang mendetail, lihat Konfigurasi [Webhook CD Argo](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/).

**catatan**  
Webhook melengkapi polling—mereka tidak menggantikannya. Argo CD terus melakukan polling repositori sebagai mekanisme fallback jika pemberitahuan webhook terlewatkan.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Pelajari cara membuat dan mengelola Aplikasi Argo CD
+  [Memecahkan masalah dengan kemampuan Argo CD](argocd-troubleshooting.md)- Memecahkan masalah Argo CD
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan Argo CD Anda

# Memecahkan masalah dengan kemampuan Argo CD
<a name="argocd-troubleshooting"></a>

Topik ini memberikan panduan pemecahan masalah untuk Kemampuan EKS untuk CD Argo, termasuk pemeriksaan kesehatan kemampuan, masalah sinkronisasi aplikasi, otentikasi repositori, dan penerapan multi-cluster.

**catatan**  
Kemampuan EKS sepenuhnya dikelola dan dijalankan di luar cluster Anda. Anda tidak memiliki akses ke log server CD Argo atau `argocd` namespace. Pemecahan masalah berfokus pada kesehatan kemampuan, status aplikasi, dan konfigurasi.

## Kemampuan aktif tetapi aplikasi tidak disinkronkan
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Jika kemampuan Argo CD Anda menunjukkan `ACTIVE` status tetapi aplikasi tidak disinkronkan, periksa kesehatan kemampuan dan status aplikasi.

 **Periksa kesehatan kemampuan**:

Anda dapat melihat masalah kesehatan dan status kemampuan di konsol EKS atau menggunakan AWS CLI.

 **Konsol**:

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda.

1. Pilih tab **Observability**.

1. Pilih **Monitor cluster**.

1. Pilih tab **Kemampuan** untuk melihat kesehatan dan status untuk semua kemampuan.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

# Look for issues in the health section
```

 **Penyebab umum**:
+  **Repositori tidak dikonfigurasi**: Repositori Git tidak ditambahkan ke Argo CD
+  **Otentikasi gagal**: Kunci SSH, token, atau CodeCommit kredenal tidak valid
+  **Aplikasi tidak dibuat**: Tidak ada sumber daya Aplikasi di cluster
+  **Kebijakan sinkronisasi**: Sinkronisasi manual diperlukan (sinkronisasi otomatis tidak diaktifkan)
+  **Izin IAM: Izin** tidak ada untuk CodeCommit atau Secrets Manager

 **Periksa status aplikasi**:

```
# List applications
kubectl get application -n argocd

# View sync status
kubectl get application my-app -n argocd -o jsonpath='{.status.sync.status}'

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

 **Periksa kondisi aplikasi**:

```
# Describe application to see detailed status
kubectl describe application my-app -n argocd

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

## Aplikasi terjebak dalam status “Kemajuan”
<a name="_applications_stuck_in_progressing_state"></a>

Jika aplikasi ditampilkan `Progressing` tetapi tidak pernah mencapai`Healthy`, periksa status sumber daya aplikasi dan peristiwa.

 **Periksa kesehatan sumber daya**:

```
# View application resources
kubectl get application my-app -n argocd -o jsonpath='{.status.resources}'

# Check for unhealthy resources
kubectl describe application my-app -n argocd | grep -A 10 "Health Status"
```

 **Penyebab umum**:
+  **Deployment not ready**: Pod gagal memulai atau probe kesiapan gagal
+  **Ketergantungan sumber** daya: Sumber daya menunggu sumber daya lain siap
+  **Kesalahan penarikan gambar**: Gambar kontainer tidak dapat diakses
+  **Sumber daya tidak mencukupi**: Cluster kekurangan CPU atau memori untuk pod

 **Verifikasi konfigurasi cluster target** (untuk pengaturan multi-cluster):

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# View cluster secret details
kubectl get secret cluster-secret-name -n argocd -o yaml
```

## Kegagalan otentikasi repositori
<a name="_repository_authentication_failures"></a>

Jika Argo CD tidak dapat mengakses repositori Git Anda, verifikasi konfigurasi otentikasi.

 **Untuk CodeCommit repositori**:

Verifikasi Peran Kemampuan IAM memiliki CodeCommit izin:

```
# View IAM policies
aws iam list-attached-role-policies --role-name my-argocd-capability-role
aws iam list-role-policies --role-name my-argocd-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-argocd-capability-role --policy-name policy-name
```

Peran tersebut membutuhkan `codecommit:GitPull` izin untuk repositori.

 **Untuk repositori Git pribadi**:

Verifikasi kredenal repositori dikonfigurasi dengan benar:

```
# Check repository secret exists
kubectl get secret -n argocd repo-secret-name -o yaml
```

Pastikan rahasia berisi kredensi otentikasi yang benar (kunci SSH, token, atau nama pengguna/kata sandi).

 **Untuk repositori menggunakan Secrets** Manager:

```
# Verify IAM Capability Role has Secrets Manager permissions
aws iam list-attached-role-policies --role-name my-argocd-capability-role

# Test secret retrieval
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region-code:111122223333:secret:my-secret
```

## Masalah penyebaran multi-cluster
<a name="_multi_cluster_deployment_issues"></a>

Jika aplikasi tidak menerapkan ke cluster jarak jauh, verifikasi registrasi klaster dan konfigurasi akses.

 **Periksa pendaftaran klaster**:

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# Verify cluster secret format
kubectl get secret CLUSTER_SECRET_NAME -n argocd -o yaml
```

Pastikan `server` field tersebut berisi ARN klaster EKS, bukan URL API Kubernetes.

 **Verifikasi Entri Akses kluster target**:

Pada cluster target, periksa apakah Peran Kemampuan CD Argo memiliki Entri Akses:

```
# List access entries (run on target cluster or use AWS CLI)
aws eks list-access-entries --cluster-name target-cluster

# Describe specific access entry
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/my-argocd-capability-role
```

 **Periksa izin IAM untuk** lintas akun:

Untuk penerapan lintas akun, verifikasi Peran Kemampuan CD Argo memiliki Entri Akses pada kluster target. Kemampuan terkelola menggunakan Entri Akses EKS untuk akses lintas akun, bukan asumsi peran IAM.

Untuk informasi lebih lanjut tentang konfigurasi multi-cluster, lihat[Daftarkan cluster target](argocd-register-clusters.md).

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Pertimbangan Argo CD](argocd-considerations.md)- Pertimbangan Argo CD dan praktik terbaik
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Membuat dan mengelola Aplikasi Argo CD
+  [Daftarkan cluster target](argocd-register-clusters.md)- Konfigurasikan penerapan multi-cluster
+  [Memecahkan Masalah Kemampuan EKS](capabilities-troubleshooting.md)- Panduan pemecahan masalah kemampuan umum

# Membandingkan Kemampuan EKS untuk Argo CD dengan Argo CD yang dikelola sendiri
<a name="argocd-comparison"></a>

Kemampuan EKS untuk Argo CD memberikan pengalaman CD Argo yang dikelola sepenuhnya yang berjalan di EKS. Untuk perbandingan umum Kemampuan EKS vs solusi yang dikelola sendiri, lihat[Pertimbangan Kemampuan EKS](capabilities-considerations.md). Topik ini berfokus pada perbedaan spesifik CD Argo, termasuk otentikasi, manajemen multi-cluster, dan dukungan fitur hulu.

## Perbedaan dari CD Argo hulu
<a name="_differences_from_upstream_argo_cd"></a>

Kemampuan EKS untuk Argo CD didasarkan pada CD Argo hulu tetapi berbeda dalam cara diakses, dikonfigurasi, dan terintegrasi dengan layanan. AWS 

 **RBAC dan otentikasi**: Kemampuan ini dilengkapi dengan tiga peran RBAC (admin, editor, penampil) dan menggunakan Pusat AWS Identitas untuk otentikasi alih-alih otentikasi bawaan Argo CD. Konfigurasikan pemetaan peran melalui `rbacRoleMapping` parameter kemampuan untuk memetakan grup Pusat Identitas ke peran CD Argo, bukan melalui CD Argo. `argocd-rbac-cm` ConfigMap Argo CD UI di-host dengan URL langsungnya sendiri (temukan di konsol EKS di bawah tab Capabilities cluster Anda), dan akses API menggunakan AWS otentikasi dan otorisasi melalui IAM.

 **Konfigurasi cluster**: Kemampuan tidak secara otomatis mengkonfigurasi cluster lokal atau hub-and-spoke topologi. Anda mengonfigurasi kluster target penerapan dan entri akses EKS. Kemampuan ini hanya mendukung klaster Amazon EKS sebagai target penerapan menggunakan kluster EKS ARNs (bukan server API Kubernetes). URLs Kemampuan tidak secara otomatis menambahkan cluster lokal (`kubernetes.default.svc`) sebagai target penyebaran — untuk menyebarkan ke cluster yang sama di mana kemampuan dibuat, secara eksplisit mendaftarkan cluster tersebut menggunakan ARN -nya.

 **Akses cluster jarak jauh yang disederhanakan**: Kemampuan ini menyederhanakan penerapan multi-cluster dengan menggunakan Entri Akses EKS untuk memberikan akses CD Argo ke cluster jarak jauh, menghilangkan kebutuhan untuk mengonfigurasi Peran IAM untuk Akun Layanan (IRSA) atau mengatur asumsi peran IAM lintas akun. Kemampuan ini juga menyediakan akses transparan ke kluster EKS yang sepenuhnya pribadi tanpa memerlukan peering VPC atau konfigurasi jaringan khusus AWS — mengelola konektivitas antara kemampuan Argo CD dan cluster jarak jauh pribadi secara otomatis.

 **Integrasi AWS layanan langsung**: Kemampuan menyediakan integrasi langsung dengan AWS layanan melalui izin IAM Peran Kemampuan. Anda dapat CodeCommit mereferensikan repositori, bagan Helm ECR, dan CodeConnections langsung di sumber daya Aplikasi tanpa membuat konfigurasi Repositori. Ini menyederhanakan otentikasi dan menghilangkan kebutuhan untuk mengelola kredensyal terpisah untuk layanan. AWS Lihat [Konfigurasikan akses repositori](argocd-configure-repositories.md) untuk detail.

 **Dukungan namespace**: Kemampuan ini mengharuskan Anda untuk menentukan satu namespace di mana Aplikasi Argo CD ApplicationSet, dan sumber daya AppProject khusus harus dibuat.

**catatan**  
Pembatasan namespace ini hanya berlaku untuk sumber daya kustom Argo CD sendiri (Application,,). ApplicationSet AppProject Beban kerja aplikasi Anda dapat diterapkan ke namespace apa pun di klaster target apa pun. Misalnya, jika Anda membuat kemampuan dengan namespace`argocd`, semua Aplikasi CRs harus dibuat di `argocd` namespace, tetapi Aplikasi tersebut dapat menyebarkan beban kerja ke,, `default``production`, `staging` atau namespace lainnya.

**catatan**  
Kemampuan terkelola memiliki persyaratan khusus untuk penggunaan dan AppProject konfigurasi CLI:  
Saat menggunakan Argo CD CLI, tentukan aplikasi dengan awalan namespace: `argocd app sync namespace/appname` 
AppProject sumber daya harus menentukan `.spec.sourceNamespaces` untuk menentukan ruang nama mana yang dapat dilihat proyek untuk Aplikasi (biasanya disetel ke namespace yang Anda tentukan saat membuat kemampuan)
Anotasi pelacakan sumber daya menggunakan format: `namespace_appname:group/kind:namespace/name` 

 **Fitur yang tidak didukung**: Fitur berikut tidak tersedia dalam kemampuan terkelola:
+ Config Management Plugins (CMPs) untuk pembuatan manifes kustom
+ Skrip Lua khusus untuk penilaian kesehatan sumber daya (pemeriksaan kesehatan bawaan untuk sumber daya standar didukung)
+ Pengontrol Pemberitahuan
+ Penyedia SSO khusus (hanya Pusat AWS Identitas yang didukung, termasuk identitas federasi pihak ketiga melalui Pusat AWS Identitas)
+ Ekstensi UI dan spanduk kustom
+ Akses langsung ke`argocd-cm`,`argocd-params`, dan konfigurasi lainnya ConfigMaps
+ Memodifikasi batas waktu sinkronisasi (tetap pada 120 detik)

 **Kompatibilitas**: Aplikasi dan ApplicationSets bekerja secara identik dengan CD Argo hulu tanpa perubahan pada manifes Anda. Kemampuannya menggunakan Kubernetes yang sama APIs dan CRDs, jadi alat seperti `kubectl` bekerja dengan cara yang sama. Kemampuan ini sepenuhnya mendukung Aplikasi dan ApplicationSets, GitOps alur kerja dengan sinkronisasi otomatis, penerapan multi-cluster, kebijakan sinkronisasi (otomatis, pangkas, penyembuhan sendiri), gelombang sinkronisasi dan kait, penilaian kesehatan untuk sumber daya Kubernetes standar, kemampuan rollback, sumber repositori Git (HTTPS dan SSH), Helm, Kustomize, dan manifes YAMAL biasa, kredensi aplikasi, proyek untuk multi-tenancy, dan pengecualian sumber daya dan inklusi. GitHub 

## Menggunakan Argo CD CLI dengan kemampuan terkelola
<a name="argocd-cli-configuration"></a>

CLI CD Argo bekerja sama dengan CD Argo hulu untuk sebagian besar operasi, tetapi otentikasi dan pendaftaran cluster berbeda.

### Prasyarat
<a name="_prerequisites"></a>

Instal Argo CD CLI mengikuti petunjuk instalasi [upstream](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Konfigurasi
<a name="_configuration"></a>

Konfigurasikan CLI menggunakan variabel lingkungan:

1. Dapatkan URL server CD Argo dari konsol EKS (di bawah tab **Capabilities** cluster Anda), atau gunakan AWS CLI. `https://`Awalan harus dihapus:

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. Buat token akun dari Argo CD UI (**Pengaturan** → **Akun** → **admin** → **Hasilkan Token Baru**), lalu atur sebagai variabel lingkungan:

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**penting**  
Konfigurasi ini menggunakan token akun admin untuk alur kerja penyiapan dan pengembangan awal. Untuk kasus penggunaan produksi, gunakan peran dan token dengan cakupan proyek untuk mengikuti prinsip hak istimewa paling sedikit. Untuk informasi selengkapnya tentang mengonfigurasi peran proyek dan RBAC, lihat. [Konfigurasikan izin Argo CD](argocd-permissions.md)

1. Atur opsi gRPC yang diperlukan:

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

Dengan variabel lingkungan ini diatur, Anda dapat menggunakan Argo CD CLI tanpa `argocd login` perintah.

### Perbedaan utama
<a name="_key_differences"></a>

Kemampuan terkelola memiliki batasan CLI berikut:
+  `argocd admin`perintah tidak didukung (mereka memerlukan akses pod langsung)
+  `argocd login`tidak didukung (gunakan akun atau token proyek sebagai gantinya)
+  `argocd cluster add`membutuhkan `--aws-cluster-name` bendera dengan ARN cluster EKS

### Contoh: Daftarkan cluster
<a name="_example_register_a_cluster"></a>

Daftarkan kluster EKS untuk penerapan aplikasi:

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

Untuk dokumentasi CLI CD Argo lengkap, lihat referensi [Argo CD CLI](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Jalur Migrasi
<a name="_migration_path"></a>

Anda dapat bermigrasi dari CD Argo yang dikelola sendiri ke kemampuan terkelola:

1. Tinjau konfigurasi CD Argo Anda saat ini untuk fitur yang tidak didukung (Pengontrol pemberitahuan, CMPs, pemeriksaan kesehatan khusus, ekstensi UI)

1. Skalakan pengontrol CD Argo yang dikelola sendiri ke nol replika untuk mencegah konflik

1. Buat sumber daya kemampuan Argo CD di cluster Anda

1. Ekspor Aplikasi Anda yang ada, ApplicationSets, dan AppProjects

1. Migrasikan kredensyal repositori, rahasia klaster, dan templat kredensi repositori (repocreds)

1. Jika menggunakan kunci GPG, sertifikat TLS, atau host yang dikenal SSH, migrasi konfigurasi ini juga

1. Perbarui `destination.server` bidang untuk menggunakan nama cluster atau kluster EKS ARNs

1. Terapkan ke instance CD Argo yang dikelola

1. Verifikasi aplikasi disinkronkan dengan benar

1. Nonaktifkan instalasi Argo CD yang dikelola sendiri

Kemampuan terkelola menggunakan CD Argo APIs dan definisi sumber daya yang sama, sehingga manifes Anda yang ada bekerja dengan modifikasi minimal.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Membuat kemampuan Argo CD](create-argocd-capability.md)- Buat sumber daya kemampuan Argo CD
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Menyebarkan aplikasi pertama Anda
+  [Pertimbangan Argo CD](argocd-considerations.md)- Konfigurasikan integrasi Pusat AWS Identitas

# Komposisi Sumber Daya dengan kro (Kube Resource Orchestrator)
<a name="kro"></a>

 **kro (Kube Resource Orchestrator)** adalah proyek asli Kubernetes open-source yang memungkinkan Anda mendefinisikan Kubernetes kustom menggunakan konfigurasi sederhana dan langsung. APIs Dengan kro, Anda dapat dengan mudah mengkonfigurasi kustom baru APIs yang membuat sekelompok objek Kubernetes dan operasi logis di antara mereka.

Dengan Kemampuan EKS, kro dikelola sepenuhnya oleh AWS, menghilangkan kebutuhan untuk menginstal, memelihara, dan menskalakan pengontrol kro pada cluster Anda.

## Bagaimana kro Bekerja
<a name="_how_kro_works"></a>

kro memperkenalkan Custom Resource Definition (CRD) yang disebut `ResourceGraphDefinition` (RGD) yang memungkinkan pembuatan Kubernetes kustom yang sederhana dan efisien. APIs Saat Anda membuat`ResourceGraphDefinition`, kro menggunakan ekstensi Kubernetes asli untuk membuat dan mengelola yang baru APIs di klaster Anda. Dari spesifikasi sumber daya tunggal ini, kro akan membuat dan mendaftarkan CRD baru untuk Anda berdasarkan spesifikasi Anda dan akan beradaptasi untuk mengelola sumber daya kustom Anda yang baru ditentukan.

RGDs dapat menyertakan beberapa sumber daya, dan kro akan menentukan saling ketergantungan dan pemesanan sumber daya, jadi Anda tidak perlu melakukannya. Anda dapat menggunakan sintaks sederhana untuk menyuntikkan konfigurasi dari satu sumber daya ke sumber daya lainnya, sangat menyederhanakan komposisi dan menghilangkan kebutuhan akan operator “lem” di cluster Anda. Dengan kro, sumber daya kustom Anda dapat menyertakan sumber daya Kubernetes asli serta Custom Resource Definition (CRDs) yang diinstal di cluster.

kro mendukung satu jenis sumber daya utama:
+  **ResourceGraphDefinition (RGD)**: Mendefinisikan sumber daya kustom Kubernetes, merangkum satu atau beberapa sumber daya Kubernetes asli atau kustom yang mendasarinya

Selain sumber daya ini, kro akan membuat dan mengelola siklus hidup sumber daya kustom Anda yang dibuat dengannya, serta semua sumber daya konstituennya.

kro terintegrasi secara mulus dengan AWS Controllers for Kubernetes (ACK), memungkinkan Anda untuk menyusun sumber daya beban kerja dengan sumber daya untuk membuat abstraksi tingkat yang lebih tinggi. AWS Ini memungkinkan Anda untuk membuat blok bangunan cloud Anda sendiri, menyederhanakan manajemen sumber daya dan mengaktifkan pola yang dapat digunakan kembali dengan pengaturan konfigurasi default dan tidak dapat diubah berdasarkan standar organisasi Anda.

## Manfaat kro
<a name="_benefits_of_kro"></a>

kro memungkinkan tim platform untuk membuat Kubernetes kustom yang menyusun beberapa sumber daya menjadi APIs abstraksi tingkat yang lebih tinggi. Ini menyederhanakan manajemen sumber daya dengan memungkinkan pengembang untuk menyebarkan aplikasi kompleks menggunakan sumber daya kustom yang sederhana, standar, dan berversi. Anda menentukan pola yang dapat digunakan kembali untuk kombinasi sumber daya umum, memungkinkan pembuatan sumber daya yang konsisten di seluruh organisasi Anda.

kro menggunakan [Common Expression Language (CEL) di Kubernetes](https://kubernetes.io/docs/reference/using-api/cel/) untuk meneruskan nilai antar sumber daya dan menggabungkan logika bersyarat, memberikan fleksibilitas dalam komposisi sumber daya. Anda dapat menyusun sumber daya Kubernetes dan AWS sumber daya yang dikelola oleh ACK ke dalam kustom terpadu APIs, memungkinkan definisi aplikasi dan infrastruktur yang lengkap.

kro mendukung konfigurasi deklaratif melalui manifes Kubernetes, memungkinkan GitOps alur kerja dan infrastruktur sebagai praktik kode yang terintegrasi secara mulus dengan proses pengembangan Anda yang ada. Sebagai bagian dari Kemampuan Terkelola EKS, kro dikelola sepenuhnya oleh AWS, menghilangkan kebutuhan untuk menginstal, mengonfigurasi, dan memelihara pengontrol kro di cluster Anda.

 **Contoh: Membuat ResourceGraphDefinition** 

Contoh berikut menunjukkan sederhana `ResourceGraphDefinition` yang membuat aplikasi web dengan Deployment dan Service:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

Saat pengguna membuat instance sumber daya `WebApplication` kustom, kro secara otomatis membuat sumber daya Deployment dan Service yang sesuai, mengelola siklus hidup mereka bersama dengan sumber daya kustom.

## Integrasi dengan Kemampuan Terkelola EKS Lainnya
<a name="_integration_with_other_eks_managed_capabilities"></a>

kro terintegrasi dengan Kemampuan Terkelola EKS lainnya.
+  ** AWS Controller for Kubernetes (ACK): Gunakan kro untuk menyusun sumber daya ACK** ke dalam abstraksi tingkat yang lebih tinggi, menyederhanakan manajemen sumber daya. AWS 
+  **Argo CD**: Gunakan Argo CD untuk mengelola penyebaran sumber daya kustom kro di beberapa cluster, memungkinkan GitOps alur kerja untuk blok bangunan platform dan tumpukan aplikasi Anda.

## Memulai dengan kro
<a name="_getting_started_with_kro"></a>

Untuk memulai dengan Kemampuan EKS untuk kro:

1.  [Buat sumber daya kemampuan kro](create-kro-capability.md) di kluster EKS Anda melalui AWS Konsol, AWS CLI, atau infrastruktur pilihan Anda sebagai alat kode.

1. Create ResourceGraphDefinitions (RGDs) yang menentukan komposisi kustom APIs dan sumber daya Anda.

1. Terapkan instance sumber daya kustom Anda untuk menyediakan dan mengelola Kubernetes dan resource yang mendasarinya. AWS 

# Buat kemampuan kro
<a name="create-kro-capability"></a>

Topik ini menjelaskan cara membuat kemampuan kro di cluster Amazon EKS Anda.

## Prasyarat
<a name="_prerequisites"></a>

Sebelum membuat kemampuan kro, pastikan Anda memiliki:
+ Cluster Amazon EKS yang sudah ada yang menjalankan versi Kubernetes yang didukung (semua versi dalam dukungan standar dan diperpanjang didukung)
+ Izin IAM yang memadai untuk membuat sumber daya kemampuan di kluster EKS
+ (Untuk CLI/Eksctl) Alat CLI yang sesuai diinstal dan dikonfigurasi

**catatan**  
Tidak seperti ACK dan Argo CD, kro tidak memerlukan izin IAM tambahan di luar kebijakan kepercayaan. kro beroperasi sepenuhnya di dalam cluster Anda dan tidak melakukan panggilan API. AWS Namun, Anda masih perlu memberikan Peran Kemampuan IAM dengan kebijakan kepercayaan yang sesuai. Untuk informasi tentang mengonfigurasi izin Kubernetes RBAC untuk kro, lihat. [Konfigurasikan izin kro](kro-permissions.md)

## Pilih alat Anda
<a name="_choose_your_tool"></a>

Anda dapat membuat kemampuan kro menggunakan, AWS CLI Konsol Manajemen AWS, atau eksctl:
+  [Buat kemampuan kro menggunakan Konsol](kro-create-console.md)- Gunakan Konsol untuk pengalaman terpandu
+  [Buat kemampuan kro menggunakan CLI AWS](kro-create-cli.md)- Gunakan AWS CLI untuk scripting dan otomatisasi
+  [Buat kemampuan kro menggunakan eksctl](kro-create-eksctl.md)- Gunakan eksctl untuk pengalaman asli Kubernetes

## Apa yang terjadi ketika Anda membuat kemampuan kro
<a name="_what_happens_when_you_create_a_kro_capability"></a>

Saat Anda membuat kemampuan kro:

1. EKS membuat layanan kemampuan kro dan mengonfigurasinya untuk memantau dan mengelola sumber daya di cluster Anda

1. Definisi Sumber Daya Kustom (CRDs) diinstal di klaster Anda

1. Entri akses dibuat secara otomatis untuk Peran Kemampuan IAM Anda `AmazonEKSKROPolicy` yang memberikan izin untuk mengelola ResourceGraphDefinitions dan instansinya (lihat) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

1. Kemampuan mengasumsikan Peran Kemampuan IAM yang Anda berikan (hanya digunakan untuk hubungan kepercayaan)

1. kro mulai mengawasi `ResourceGraphDefinition` sumber daya dan instansinya

1. Status kemampuan berubah dari `CREATING` menjadi `ACTIVE` 

Setelah aktif, Anda dapat membuat ResourceGraphDefinitions untuk menentukan kustom APIs dan membuat instance dari mereka APIs.

**catatan**  
Entri akses yang dibuat secara otomatis mencakup `AmazonEKSKROPolicy` yang memberikan izin kro untuk mengelola ResourceGraphDefinitions dan instansinya. Untuk memungkinkan kro membuat sumber daya Kubernetes yang mendasari yang ditentukan dalam ResourceGraphDefinitions (seperti Deployment, Services, atau sumber daya ACK), Anda harus mengonfigurasi kebijakan entri akses tambahan. Untuk mempelajari lebih lanjut tentang entri akses dan cara mengonfigurasi izin tambahan, lihat [Konfigurasikan izin kro](kro-permissions.md) dan. [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Langkah selanjutnya
<a name="_next_steps"></a>

Setelah membuat kemampuan kro:
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya
+  [konsep kro](kro-concepts.md)- Pelajari tentang SimpleSchema, ekspresi CEL, dan pola komposisi sumber daya

# Buat kemampuan kro menggunakan Konsol
<a name="kro-create-console"></a>

Topik ini menjelaskan cara membuat kapabilitas kro (Kube Resource Orchestrator) menggunakan. Konsol Manajemen AWS

## Buat kemampuan kro
<a name="_create_the_kro_capability"></a>

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda untuk membuka halaman detail cluster.

1. Pilih tab **Kemampuan**.

1. Di navigasi kiri, pilih **kro (Kube Resource Orchestrator**).

1. Pilih **Buat kemampuan kro**.

1. Untuk **Peran Kemampuan IAM**:
   + Jika Anda sudah memiliki Peran Kemampuan IAM, pilih dari dropdown
   + Jika Anda perlu membuat peran, pilih **Buat peran kro** 

     Ini membuka konsol IAM di tab baru dengan kebijakan kepercayaan yang telah diisi sebelumnya. Peran ini tidak memerlukan izin IAM tambahan karena kro beroperasi sepenuhnya di dalam klaster Anda.

     Setelah membuat peran, kembali ke konsol EKS dan peran akan dipilih secara otomatis.
**catatan**  
Tidak seperti ACK dan Argo CD, kro tidak memerlukan izin IAM tambahan di luar kebijakan kepercayaan. kro beroperasi sepenuhnya di dalam cluster Anda dan tidak melakukan panggilan API. AWS 

1. Pilih **Buat**.

Proses pembuatan kapabilitas dimulai.

## Verifikasi kemampuan aktif
<a name="_verify_the_capability_is_active"></a>

1. Pada tab **Kemampuan**, lihat status kemampuan kro.

1. Tunggu status berubah dari `CREATING` ke`ACTIVE`.

1. Setelah aktif, kemampuan siap digunakan.

Untuk informasi tentang status kemampuan dan pemecahan masalah, lihat. [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)

## Berikan izin untuk mengelola sumber daya Kubernetes
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

Saat Anda membuat kemampuan kro, Entri Akses EKS secara otomatis dibuat dengan`AmazonEKSKROPolicy`, yang memungkinkan kro untuk mengelola ResourceGraphDefinitions dan instance-instancenya. Namun, tidak ada izin yang diberikan secara default untuk membuat sumber daya Kubernetes yang mendasarinya (seperti Deployment, Services ConfigMaps, dll.) yang ditentukan dalam file Anda. ResourceGraphDefinitions

Desain yang disengaja ini mengikuti prinsip hak istimewa terkecil—berbeda memerlukan izin yang berbeda ResourceGraphDefinitions . Anda harus secara eksplisit mengonfigurasi izin yang dibutuhkan kro berdasarkan sumber daya yang akan Anda kelola. ResourceGraphDefinitions 

Untuk memulai dengan cepat, pengujian, atau lingkungan pengembangan, gunakan`AmazonEKSClusterAdminPolicy`:

1. Di konsol EKS, navigasikan ke tab **Access** cluster Anda.

1. Di bawah **entri Access**, temukan entri untuk peran kemampuan kro Anda (itu akan memiliki peran ARN yang Anda buat sebelumnya).

1. Pilih entri akses untuk membuka detailnya.

1. Di bagian **Kebijakan akses**, pilih **Kebijakan akses asosiasi**.

1. Pilih `AmazonEKSClusterAdminPolicy` dari daftar kebijakan.

1. Untuk **cakupan Akses**, pilih **Cluster**.

1. Pilih **Kaitkan**.

**penting**  
Ini `AmazonEKSClusterAdminPolicy` memberikan izin luas untuk membuat dan mengelola semua sumber daya Kubernetes, termasuk kemampuan untuk membuat jenis sumber daya apa pun di semua ruang nama. Ini nyaman untuk pengembangan dan POCs tetapi tidak boleh digunakan dalam produksi. Untuk produksi, buat kebijakan RBAC khusus yang hanya memberikan izin yang diperlukan untuk sumber daya spesifik yang akan Anda ResourceGraphDefinitions kelola. Untuk panduan tentang mengonfigurasi izin hak istimewa terkecil, lihat dan. [Konfigurasikan izin kro](kro-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Verifikasi sumber daya kustom tersedia
<a name="_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya kustom kro tersedia di klaster Anda.

 **Menggunakan konsol** 

1. Arahkan ke klaster Anda di konsol Amazon EKS

1. Pilih tab **Sumber Daya**

1. Pilih **Ekstensi** 

1. Pilih **CustomResourceDefinitions** 

Anda akan melihat jenis `ResourceGraphDefinition` sumber daya yang terdaftar.

 **Menggunakan kubectl** 

```
kubectl api-resources | grep kro.run
```

Anda akan melihat jenis `ResourceGraphDefinition` sumber daya yang terdaftar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya
+  [konsep kro](kro-concepts.md)- Pelajari tentang SimpleSchema, ekspresi CEL, dan pola komposisi
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan kro Anda

# Buat kemampuan kro menggunakan CLI AWS
<a name="kro-create-cli"></a>

Topik ini menjelaskan cara membuat kapabilitas kro (Kube Resource Orchestrator) menggunakan CLI. AWS 

## Prasyarat
<a name="_prerequisites"></a>
+  ** AWS CLI** — Versi `2.12.3` atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`aws --version`. Untuk informasi selengkapnya, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) di Panduan Pengguna Antarmuka Baris AWS Perintah.
+  **`kubectl`**— Alat baris perintah untuk bekerja dengan cluster Kubernetes. Untuk informasi selengkapnya, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**catatan**  
Tidak seperti ACK dan Argo CD, kro tidak memerlukan izin IAM tambahan. kro beroperasi sepenuhnya di dalam cluster Anda dan tidak melakukan panggilan API. AWS Peran tersebut hanya diperlukan untuk membangun hubungan kepercayaan dengan layanan kemampuan EKS.

## Langkah 2: Buat kemampuan kro
<a name="_step_2_create_the_kro_capability"></a>

Buat sumber daya kemampuan kro di cluster Anda. Ganti *region-code* dengan AWS Wilayah tempat klaster Anda berada (seperti`us-west-2`) dan *my-cluster* dengan nama cluster Anda.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif karena EKS menciptakan infrastruktur dan komponen kemampuan yang diperlukan. EKS akan menginstal Definisi Sumber Daya Kustom Kubernetes yang terkait dengan kemampuan ini di cluster Anda saat sedang dibuat.

**catatan**  
Jika Anda menerima kesalahan bahwa klaster tidak ada atau Anda tidak memiliki izin, verifikasi:  
Nama cluster sudah benar
 AWS CLI Anda dikonfigurasi untuk wilayah yang benar
Anda memiliki izin IAM yang diperlukan

## Langkah 3: Verifikasi kemampuan aktif
<a name="_step_3_verify_the_capability_is_active"></a>

Tunggu kemampuan untuk menjadi aktif. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

Kemampuan siap ketika status ditampilkan`ACTIVE`.

Anda juga dapat melihat detail kemampuan lengkap:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## Langkah 4: Berikan izin untuk mengelola sumber daya Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Saat Anda membuat kemampuan kro, Entri Akses EKS secara otomatis dibuat dengan`AmazonEKSKROPolicy`, yang memungkinkan kro untuk mengelola ResourceGraphDefinitions dan instance-instancenya. Namun, tidak ada izin yang diberikan secara default untuk membuat sumber daya Kubernetes yang mendasarinya (seperti Deployment, Services ConfigMaps, dll.) yang ditentukan dalam file Anda. ResourceGraphDefinitions

Desain yang disengaja ini mengikuti prinsip hak istimewa terkecil—berbeda memerlukan izin yang berbeda ResourceGraphDefinitions . Misalnya: \$1 A ResourceGraphDefinition yang hanya membuat ConfigMaps dan Rahasia membutuhkan izin yang berbeda dari yang membuat Deployment dan Services \$1 A ResourceGraphDefinition yang membuat sumber daya ACK membutuhkan izin untuk sumber daya khusus tertentu \$1 Beberapa ResourceGraphDefinitions mungkin hanya membaca sumber daya yang ada tanpa membuat yang baru

Anda harus secara eksplisit mengonfigurasi izin yang dibutuhkan kro berdasarkan sumber daya yang akan Anda kelola. ResourceGraphDefinitions 

### Pengaturan cepat
<a name="_quick_setup"></a>

Untuk memulai dengan cepat, pengujian, atau lingkungan pengembangan, gunakan`AmazonEKSClusterAdminPolicy`:

Dapatkan peran kapabilitas ARN:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Kaitkan kebijakan admin klaster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**penting**  
Ini `AmazonEKSClusterAdminPolicy` memberikan izin luas untuk membuat dan mengelola semua sumber daya Kubernetes, termasuk kemampuan untuk membuat jenis sumber daya apa pun di semua ruang nama. Ini nyaman untuk pengembangan dan POCs tetapi tidak boleh digunakan dalam produksi. Untuk produksi, buat kebijakan RBAC khusus yang hanya memberikan izin yang diperlukan untuk sumber daya spesifik yang akan Anda ResourceGraphDefinitions kelola. Untuk panduan tentang mengonfigurasi izin hak istimewa terkecil, lihat dan. [Konfigurasikan izin kro](kro-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Langkah 5: Verifikasi sumber daya kustom tersedia
<a name="_step_5_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya kustom kro tersedia di klaster Anda:

```
kubectl api-resources | grep kro.run
```

Anda akan melihat jenis `ResourceGraphDefinition` sumber daya yang terdaftar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya
+  [konsep kro](kro-concepts.md)- Pelajari tentang SimpleSchema, ekspresi CEL, dan pola komposisi
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan kro Anda

# Buat kemampuan kro menggunakan eksctl
<a name="kro-create-eksctl"></a>

Topik ini menjelaskan cara membuat kapabilitas kro (Kube Resource Orchestrator) menggunakan eksctl.

**catatan**  
Langkah-langkah berikut memerlukan versi `0.220.0` eksctl atau yang lebih baru. Untuk memeriksa versi Anda, jalankan`eksctl version`.

## Langkah 1: Buat Peran Kemampuan IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Buat file kebijakan kepercayaan:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Buat peran IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**catatan**  
Tidak seperti ACK dan Argo CD, kro tidak memerlukan izin IAM tambahan di luar kebijakan kepercayaan. kro beroperasi sepenuhnya di dalam cluster Anda dan tidak melakukan panggilan API. AWS 

## Langkah 2: Buat kemampuan kro
<a name="_step_2_create_the_kro_capability"></a>

Buat kemampuan kro menggunakan eksctl. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

Perintah segera kembali, tetapi kemampuannya membutuhkan waktu untuk menjadi aktif.

## Langkah 3: Verifikasi kemampuan aktif
<a name="_step_3_verify_the_capability_is_active"></a>

Periksa status kemampuan. Ganti *region-code* dengan AWS Region tempat cluster Anda berada dan ganti *my-cluster* dengan nama cluster Anda.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

Kemampuan siap ketika status ditampilkan`ACTIVE`.

## Langkah 4: Berikan izin untuk mengelola sumber daya Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Secara default, kro hanya dapat membuat dan mengelola ResourceGraphDefinitions dan instance mereka. Untuk memungkinkan kro membuat dan mengelola sumber daya Kubernetes yang mendasari yang ditentukan dalam Anda ResourceGraphDefinitions, kaitkan kebijakan `AmazonEKSClusterAdminPolicy` akses dengan entri akses kapabilitas.

Dapatkan peran kapabilitas ARN:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Kaitkan kebijakan admin klaster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**penting**  
Ini `AmazonEKSClusterAdminPolicy` memberikan izin luas untuk membuat dan mengelola semua sumber daya Kubernetes dan dimaksudkan untuk merampingkan memulai. Untuk penggunaan produksi, buat kebijakan RBAC yang lebih ketat yang hanya memberikan izin yang diperlukan untuk sumber daya spesifik yang akan Anda kelola. ResourceGraphDefinitions Untuk panduan tentang mengonfigurasi izin hak istimewa paling sedikit, lihat dan. [Konfigurasikan izin kro](kro-permissions.md) [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)

## Langkah 5: Verifikasi sumber daya kustom tersedia
<a name="_step_5_verify_custom_resources_are_available"></a>

Setelah kemampuan aktif, verifikasi bahwa sumber daya kustom kro tersedia di klaster Anda:

```
kubectl api-resources | grep kro.run
```

Anda akan melihat jenis `ResourceGraphDefinition` sumber daya yang terdaftar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya
+  [konsep kro](kro-concepts.md)- Pelajari tentang SimpleSchema, ekspresi CEL, dan pola komposisi
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Kelola sumber daya kemampuan kro Anda

# konsep kro
<a name="kro-concepts"></a>

kro memungkinkan tim platform untuk membuat Kubernetes kustom yang menyusun beberapa sumber daya menjadi APIs abstraksi tingkat yang lebih tinggi. Topik ini berjalan melalui contoh praktis, kemudian menjelaskan konsep inti yang perlu Anda pahami ketika bekerja dengan Kemampuan EKS untuk kro.

## Memulai dengan kro
<a name="_getting_started_with_kro"></a>

Setelah membuat kemampuan kro (lihat[Buat kemampuan kro](create-kro-capability.md)), Anda dapat mulai membuat kustom APIs menggunakan ResourceGraphDefinitions di cluster Anda.

Berikut adalah contoh lengkap yang membuat abstraksi aplikasi web sederhana:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: webapplication
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    group: kro.run
    spec:
      name: string | required=true
      image: string | default="nginx:latest"
      replicas: integer | default=3
  resources:
  - id: deployment
    template:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ${schema.spec.name}
      spec:
        replicas: ${schema.spec.replicas}
        selector:
          matchLabels:
            app: ${schema.spec.name}
        template:
          metadata:
            labels:
              app: ${schema.spec.name}
          spec:
            containers:
            - name: app
              image: ${schema.spec.image}
              ports:
              - containerPort: 80
  - id: service
    template:
      apiVersion: v1
      kind: Service
      metadata:
        name: ${schema.spec.name}
      spec:
        selector:
          app: ${schema.spec.name}
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
```

Setelah menerapkan ini ResourceGraphDefinition, tim aplikasi dapat membuat aplikasi web menggunakan API Anda yang disederhanakan:

```
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
  name: my-app
spec:
  name: my-app
  replicas: 5
```

kro secara otomatis membuat Deployment dan Service dengan konfigurasi yang sesuai. Karena `image` tidak ditentukan, ia menggunakan nilai default `nginx:latest` dari skema.

## Konsep inti
<a name="_core_concepts"></a>

**penting**  
kro memvalidasi ResourceGraphDefinitions pada waktu pembuatan, bukan saat runtime. Saat Anda membuat RGD, kro memvalidasi sintaks CEL, memeriksa ekspresi tipe terhadap skema Kubernetes yang sebenarnya, memverifikasi keberadaan bidang, dan mendeteksi dependensi melingkar. Ini berarti kesalahan langsung tertangkap saat Anda membuat RGD, sebelum instance apa pun diterapkan.

### ResourceGraphDefinition
<a name="_resourcegraphdefinition"></a>

A ResourceGraphDefinition (RGD) mendefinisikan Kubernetes API kustom dengan menentukan:
+  **Skema** - Struktur API menggunakan SimpleSchema format (nama bidang, jenis, default, validasi)
+  **Resources** - Template untuk Kubernetes atau AWS resource yang mendasarinya untuk dibuat
+  **Dependensi** - Bagaimana sumber daya berhubungan satu sama lain (terdeteksi secara otomatis dari referensi bidang)

Saat Anda menerapkan RGD, kro mendaftarkan Custom Resource Definition (CRD) baru di cluster Anda. Tim aplikasi kemudian dapat membuat instance API kustom Anda, dan kro menangani pembuatan dan pengelolaan semua sumber daya yang mendasarinya.

Untuk informasi selengkapnya, lihat [ResourceGraphDefinition Ikhtisar](https://kro.run/docs/concepts/rgd/overview/) di dokumentasi kro.

### SimpleSchema format
<a name="_simpleschema_format"></a>

SimpleSchema menyediakan cara yang disederhanakan untuk mendefinisikan skema API tanpa memerlukan pengetahuan OpenAPI:

```
schema:
  apiVersion: v1alpha1
  kind: Database
  spec:
    name: string | required=true description="Database name"
    size: string | default="small" enum=small,medium,large
    replicas: integer | default=1 minimum=1 maximum=5
```

SimpleSchema mendukung`string`,`integer`,`boolean`,, dan `number` tipe dengan kendala seperti`required`,,`minimum`/`maximum`,`default`, dan. `enum` `pattern`

Untuk informasi lebih lanjut, lihat [SimpleSchema](https://kro.run/docs/concepts/rgd/schema/)di dokumentasi kro.

### Ekspresi CEL
<a name="_cel_expressions"></a>

kro menggunakan Common Expression Language (CEL) untuk mereferensikan nilai secara dinamis dan menambahkan logika bersyarat. Ekspresi CEL dibungkus `${` `}` dan dan dapat digunakan dalam dua cara:

 **Ekspresi mandiri** - Seluruh nilai bidang adalah ekspresi tunggal:

```
spec:
  replicas: ${schema.spec.replicaCount}  # Expression returns integer
  labels: ${schema.spec.labelMap}        # Expression returns object
```

Hasil ekspresi menggantikan seluruh nilai bidang dan harus sesuai dengan jenis bidang yang diharapkan.

 **Template string** - Satu atau lebih ekspresi yang disematkan dalam string:

```
metadata:
  name: "${schema.spec.prefix}-${schema.spec.name}"  # Multiple expressions
  annotation: "Created by ${schema.spec.owner}"      # Single expression in string
```

Semua ekspresi dalam template string harus mengembalikan string. Gunakan `string()` untuk mengonversi jenis lain:`"replicas-${string(schema.spec.count)}"`.

 **Referensi bidang** - Akses nilai spesifikasi contoh menggunakan`schema.spec`:

```
template:
  metadata:
    name: ${schema.spec.name}-deployment
    namespace: ${schema.metadata.namespace}  # Can also reference metadata
  spec:
    replicas: ${schema.spec.replicas}
```

 **Akses bidang opsional** - Gunakan `?` untuk bidang yang mungkin tidak ada:

```
# For ConfigMaps or Secrets with unknown structure
value: ${configmap.data.?DATABASE_URL}

# For optional status fields
ready: ${deployment.status.?readyReplicas > 0}
```

Jika bidang tidak ada, ekspresi kembali `null` bukannya gagal.

 **Sumber daya bersyarat** - Sertakan sumber daya hanya jika kondisi terpenuhi:

```
resources:
- id: ingress
  includeWhen:
    - ${schema.spec.enableIngress == true}
  template:
    # ... ingress configuration
```

`includeWhen`Bidang menerima daftar ekspresi boolean. Semua kondisi harus benar untuk sumber daya yang akan dibuat. Saat ini, hanya `includeWhen` dapat mereferensikan `schema.spec` bidang.

 **Transformasi** - Mengubah nilai menggunakan operator dan fungsi ternary:

```
template:
  spec:
    resources:
      requests:
        memory: ${schema.spec.size == "small" ? "512Mi" : "2Gi"}

    # String concatenation
    image: ${schema.spec.registry + "/" + schema.spec.imageName}

    # Type conversion
    port: ${string(schema.spec.portNumber)}
```

 **Referensi lintas sumber daya** - Nilai referensi dari sumber daya lain:

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: configmap
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}
```

Saat Anda mereferensikan sumber daya lain dalam ekspresi CEL, itu secara otomatis membuat dependensi. kro memastikan sumber daya yang direferensikan dibuat terlebih dahulu.

Untuk informasi selengkapnya, lihat [Ekspresi CEL](https://kro.run/docs/concepts/rgd/cel-expressions/) dalam dokumentasi kro.

### Ketergantungan sumber daya
<a name="_resource_dependencies"></a>

kro secara otomatis menyimpulkan dependensi dari ekspresi CEL—Anda tidak menentukan urutannya, Anda menjelaskan hubungan. Ketika satu sumber daya mereferensikan yang lain menggunakan ekspresi CEL, kro membuat dependensi dan menentukan urutan pembuatan yang benar.

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: notification
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: BucketNotification
    spec:
      bucket: ${bucket.spec.name}  # Creates dependency: notification depends on bucket
```

Ekspresi `${bucket.spec.name}` menciptakan ketergantungan. kro membangun grafik asiklik terarah (DAG) dari semua sumber daya dan dependensinya, kemudian menghitung urutan topologi untuk pembuatan.

 **Urutan pembuatan**: Sumber daya dibuat dalam urutan topologi (dependensi terlebih dahulu).

 **Pembuatan paralel**: Sumber daya tanpa dependensi dibuat secara bersamaan.

 **Urutan penghapusan: Sumber daya dihapus dalam urutan** topologi terbalik (tanggungan terlebih dahulu).

 **Dependensi melingkar: Tidak diizinkan—kro menolak ResourceGraphDefinitions dengan dependensi** melingkar selama validasi.

Anda dapat melihat urutan pembuatan yang dihitung:

```
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Untuk informasi selengkapnya, lihat [Inferensi grafik](https://kro.run/docs/concepts/rgd/dependencies-ordering/) dalam dokumentasi kro.

## Menulis dengan ACK
<a name="_composing_with_ack"></a>

kro bekerja secara mulus dengan Kemampuan EKS untuk ACK untuk menyusun AWS sumber daya dengan sumber daya Kubernetes:

```
resources:
# Create {aws} S3 bucket with ACK
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-files

# Inject bucket details into Kubernetes ConfigMap
- id: config
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}

# Use ConfigMap in application deployment
- id: deployment
  template:
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          containers:
          - name: app
            envFrom:
            - configMapRef:
                name: ${config.metadata.name}
```

Pola ini memungkinkan Anda membuat AWS sumber daya, mengekstrak detailnya (ARNs, URLs, titik akhir), dan menyuntikkannya ke dalam konfigurasi aplikasi Anda—semuanya dikelola sebagai satu unit.

Untuk lebih banyak pola komposisi dan contoh lanjutan, lihat[pertimbangan kro untuk EKS](kro-considerations.md).

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [pertimbangan kro untuk EKS](kro-considerations.md)- Pelajari tentang pola khusus EKS, RBAC, dan integrasi dengan ACK dan Argo CD
+  [Dokumentasi kro - Dokumentasi](https://kro.run/docs/overview) kro komprehensif termasuk ekspresi CEL tingkat lanjut, pola validasi, dan pemecahan masalah

# Konfigurasikan izin kro
<a name="kro-permissions"></a>

Tidak seperti ACK dan Argo CD, kro tidak memerlukan izin IAM. kro beroperasi sepenuhnya di dalam klaster Kubernetes Anda dan tidak melakukan panggilan API. AWS Kontrol akses ke sumber daya kro menggunakan Kubernetes RBAC standar.

## Cara kerja izin dengan kro
<a name="_how_permissions_work_with_kro"></a>

kro menggunakan dua jenis sumber daya Kubernetes dengan cakupan yang berbeda:

 **ResourceGraphDefinitions**: Sumber daya dengan cakupan cluster yang mendefinisikan kustom. APIs Biasanya dikelola oleh tim platform yang merancang dan memelihara standar organisasi.

 **Instance: Sumber** daya kustom dengan cakupan nama dibuat dari. ResourceGraphDefinitions Dapat dibuat oleh tim aplikasi dengan izin RBAC yang sesuai.

Secara default, kemampuan kro memiliki izin untuk mengelola ResourceGraphDefinitions dan instansinya melalui kebijakan entri `AmazonEKSKROPolicy` akses. Namun, kro memerlukan izin tambahan untuk membuat dan mengelola sumber daya Kubernetes yang mendasari yang ditentukan dalam ResourceGraphDefinitions (seperti Deployment, Services, atau resource ACK). Anda harus memberikan izin ini melalui kebijakan entri akses atau Kubernetes RBAC. Untuk detail tentang pemberian izin ini, lihat izin sumber daya [arbitrer kro](capabilities-security.md#kro-resource-permissions).

## Izin tim platform
<a name="_platform_team_permissions"></a>

Tim platform memerlukan izin untuk membuat dan mengelola ResourceGraphDefinitions.

 **Contoh ClusterRole untuk tim platform**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-platform-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
```

 **Mengikat anggota tim platform**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: platform-team-kro-admin
subjects:
- kind: Group
  name: platform-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-platform-admin
  apiGroup: rbac.authorization.k8s.io
```

## Izin tim aplikasi
<a name="_application_team_permissions"></a>

Tim aplikasi memerlukan izin untuk membuat instance sumber daya khusus di ruang nama mereka.

 **Contoh Peran untuk tim aplikasi**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-app-developer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["create", "get", "list", "update", "delete", "patch"]
```

 **Mengikat anggota tim aplikasi**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-kro-developer
  namespace: my-app
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: kro-app-developer
  apiGroup: rbac.authorization.k8s.io
```

**catatan**  
Grup API dalam Peran (`kro.run`dalam contoh ini) harus cocok dengan yang `apiVersion` ditentukan dalam skema Anda ResourceGraphDefinition.

## Akses hanya-baca
<a name="_read_only_access"></a>

Berikan akses hanya-baca ke tampilan ResourceGraphDefinitions dan instance tanpa izin modifikasi.

 **Hanya baca ClusterRole**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-viewer
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["get", "list", "watch"]
```

 **Peran hanya-baca untuk instance**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-instance-viewer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["get", "list", "watch"]
```

## Akses multi-namespace
<a name="_multi_namespace_access"></a>

Berikan tim aplikasi akses ke beberapa ruang nama menggunakan dengan ClusterRoles . RoleBindings

 **ClusterRole untuk akses multi-namespace**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-multi-namespace-developer
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps"]
  verbs: ["create", "get", "list", "update", "delete"]
```

 **Mengikat ke ruang nama tertentu:**

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-dev-access
  namespace: development
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-staging-access
  namespace: staging
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
```

## Praktik terbaik
<a name="_best_practices"></a>

 **Prinsip hak istimewa terkecil**: Berikan hanya izin minimum yang diperlukan untuk tanggung jawab masing-masing tim.

 **Gunakan grup alih-alih pengguna individu**: Ikat peran ke grup daripada pengguna individu untuk pengelolaan yang lebih mudah.

 **Masalah platform dan aplikasi terpisah**: Tim platform mengelola ResourceGraphDefinitions, tim aplikasi mengelola instance.

 **Isolasi namespace**: Gunakan ruang nama untuk mengisolasi tim atau lingkungan yang berbeda, dengan RBAC mengontrol akses ke setiap namespace.

 **Akses hanya-baca untuk audit: Menyediakan** akses hanya-baca ke tim keamanan dan kepatuhan untuk tujuan audit.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya
+  [konsep kro](kro-concepts.md)- Memahami SimpleSchema, ekspresi CEL, dan pola komposisi
+  [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)- Tinjau praktik terbaik keamanan untuk kemampuan

# pertimbangan kro untuk EKS
<a name="kro-considerations"></a>

Topik ini mencakup pertimbangan penting untuk menggunakan Kemampuan EKS untuk kro, termasuk kapan harus menggunakan komposisi sumber daya, pola RBAC, dan integrasi dengan kemampuan EKS lainnya.

## Kapan menggunakan kro
<a name="_when_to_use_kro"></a>

kro dirancang untuk menciptakan pola infrastruktur yang dapat digunakan kembali dan kustom APIs yang menyederhanakan manajemen sumber daya yang kompleks.

 **Gunakan kro saat Anda perlu**:
+ Buat platform swalayan dengan disederhanakan APIs untuk tim aplikasi
+ Standarisasi pola infrastruktur di seluruh tim (database\$1cadangan\$1pemantauan)
+ Kelola dependensi sumber daya dan berikan nilai antar sumber daya
+ Membangun abstraksi kustom yang menyembunyikan kompleksitas implementasi
+ Tulis beberapa sumber daya ACK ke dalam blok bangunan tingkat yang lebih tinggi
+ Aktifkan GitOps alur kerja untuk tumpukan infrastruktur yang kompleks

 **Jangan gunakan kro saat**:
+ Mengelola sumber daya yang sederhana dan mandiri (gunakan sumber daya ACK atau Kubernetes secara langsung)
+ Anda memerlukan logika runtime dinamis (kro bersifat deklaratif, bukan imperatif)
+ Sumber daya tidak memiliki dependensi atau konfigurasi bersama

kro unggul dalam menciptakan “jalur beraspal” - pola yang berpendirian dan dapat digunakan kembali yang memudahkan tim untuk menerapkan infrastruktur kompleks dengan benar.

## Pola RBAC
<a name="_rbac_patterns"></a>

kro memungkinkan pemisahan kekhawatiran antara tim platform yang membuat ResourceGraphDefinitions dan tim aplikasi yang membuat instance.

### Tanggung jawab tim platform
<a name="_platform_team_responsibilities"></a>

Tim platform membuat dan memelihara ResourceGraphDefinitions (RGDs) yang mendefinisikan kustom APIs.

 **Izin yang dibutuhkan**:
+ Buat, perbarui, hapus ResourceGraphDefinitions
+ Mengelola jenis sumber daya yang mendasarinya (Penerapan, Layanan, sumber daya ACK)
+ Akses ke semua ruang nama tempat RGDs akan digunakan

 **Contoh ClusterRole untuk tim platform**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: platform-kro-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

Untuk konfigurasi RBAC mendetail, lihat. [Konfigurasikan izin kro](kro-permissions.md)

### Tanggung jawab tim aplikasi
<a name="_application_team_responsibilities"></a>

Tim aplikasi membuat contoh sumber daya khusus yang ditentukan oleh RGDs tanpa perlu memahami kompleksitas yang mendasarinya.

 **Izin yang dibutuhkan**:
+ Membuat, memperbarui, menghapus contoh sumber daya kustom
+ Baca akses ke namespace mereka
+ Tidak ada akses ke sumber daya yang mendasarinya atau RGDs

 **Manfaat**:
+ Tim menggunakan sederhana, tingkat tinggi APIs
+ Tim platform mengontrol detail implementasi
+ Mengurangi risiko kesalahan konfigurasi
+ Orientasi lebih cepat untuk anggota tim baru

## Integrasi dengan kemampuan EKS lainnya
<a name="_integration_with_other_eks_capabilities"></a>

### Menyusun sumber daya ACK
<a name="_composing_ack_resources"></a>

kro sangat kuat bila dikombinasikan dengan ACK untuk menciptakan pola infrastruktur.

 **Pola umum**:
+  **Aplikasi dengan penyimpanan**: ember S3\$1antrian SQS\$1konfigurasi notifikasi
+  **Tumpukan basis data**: contoh RDS\$1grup parameter\$1grup keamanan\$1Rahasia Secrets Manager
+  **Jaringan**: VPC\$1subnet\$1tabel rute\$1grup keamanan\$1gateway NAT
+  **Hitung dengan penyimpanan**: EC2 instance\$1volume EBS\$1profil instans IAM

kro menangani urutan ketergantungan, meneruskan nilai antara sumber daya (seperti ARNs dan string koneksi), dan mengelola siklus hidup penuh sebagai satu unit.

Untuk contoh penyusunan sumber daya ACK, lihat[Konsep ACK](ack-concepts.md).

### GitOps dengan Argo CD
<a name="_gitops_with_argo_cd"></a>

Gunakan Kemampuan EKS untuk Argo CD untuk menyebarkan keduanya RGDs dan instance dari repositori Git.

 **Organisasi repositori**:
+  **Platform repo**: Berisi ResourceGraphDefinitions dikelola oleh tim platform
+  **Repo aplikasi**: Berisi contoh sumber daya khusus yang dikelola oleh tim aplikasi
+  **Repo bersama**: Berisi keduanya RGDs dan instance untuk organisasi yang lebih kecil

 **Pertimbangan**:
+ Terapkan RGDs sebelum instance (Gelombang sinkronisasi CD Argo dapat membantu)
+ Gunakan Proyek CD Argo terpisah untuk tim platform dan aplikasi
+ Tim platform mengontrol akses repositori RGD
+ Tim aplikasi memiliki akses hanya-baca ke definisi RGD

Untuk informasi lebih lanjut tentang Argo CD, lihat[Bekerja dengan Argo CD](working-with-argocd.md).

## Pengorganisasian ResourceGraphDefinitions
<a name="_organizing_resourcegraphdefinitions"></a>

Atur RGDs berdasarkan tujuan, kompleksitas, dan kepemilikan.

 **Dengan tujuan**:
+  **Infrastruktur**: Tumpukan basis data, jaringan, penyimpanan
+  **Aplikasi**: Aplikasi web, APIs, pekerjaan batch
+  **Platform**: Layanan bersama, pemantauan, pencatatan

 **Dengan kompleksitas**:
+  **Sederhana**: 2-3 sumber daya dengan dependensi minimal
+  **Sedang**: 5-10 sumber daya dengan beberapa dependensi
+  **Kompleks**: 10\$1 sumber daya dengan dependensi kompleks

 **Konvensi penamaan**:
+ Gunakan nama deskriptif:`webapp-with-database`, `s3-notification-queue` 
+ Sertakan versi dalam nama untuk melanggar perubahan: `webapp-v2` 
+ Gunakan awalan yang konsisten untuk terkait RGDs:, `platform- ` `app-` 

 **Strategi namespace**:
+ RGDs memiliki cakupan cluster (bukan namespaced)
+ Instance diberi namespaced
+ Gunakan pemilih namespace RGDs untuk mengontrol tempat instance dapat dibuat

## Pembuatan versi dan pembaruan
<a name="_versioning_and_updates"></a>

Rencanakan evolusi RGD dan migrasi instans.

 **Pembaruan RGD**:
+  **Perubahan yang tidak melanggar**: Perbarui RGD di tempat (tambahkan bidang opsional, sumber daya baru dengan IncludeWhen)
+  **Perubahan yang melanggar**: Buat RGD baru dengan nama berbeda (webapp-v2)
+  **Penghentian: Tandai lama RGDs dengan anotasi**, komunikasikan garis waktu migrasi

 **Migrasi contoh**:
+ Buat instance baru dengan RGD yang diperbarui
+ Validasi instance baru bekerja dengan benar
+ Hapus instance lama
+ kro menangani pembaruan sumber daya yang mendasarinya secara otomatis

 **Praktik terbaik**:
+ Uji perubahan RGD di lingkungan non-produksi terlebih dahulu
+ Gunakan versi semantik dalam nama RGD untuk perubahan besar
+ Perubahan pemecahan dokumen dan jalur migrasi
+ Berikan contoh migrasi untuk tim aplikasi

## Validasi dan pengujian
<a name="_validation_and_testing"></a>

Validasi RGDs sebelum menerapkan ke produksi.

 **Strategi validasi**:
+  **Validasi skema: kro memvalidasi** struktur RGD secara otomatis
+  Instance **dry-run: Buat instance** pengujian di ruang nama pengembangan
+  **Tes integrasi**: Verifikasi sumber daya yang disusun bekerja bersama
+  **Penegakan kebijakan**: Gunakan pengontrol penerimaan untuk menegakkan standar organisasi

 **Masalah umum untuk diuji**:
+ Ketergantungan dan pemesanan sumber daya
+ Nilai yang lewat di antara sumber daya (ekspresi CEL)
+ Inklusi sumber daya bersyarat (IncludeWhen)
+ Perbanyakan status dari sumber daya yang mendasarinya
+ Izin RBAC untuk pembuatan contoh

## Dokumentasi hulu
<a name="_upstream_documentation"></a>

Untuk informasi rinci tentang penggunaan kro:
+  [Memulai dengan kro - Creating](https://kro.run/docs/guides/getting-started) ResourceGraphDefinitions
+  [Ekspresi CEL](https://kro.run/docs/concepts/cel) - Menulis ekspresi CEL
+  [Panduan kro](https://kro.run/docs/guides/) - Pola komposisi lanjutan
+  [Pemecahan masalah - Pemecahan](https://kro.run/docs/troubleshooting) masalah dan debugging

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konfigurasikan izin kro](kro-permissions.md)- Konfigurasikan RBAC untuk tim platform dan aplikasi
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan siklus hidup sumber daya
+  [Memecahkan masalah dengan kemampuan kro](kro-troubleshooting.md)- Memecahkan masalah kro
+  [Konsep ACK](ack-concepts.md)- Pelajari tentang sumber daya ACK untuk komposisi
+  [Bekerja dengan Argo CD](working-with-argocd.md)- Menyebarkan RGDs dan contoh dengan GitOps

# Memecahkan masalah dengan kemampuan kro
<a name="kro-troubleshooting"></a>

Topik ini memberikan panduan pemecahan masalah untuk Kemampuan EKS untuk kro, termasuk pemeriksaan kesehatan kemampuan, izin RBAC, kesalahan ekspresi CEL, dan masalah komposisi sumber daya.

**catatan**  
Kemampuan EKS sepenuhnya dikelola dan dijalankan di luar cluster Anda. Anda tidak memiliki akses ke log pengontrol atau `kro-system` namespace. Pemecahan masalah berfokus pada kesehatan kemampuan, konfigurasi RBAC, dan status sumber daya.

## Kemampuan aktif tetapi ResourceGraphDefinitions tidak bekerja
<a name="_capability_is_active_but_resourcegraphdefinitions_arent_working"></a>

Jika kemampuan kro Anda menunjukkan `ACTIVE` status tetapi ResourceGraphDefinitions tidak membuat sumber daya yang mendasarinya, periksa kesehatan kemampuan, izin RBAC, dan status sumber daya.

 **Periksa kesehatan kemampuan**:

Anda dapat melihat masalah kesehatan dan status kemampuan di konsol EKS atau menggunakan AWS CLI.

 **Konsol**:

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda.

1. Pilih tab **Observability**.

1. Pilih **Monitor cluster**.

1. Pilih tab **Kemampuan** untuk melihat kesehatan dan status untuk semua kemampuan.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro

# Look for issues in the health section
```

 **Penyebab umum**:
+  Izin **RBAC hilang: kro tidak memiliki izin** untuk membuat sumber daya Kubernetes yang mendasarinya
+  **Ekspresi CEL tidak valid: Kesalahan** sintaks di ResourceGraphDefinition
+  **Ketergantungan sumber daya**: Sumber daya dependen belum siap
+  **Validasi skema**: Instance tidak cocok dengan persyaratan skema RGD

 **Verifikasi izin RBAC**:

```
# Check if capability has cluster admin policy
kubectl get accessentry -A | grep kro
```

Jika kemampuan tidak memiliki izin yang diperlukan, kaitkan `AmazonEKSClusterAdminPolicy` dengan entri akses kemampuan kro, atau buat kebijakan RBAC yang lebih ketat untuk penggunaan produksi. Lihat [Konfigurasikan izin kro](kro-permissions.md) untuk detail.

 **Periksa ResourceGraphDefinition status**:

```
# List all RGDs
kubectl get resourcegraphdefinition

# Describe specific RGD
kubectl describe resourcegraphdefinition my-rgd

# Check for validation errors
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'
```

ResourceGraphDefinitions memiliki tiga kondisi status utama:
+  `ResourceGraphAccepted`- Apakah RGD lulus validasi (sintaks CEL, pemeriksaan tipe, keberadaan bidang)
+  `KindReady`- Apakah CRD untuk API kustom Anda dibuat dan terdaftar
+  `ControllerReady`- Apakah kro secara aktif menonton instance API kustom Anda

Jika `ResourceGraphAccepted` ya`False`, periksa pesan kondisi untuk kesalahan validasi seperti bidang yang tidak dikenal, ketidakcocokan tipe, atau dependensi melingkar.

## Instans dibuat tetapi sumber daya yang mendasarinya tidak muncul
<a name="_instances_created_but_underlying_resources_not_appearing"></a>

Jika instance sumber daya kustom ada tetapi sumber daya Kubernetes yang mendasarinya (Deployment, Services, ConfigMaps) tidak dibuat, verifikasi kro memiliki izin dan periksa kesalahan komposisi.

 **Periksa status instance**:

```
# Describe the instance (replace with your custom resource kind and name)
kubectl describe custom-kind
         my-instance

# View instance events
kubectl get events --field-selector involvedObject.name=my-instance

# Check instance status conditions
kubectl get custom-kind
         my-instance -o jsonpath='{.status.conditions}'

# Check instance state
kubectl get custom-kind
         my-instance -o jsonpath='{.status.state}'
```

Instance memiliki `state` bidang yang menunjukkan status tingkat tinggi:
+  `ACTIVE`- Instance berhasil berjalan
+  `IN_PROGRESS`- Instance sedang diproses atau direkonsiliasi
+  `FAILED`- Instance gagal untuk mendamaikan
+  `DELETING`- Instance sedang dihapus
+  `ERROR`- Terjadi kesalahan selama pemrosesan

Instans juga memiliki empat kondisi status:
+  `InstanceManaged`- Finalizer dan label diatur dengan benar
+  `GraphResolved`- Grafik runtime dibuat dan sumber daya diselesaikan
+  `ResourcesReady`- Semua sumber daya dibuat dan siap
+  `Ready`- Kesehatan contoh keseluruhan (hanya menjadi `True` ketika semua sub-kondisi) `True`

Fokus pada `Ready` kondisi untuk menentukan kesehatan contoh. Jika `Ready` ya`False`, periksa sub-kondisi untuk mengidentifikasi fase mana yang gagal.

 **Verifikasi izin RBAC**:

Kemampuan kro membutuhkan izin untuk membuat sumber daya Kubernetes yang mendasari yang ditentukan dalam Anda. ResourceGraphDefinitions

```
# Check if the capability has the AmazonEKSClusterAdminPolicy
kubectl get accessentry -A | grep kro
```

Jika izin tidak ada, kaitkan `AmazonEKSClusterAdminPolicy` dengan entri akses kemampuan kro, atau buat kebijakan RBAC yang lebih ketat untuk penggunaan produksi. Lihat [Konfigurasikan izin kro](kro-permissions.md) untuk detail.

## Kesalahan ekspresi CEL
<a name="_cel_expression_errors"></a>

Kesalahan ekspresi CEL ditangkap pada waktu ResourceGraphDefinition pembuatan, bukan saat instance dibuat. kro memvalidasi semua sintaks CEL, mengecek tipe ekspresi terhadap skema Kubernetes, dan memverifikasi keberadaan bidang saat Anda membuat RGD.

 **Kesalahan validasi CEL umum**:
+  **Referensi bidang yang tidak ditentukan**: Mereferensikan bidang yang tidak ada dalam skema atau sumber daya
+  **Ketidakcocokan tipe**: Ekspresi mengembalikan tipe yang salah (misalnya, string di mana bilangan bulat diharapkan)
+  **Sintaks tidak valid**: Tanda kurung, tanda kutip, atau operator tidak ada dalam ekspresi CEL
+  **Jenis sumber daya tidak dikenal**: Merujuk CRD yang tidak ada di cluster

 **Periksa status validasi RGD**:

```
# Check if RGD was accepted
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}'

# View detailed validation errors
kubectl describe resourcegraphdefinition my-rgd
```

Jika `ResourceGraphAccepted` ya`False`, pesan kondisi berisi kesalahan validasi.

 **Contoh ekspresi CEL yang valid**:

```
# Reference schema field
${schema.spec.appName}

# Conditional expression
${schema.spec.replicas > 1}

# String template (expressions must return strings)
name: "${schema.spec.appName}-service"

# Standalone expression (can be any type)
replicas: ${schema.spec.replicaCount}

# Resource reference
${deployment.status.availableReplicas}

# Optional field access (returns null if field doesn't exist)
${configmap.data.?DATABASE_URL}
```

## Dependensi sumber daya tidak terselesaikan
<a name="_resource_dependencies_not_resolving"></a>

kro secara otomatis menyimpulkan dependensi dari ekspresi CEL dan membuat sumber daya dalam urutan yang benar. Jika sumber daya tidak dibuat seperti yang diharapkan, periksa urutan ketergantungan dan kesiapan sumber daya.

 **Lihat urutan pembuatan yang dihitung**:

```
# See the order kro will create resources
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Ini menunjukkan urutan yang dihitung berdasarkan referensi ekspresi CEL antar sumber daya.

 **Periksa kesiapan sumber daya**:

```
# View instance status to see which resources are ready
kubectl get custom-kind
         my-instance -o jsonpath='{.status}'

# Check specific resource status
kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'
```

 **Verifikasi kondisi ReadyWhen (jika digunakan**):

`readyWhen`Bidang ini opsional. Jika tidak ditentukan, sumber daya dianggap siap segera setelah pembuatan. Jika Anda telah menentukan `readyWhen` kondisi, verifikasi bahwa kondisi tersebut memeriksa kesiapan sumber daya dengan benar:

```
resources:
  - id: deployment
    readyWhen:
      - ${deployment.status.availableReplicas == deployment.spec.replicas}
```

 **Periksa acara sumber daya**:

```
# View events for the underlying resources
kubectl get events -n namespace --sort-by='.lastTimestamp'
```

## Kegagalan validasi skema
<a name="_schema_validation_failures"></a>

Jika instance gagal dibuat karena kesalahan validasi skema, verifikasi instance cocok dengan persyaratan skema RGD.

 **Periksa kesalahan validasi**:

```
# Attempt to create instance and view error
kubectl apply -f instance.yaml

# View existing instance validation status
kubectl describe custom-kind
         my-instance | grep -A 5 "Validation"
```

 **Masalah validasi** umum:
+  **Bidang wajib hilang**: Instance tidak menyediakan semua bidang skema yang diperlukan
+  **Ketidakcocokan tipe**: Menyediakan string di mana bilangan bulat diharapkan
+  Nilai **enum tidak valid: Menggunakan nilai** yang tidak ada dalam daftar yang diizinkan
+  **Ketidakcocokan pola**: String tidak cocok dengan pola regex

 **Tinjau skema RGD**:

```
# View the schema definition
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'
```

Pastikan instans Anda menyediakan semua bidang wajib dengan tipe yang benar.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [pertimbangan kro untuk EKS](kro-considerations.md)- pertimbangan kro dan praktik terbaik
+  [Konfigurasikan izin kro](kro-permissions.md)- Konfigurasikan RBAC untuk tim platform dan aplikasi
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan siklus hidup sumber daya
+  [Memecahkan Masalah Kemampuan EKS](capabilities-troubleshooting.md)- Panduan pemecahan masalah kemampuan umum

# Membandingkan Kemampuan EKS untuk kro dengan kro yang dikelola sendiri
<a name="kro-comparison"></a>

Kemampuan EKS untuk kro menyediakan fungsionalitas yang sama dengan kro yang dikelola sendiri, tetapi dengan keunggulan operasional yang signifikan. Untuk perbandingan umum Kemampuan EKS vs solusi yang dikelola sendiri, lihat[Pertimbangan Kemampuan EKS](capabilities-considerations.md).

Kemampuan EKS untuk kro menggunakan pengontrol kro hulu yang sama dan sepenuhnya kompatibel dengan kro hulu. ResourceGraphDefinitions, ekspresi CEL, dan komposisi sumber daya bekerja secara identik. Untuk dokumentasi dan contoh kro lengkap, lihat dokumentasi [kro](https://kro.run/docs/overview).

## Jalur migrasi
<a name="_migration_path"></a>

Anda dapat bermigrasi dari kro yang dikelola sendiri ke kemampuan terkelola tanpa downtime.

**penting**  
Sebelum bermigrasi, pastikan pengontrol kro yang dikelola sendiri menjalankan versi yang sama dengan Kemampuan EKS untuk kro. Periksa versi kemampuan di konsol EKS atau gunakan`aws eks describe-capability`, lalu tingkatkan instalasi yang dikelola sendiri agar sesuai. Ini mencegah masalah kompatibilitas selama migrasi.

1. Perbarui pengontrol kro yang dikelola sendiri untuk digunakan `kube-system` untuk sewa pemilihan pemimpin:

   ```
   helm upgrade --install kro \
     oci://ghcr.io/awslabs/kro/kro-chart \
     --namespace kro \
     --set leaderElection.namespace=kube-system
   ```

   Ini memindahkan sewa pengontrol`kube-system`, memungkinkan kemampuan terkelola untuk berkoordinasi dengannya.

1. Buat kemampuan kro di cluster Anda (lihat[Buat kemampuan kro](create-kro-capability.md))

1. Kemampuan terkelola mengenali yang ada ResourceGraphDefinitions dan contoh, mengambil alih rekonsiliasi

1. Secara bertahap turunkan atau hapus penerapan kro yang dikelola sendiri:

   ```
   helm uninstall kro --namespace kro
   ```

Pendekatan ini memungkinkan kedua pengendali untuk hidup berdampingan dengan aman selama migrasi. Kemampuan yang dikelola secara otomatis mengadopsi ResourceGraphDefinitions dan contoh yang sebelumnya dikelola oleh kro yang dikelola sendiri, memastikan rekonsiliasi berkelanjutan tanpa konflik.

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Buat kemampuan kro](create-kro-capability.md)- Buat sumber daya kemampuan kro
+  [konsep kro](kro-concepts.md)- Memahami konsep kro dan komposisi sumber daya

# Memecahkan Masalah Kemampuan EKS
<a name="capabilities-troubleshooting"></a>

Topik ini memberikan panduan pemecahan masalah umum untuk Kemampuan EKS, termasuk pemeriksaan kesehatan kemampuan, masalah umum, dan tautan ke pemecahan masalah khusus kemampuan.

**catatan**  
Kemampuan EKS sepenuhnya dikelola dan dijalankan di luar cluster Anda. Anda tidak memiliki akses ke log pengontrol atau ruang nama pengontrol. Pemecahan masalah berfokus pada kesehatan kemampuan, status sumber daya, dan konfigurasi.

## Pendekatan pemecahan masalah umum
<a name="_general_troubleshooting_approach"></a>

Saat memecahkan masalah Kemampuan EKS, ikuti pendekatan umum ini:

1.  **Periksa kesehatan kemampuan**: Gunakan `aws eks describe-capability` untuk melihat status kemampuan dan masalah kesehatan

1.  **Verifikasi status sumber daya**: Periksa sumber daya Kubernetes (CRDs) yang Anda buat untuk mengetahui kondisi dan peristiwa status

1.  **Tinjau izin IAM**: Pastikan Peran Kemampuan memiliki izin yang diperlukan

1.  **Periksa konfigurasi**: Verifikasi konfigurasi khusus kemampuan sudah benar

## Periksa kemampuan kesehatan
<a name="_check_capability_health"></a>

Semua Kemampuan EKS memberikan informasi kesehatan melalui konsol EKS dan `describe-capability` API.

 **Konsol**:

1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/ rumah\$1/cluster.

1. Pilih nama cluster Anda.

1. Pilih tab **Observability**.

1. Pilih **Monitor cluster**.

1. Pilih tab **Kemampuan** untuk melihat kesehatan dan status untuk semua kemampuan.

Tab Kemampuan menunjukkan:
+ Nama dan jenis kemampuan
+ Status saat ini
+ Masalah Kesehatan, dengan deskripsi

 ** AWS CLI**:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

Respons meliputi:
+  **status: Status** kemampuan saat ini (`CREATING`,`ACTIVE`,`UPDATING`,`DELETING`,`CREATE_FAILED`,`UPDATE_FAILED`)
+  **Kesehatan**: Informasi kesehatan termasuk masalah yang terdeteksi oleh kemampuan

## Status kemampuan umum
<a name="_common_capability_statuses"></a>

 **MENCIPTAKAN**: Kemampuan sedang diatur.

 **AKTIF**: Kemampuan berjalan dan siap digunakan. Jika sumber daya tidak berfungsi seperti yang diharapkan, periksa status sumber daya dan izin IAM.

 **MEMPERBARUI**: Perubahan konfigurasi sedang diterapkan. Tunggu statusnya kembali`ACTIVE`.

 **CREATE\$1FAILED** atau **UPDATE\$1FAILED: Penyiapan atau pembaruan mengalami** kesalahan. Periksa bagian kesehatan untuk detailnya. Penyebab umum:
+ Kebijakan kepercayaan peran IAM salah atau tidak ada
+ Peran IAM tidak ada atau tidak dapat diakses
+ Masalah akses klaster
+ Parameter konfigurasi tidak valid

## Verifikasi status sumber daya Kubernetes
<a name="_verify_kubernetes_resource_status"></a>

Kemampuan EKS membuat dan mengelola Kubernetes Custom Resource Definitions (CRDs) di klaster Anda. Saat memecahkan masalah, periksa status sumber daya yang Anda buat:

```
# List resources of a specific type
kubectl get resource-kind -A

# Describe a specific resource to see conditions and events
kubectl describe resource-kind
         resource-name -n namespace

# View resource status conditions
kubectl get resource-kind
         resource-name -n namespace -o jsonpath='{.status.conditions}'

# View events related to the resource
kubectl get events --field-selector involvedObject.name=resource-name -n namespace
```

Kondisi status sumber daya memberikan informasi tentang:
+ Apakah sumber daya sudah siap
+ Setiap kesalahan yang ditemui
+ Negara rekonsiliasi saat ini

## Tinjau izin IAM dan akses klaster
<a name="_review_iam_permissions_and_cluster_access"></a>

Banyak masalah kemampuan berasal dari masalah izin IAM atau konfigurasi akses cluster yang hilang. Verifikasi izin Peran Kemampuan dan entri akses klaster.

### Periksa izin peran IAM
<a name="_check_iam_role_permissions"></a>

Verifikasi Peran Kemampuan memiliki izin yang diperlukan:

```
# List attached managed policies
aws iam list-attached-role-policies --role-name my-capability-role

# List inline policies
aws iam list-role-policies --role-name my-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-capability-role --policy-name policy-name

# View the role's trust policy
aws iam get-role --role-name my-capability-role --query 'Role.AssumeRolePolicyDocument'
```

Kebijakan kepercayaan harus memungkinkan kepala `capabilities.eks.amazonaws.com` layanan:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

### Periksa Entri Akses EKS dan Kebijakan Akses
<a name="_check_eks_access_entries_and_access_policies"></a>

Semua kemampuan memerlukan Entri Akses EKS dan Kebijakan Akses yang tepat di klaster tempat mereka beroperasi.

 **Verifikasi Entri Akses ada**:

```
aws eks list-access-entries \
  --cluster-name my-cluster \
  --region region-code
```

Cari Peran Kemampuan ARN dalam daftar. Jika hilang, kemampuan tidak dapat mengakses cluster.

 **Periksa Kebijakan Akses yang dilampirkan pada entri**:

```
aws eks list-associated-access-policies \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:role/my-capability-role \
  --region region-code
```

Semua kemampuan memerlukan Kebijakan Akses yang sesuai:
+  **ACK**: Membutuhkan izin untuk membuat dan mengelola sumber daya Kubernetes
+  **kro**: Membutuhkan izin untuk membuat dan mengelola sumber daya Kubernetes
+  **Argo CD**: Membutuhkan izin untuk membuat dan mengelola Aplikasi, dan memerlukan Entri Akses pada kluster target jarak jauh untuk penerapan multi-cluster

 **Untuk penerapan multi-cluster Argo CD**:

Jika menerapkan ke klaster jarak jauh, verifikasi Peran Kemampuan memiliki Entri Akses pada setiap klaster target:

```
# Check Access Entry on target cluster
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::111122223333:role/argocd-capability-role \
  --region region-code
```

Jika Entri Akses hilang pada cluster target, Argo CD tidak dapat menyebarkan aplikasi ke sana. Lihat [Daftarkan cluster target](argocd-register-clusters.md) untuk detail konfigurasi.

## Pemecahan masalah khusus kemampuan
<a name="_capability_specific_troubleshooting"></a>

Untuk panduan pemecahan masalah terperinci khusus untuk setiap jenis kemampuan:
+  [Memecahkan masalah dengan kemampuan ACK](ack-troubleshooting.md)- Memecahkan masalah pembuatan sumber daya ACK, izin IAM, dan akses lintas akun
+  [Memecahkan masalah dengan kemampuan Argo CD](argocd-troubleshooting.md)- Memecahkan masalah sinkronisasi aplikasi, otentikasi repositori, dan penerapan multi-cluster
+  [Memecahkan masalah dengan kemampuan kro](kro-troubleshooting.md)- Memecahkan masalah, ekspresi CEL ResourceGraphDefinitions, dan izin RBAC

## Masalah umum di semua kemampuan
<a name="_common_issues_across_all_capabilities"></a>

### Kemampuan terjebak dalam status CREATING
<a name="_capability_stuck_in_creating_state"></a>

Jika kemampuan tetap dalam `CREATING` keadaan lebih lama dari yang diharapkan:

1. Periksa kesehatan kemampuan untuk masalah spesifik di konsol (tab **Observability>** **Monitor cluster** > **Capabilities**) atau gunakan AWS CLI:

   ```
   aws eks describe-capability \
     --region region-code \
     --cluster-name my-cluster \
     --capability-name my-capability-name \
     --query 'capability.health'
   ```

1. Verifikasi peran IAM ada dan memiliki kebijakan kepercayaan yang benar

1. Pastikan klaster Anda dapat diakses dan sehat

1. Periksa masalah tingkat cluster yang mungkin mencegah pengaturan kemampuan

### Sumber daya tidak dibuat atau diperbarui
<a name="_resources_not_being_created_or_updated"></a>

Jika kemampuannya `ACTIVE` tetapi sumber daya tidak dibuat atau diperbarui:

1. Periksa status sumber daya untuk kondisi kesalahan

1. Verifikasi izin IAM untuk AWS layanan tertentu (ACK) atau repositori (Argo CD)

1. Periksa izin RBAC untuk membuat sumber daya dasar (kro)

1. Tinjau spesifikasi sumber daya untuk kesalahan validasi

### Kesehatan kemampuan menunjukkan masalah
<a name="_capability_health_shows_issues"></a>

Jika `describe-capability` menunjukkan masalah kesehatan:

1. Baca deskripsi masalah dengan hati-hati—mereka sering menunjukkan masalah spesifik

1. Atasi akar penyebab (izin IAM, kesalahan konfigurasi, dll.)

1. Kemampuan akan pulih secara otomatis setelah masalah teratasi

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Bekerja dengan sumber daya kemampuan](working-with-capabilities.md)- Mengelola sumber daya kemampuan
+  [Memecahkan masalah dengan kemampuan ACK](ack-troubleshooting.md)- Pemecahan masalah khusus ACK
+  [Memecahkan masalah dengan kemampuan Argo CD](argocd-troubleshooting.md)- Pemecahan masalah khusus CD Argo
+  [Memecahkan masalah dengan kemampuan kro](kro-troubleshooting.md)- Pemecahan masalah khusus kro
+  [Pertimbangan keamanan untuk Kemampuan EKS](capabilities-security.md)- Praktik terbaik keamanan untuk kemampuan