

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

# Produk berbasis kontainer pada AWS Marketplace
<a name="container-based-products"></a>

**penting**  
Pada 1 Maret 2026, AWS Marketplace akan menghentikan Peluncuran Cepat untuk penerapan bagan Helm di Amazon EKS. Penerapan yang ada akan terus berjalan normal. Anda masih dapat menerapkan menggunakan perintah Helm standar atau gambar kontainer di Amazon ECS.

AWS Marketplace mendukung produk perangkat lunak yang menggunakan wadah Docker. Produk kontainer terdiri dari opsi pengiriman yang merupakan sekumpulan gambar kontainer dan templat penyebaran yang berjalan bersamaan. Anda mengirimkan setidaknya satu opsi pengiriman untuk produk Anda, dengan maksimal empat. Untuk setiap opsi pengiriman, Anda menyediakan satu set gambar kontainer, petunjuk penggunaan, dan tautan ke templat penerapan bagi pelanggan untuk meluncurkan opsi pengiriman tersebut. Topik ini memberikan informasi tentang produk berbasis kontainer di. AWS Marketplace

AWS Marketplace pembeli melihat opsi pengiriman yang tersedia di halaman detail produk yang dipublikasikan yang tersedia bagi mereka. Setelah mereka berlangganan produk dan memilih opsi pengiriman pilihan mereka, pembeli melihat informasi dan instruksi untuk meluncurkan dan menggunakan produk. Untuk opsi pengiriman gambar kontainer, pembeli melihat tautan ke templat penerapan dan gambar URLs kontainer yang tersedia. Mereka juga menerima instruksi tentang cara menarik gambar kontainer individu. Untuk opsi pengiriman bagan Helm, pembeli akan melihat step-by-step instruksi untuk meluncurkan menggunakan Helm.

Untuk panduan tentang pengalaman membeli, Anda dapat merujuk ke video ini: [Menyebarkan Kontainer AWS Marketplace di Amazon ECS Clusters](https://www.youtube.com/watch?v=XaiUAiQQJtk) (3:34).

Anda dapat menemukan, berlangganan, dan menerapkan aplikasi Kubernetes pihak ketiga dari klaster Kubernetes mana pun AWS Marketplace di lingkungan apa pun. Anda dapat menerapkan aplikasi Kubernetes pihak ketiga di Amazon Elastic Container Service (Amazon ECS) Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), dan lokal menggunakan Amazon EKS Anywhere (EKS AWS Fargate Anywhere). Anda juga dapat menerapkannya di klaster Kubernetes yang dikelola sendiri di tempat atau di Amazon Elastic Compute Cloud (Amazon). EC2

Anda dapat menjalankan produk kontainer Free and Bring Your Own License model (BYOL) pada runtime yang kompatibel dengan Docker.

**Topics**
+ [Mendapatkan bantuan](#container-help)
+ [Memulai dengan Produk Kontainer](container-product-getting-started.md)
+ [Persyaratan produk berbasis kontainer untuk AWS Marketplace](container-product-policies.md)
+ [Harga produk kontainer untuk AWS Marketplace](pricing-container-products.md)
+ [Integrasi penagihan, pengukuran, dan lisensi produk kontainer](container-products-billing-integration.md)
+ [Pemberitahuan Amazon SNS untuk produk kontainer](container-notification.md)

## Mendapatkan bantuan
<a name="container-help"></a>

Untuk bantuan dengan produk kontainer Anda, hubungi mitra pengembangan bisnis Anda untuk AWS Marketplace atau tim [Operasi AWS Marketplace Penjual](https://aws.amazon.com/marketplace/management/contact-us/).

# Memulai dengan Produk Kontainer
<a name="container-product-getting-started"></a>

Sebagai AWS Marketplace penjual, Anda dapat membuat produk perangkat lunak berbasis kontainer. Produk kontainer terdiri dari opsi pengiriman yang merupakan sekumpulan gambar kontainer dan templat penerapan yang berjalan bersamaan. Topik berikut menunjukkan kepada Anda bagaimana memulai dengan produk kontainer.
+ [Siklus hidup produk](#container-product-lifecycle)
+ [Prasyarat](#container-prereq)
+  [Langkah 1: Buat ID produk dan kode produk untuk produk kontainer Anda](#create-initial-container-product) 
+ [Langkah 2: Buat daftar awal](#container-initial-listing)
+ [Langkah 3: Tambahkan versi awal produk Anda](#container-add-version-gs)
+ [Langkah 4: (Hanya untuk produk berbayar) Integrasikan pengukuran atau harga kontrak](#getting-started-integrate-metering)
+ [Langkah selanjutnya](#getting-started-integrate-metering)
+ [Pemindaian produk kontainer untuk masalah keamanan](#container-security)

## Siklus hidup produk
<a name="container-product-lifecycle"></a>

Saat Anda membuat produk AWS Marketplace, produk tersebut awalnya diterbitkan dengan visibilitas terbatas sehingga akun di daftar izin dapat melihatnya, termasuk akun yang membuat produk. Ketika Anda siap, Anda dapat mempublikasikannya ke AWS Marketplace katalog untuk memungkinkan pembeli berlangganan dan membeli produk Anda.

Pada halaman [produk Server](https://aws.amazon.com/marketplace/management/products/server), Anda dapat melihat daftar produk Anda. Bergantung pada tahap apa, produk akan memiliki salah satu status berikut.
+ **Pementasan** — Produk yang tidak lengkap yang masih Anda tambahkan informasinya. Pada **Simpan pertama dan keluar** dari pengalaman swalayan, permintaan perubahan yang berhasil membuat produk yang tidak dipublikasikan dengan informasi dari langkah-langkah lengkap yang Anda kirimkan. Dari status ini, Anda dapat terus menambahkan informasi ke produk atau mengubah detail yang sudah dikirimkan melalui permintaan perubahan.
+ **Terbatas** — Sebuah produk selesai setelah diserahkan ke sistem dan melewati semua validasi dalam sistem. Kemudian produk dirilis ke status **Terbatas**. Pada titik ini, produk memiliki halaman detail yang hanya dapat diakses oleh akun Anda dan siapa pun yang Anda izinkan. Anda dapat menguji produk Anda melalui halaman detail. Untuk informasi atau bantuan lebih lanjut, hubungi tim [Operasi AWS Marketplace Penjual](https://aws.amazon.com/marketplace/management/contact-us/).
+ **Publik** — Saat Anda siap mempublikasikan produk sehingga pembeli dapat melihat dan berlangganan produk, Anda menggunakan permintaan perubahan **visibilitas Perbarui**. Permintaan ini memulai alur kerja untuk tim Operasi AWS Marketplace Penjual untuk meninjau dan mengaudit produk Anda terhadap AWS kebijakan. Setelah produk disetujui dan permintaan perubahan diproses, produk dipindahkan dari status **Terbatas** ke **Publik**. Untuk informasi tentang AWS pedoman, lihat[Persyaratan produk berbasis kontainer untuk AWS Marketplace](container-product-policies.md).
+ **Dibatasi** - Jika Anda ingin menghentikan pengguna baru berlangganan produk Anda, Anda dapat membatasi produk dengan menggunakan permintaan perubahan **visibilitas Perbarui**. Status **Terbatas** berarti bahwa pengguna yang terdaftar diizinkan yang ada dapat terus menggunakan produk. Namun, produk tidak akan lagi terlihat oleh publik atau tersedia untuk pengguna baru. 

## Prasyarat
<a name="container-prereq"></a>

Sebelum memulai, Anda harus menyelesaikan prasyarat berikut:

1. Akses dan gunakan [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/). Ini adalah alat yang Anda gunakan untuk mendaftar sebagai penjual dan mengelola produk yang Anda jual AWS Marketplace. Untuk informasi selengkapnya, lihat [Portal Manajemen AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html#management-portal).

1. Daftar sebagai penjual, dan kirimkan informasi pajak dan perbankan Anda. Untuk informasi selengkapnya, lihat [Proses pendaftaran](registration-process.md).

1. Buat setidaknya satu kontainer di Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), atau. AWS Fargate Pastikan Anda memiliki tautan untuk gambar terkait.

1. Rencanakan bagaimana Anda akan membuat dan mengintegrasikan produk kontainer Anda AWS Marketplace.

   Kami menyarankan Anda merencanakan strategi penetapan harga, hak, dan pengukuran Anda sebelum mempublikasikan produk Anda secara publik.
   + Untuk informasi tentang persyaratan untuk produk berbasis kontainer, lihat [Persyaratan produk berbasis kontainer untuk AWS Marketplace](container-product-policies.md).
   + Untuk informasi tentang pengaturan harga untuk produk Anda, lihat [Harga produk kontainer untuk AWS Marketplace](pricing-container-products.md).
   + Untuk informasi tentang pengukuran khusus untuk produk berbasis kontainer berbayar, lihat. [Pengukuran per jam dan kustom dengan AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products)

## Ikhtisar: Buat produk kontainer
<a name="create-container-product"></a>

Membuat Produk kontainer melibatkan langkah-langkah berikut:

1. [Langkah 1: Buat ID produk dan kode produk untuk produk kontainer Anda](#create-initial-container-product)

1. [Langkah 2: Buat daftar awal](#container-initial-listing)

1. [Langkah 3: Tambahkan versi awal produk Anda](#container-add-version-gs)

1. [Langkah 4: (Hanya untuk produk berbayar) Integrasikan pengukuran atau harga kontrak](#getting-started-integrate-metering)

1. [Perbarui visibilitas produk](#container-product-visibility)

Untuk informasi tentang siklus hidup produk, lihat. [Siklus hidup produk](#container-product-lifecycle)

## Langkah 1: Buat ID produk dan kode produk untuk produk kontainer Anda
<a name="create-initial-container-product"></a>

Untuk memulai dengan produk kontainer, Anda harus membuat ID produk dan catatan kode produk AWS Marketplace. ID produk digunakan untuk melacak produk Anda sepanjang siklus hidupnya.

Gunakan prosedur berikut untuk membuat produk kontainer baru di Portal Manajemen AWS Marketplace, dan menghasilkan ID produk.

**catatan**  
Proses ini juga menciptakan kunci publik untuk wadah Anda yang berpasangan dengan produk Anda.

**Untuk membuat ID produk kontainer**

1. Buka browser web dan masuk ke file [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Dari bilah menu, pilih **Produk**, dan pilih **Server**.

1. Pilih **Buat produk server** dan kemudian pilih **Container**.

1. Hasilkan ID dan kode produk kontainer.
**catatan**  
(Opsional) Anda dapat menandai produk Anda untuk otorisasi berbasis tag. Untuk informasi selengkapnya, lihat [Menandai sumber daya AWS](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html).

1. Pilih **Lanjutkan** untuk terus membuat produk Anda.

## Langkah 2: Buat daftar awal
<a name="container-initial-listing"></a>

Setelah membuat ID produk, kode produk, dan kunci publik, Anda akan menggunakan wizard untuk membuat daftar awal.

1. Berikan informasi produk untuk daftar produk Anda.

1. Tentukan model harga untuk produk Anda.
**catatan**  
Untuk informasi lebih lanjut, lihat [Harga produk kontainer](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html).
**catatan**  
Untuk produk berbayar, produk Anda akan dimulai dengan harga \$10,01 untuk memungkinkan Anda dan tim Operasi AWS Marketplace Penjual untuk menguji produk tanpa menimbulkan biaya tinggi. Anda akan memberikan harga sebenarnya saat Anda go public.

1. Berikan informasi penawaran tambahan, termasuk kebijakan pengembalian dana, EULA, dan ketersediaan penawaran.

1. Tambahkan repositori awal untuk produk kontainer Anda.

1. Pilih **Kirim** pada langkah terakhir untuk memindahkan produk ke Visibilitas terbatas.
**catatan**  
Produk kontainer Anda awalnya dibuat dengan versi placeholder. Anda akan menambahkan versi final ketika produk memiliki visibilitas terbatas. 

## Langkah 3: Tambahkan versi awal produk Anda
<a name="container-add-version-gs"></a>

Produk Anda mungkin memiliki beberapa versi selama masa pakainya. Setiap versi memiliki satu set citra kontainer yang khusus untuk versi tersebut. Untuk menambahkan versi awal produk Anda, lihat[Menambahkan versi baru produk kontainer Anda AWS Marketplace](container-add-version.md). 

## Langkah 4: (Hanya untuk produk berbayar) Integrasikan pengukuran atau harga kontrak
<a name="getting-started-integrate-metering"></a>

Untuk produk berbasis kontainer dengan harga penggunaan, Anda menggunakan [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)untuk memeriksa hak untuk menggunakan produk Anda dan penggunaan pengukuran untuk penagihan. Anda harus mengukur model harga yang Anda buat saat mengatur informasi harga Anda. Untuk informasi selengkapnya, lihat [Pengukuran per jam dan kustom dengan AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products).

### Harga kontrak
<a name="container-integrate-LM"></a>

Untuk produk berbasis kontainer dengan harga kontrak, Anda menggunakan lisensi AWS License Manager untuk mengaitkan lisensi dengan produk Anda. 

Untuk informasi lebih lanjut tentang mengintegrasikan dengan AWS License Manager, lihat[Harga kontrak untuk produk kontainer dengan AWS License Manager](container-license-manager-integration.md).

## Langkah 5: Perbarui visibilitas produk
<a name="container-product-visibility-allowlist"></a>

Saat Anda membuat produk AWS Marketplace, produk tersebut awalnya diterbitkan dengan visibilitas terbatas sehingga akun di daftar izin dapat melihatnya, termasuk akun yang membuat produk. Anda dapat memperbarui visibilitas produk untuk memungkinkan pembeli berlangganan dan membeli produk Anda. Bergantian Anda dapat memperbarui daftar izinkan produk untuk ditambahkan. Akun AWS Topik ini menunjukkan kepada Anda bagaimana mengelola pembeli mana yang dapat melihat produk Anda AWS Marketplace.

Untuk informasi selengkapnya tentang visibilitas produk dan siklus hidup, lihat. [Siklus hidup produk](#container-product-lifecycle)

**Topics**
+ [Perbarui visibilitas produk](#container-product-visibility)
+ [Memperbarui daftar yang diizinkan Akun AWS IDs](#container-update-allowlist)

### Perbarui visibilitas produk
<a name="container-product-visibility"></a>

**Untuk memperbarui visibilitas**

1. Buka Portal Manajemen AWS Marketplace at[https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/), lalu masuk ke akun penjual Anda.

1. Buka halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pada tab Produk **server saat ini, pilih produk** berbasis kontainer yang ingin Anda modifikasi.

1. Dari menu tarik-turun **Permintaan perubahan**, pilih **Perbarui** visibilitas.
**catatan**  
Anda dapat meminta agar produk dipindahkan dari status **Terbatas** ke status **Publik** dengan menggunakan permintaan perubahan ini. Namun, permintaan perubahan harus melalui proses persetujuan tim Operasi AWS Marketplace Penjual untuk dipindahkan ke **Publik**.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. Ketika permintaan selesai, status menjadi **Berhasil**.

### Memperbarui daftar yang diizinkan Akun AWS IDs
<a name="container-update-allowlist"></a>

Anda dapat mengubah daftar Akun AWS IDs yang dapat melihat produk Anda dalam keadaan terbatas. Akun yang terdaftar di izinkan menampilkan lencana Terbatas di samping versi produk pada halaman detail produk.

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui** daftar yang diizinkan. Daftar akun saat ini yang diizinkan terdaftar ditampilkan.

1. Di Akun AWS bidang **Allowlisted**, masukkan Akun AWS IDs dan pisahkan menggunakan koma.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.**

## Langkah selanjutnya
<a name="container-next-steps"></a>

Setelah membuat produk kontainer, Anda dapat menggunakan informasi dalam topik berikut untuk mengonfigurasi dan mengelolanya:
+ [Memperbarui informasi produk untuk produk kontainer Anda di AWS Marketplace](update-container-product-info.md)
+ [Menambahkan versi baru produk kontainer Anda AWS Marketplace](container-add-version.md)
+ [Mengelola harga produk kontainer di AWS Marketplace](container-pricing.md)
+ [Memperbarui ketersediaan produk kontainer menurut negara di AWS Marketplace](container-update-offer-avail-country.md)
+ [Memperbarui perjanjian lisensi pengguna akhir (EULA) Anda untuk produk kontainer AWS Marketplace](container-update-eula.md)
+ [Menguji dan melepaskan produk kontainer Anda AWS Marketplace](test-release-product.md)

## Pemindaian produk kontainer untuk masalah keamanan
<a name="container-security"></a>

Saat Anda membuat permintaan perubahan untuk menambahkan versi baru ke produk kontainer Anda, kami memindai gambar kontainer yang disertakan dalam versi baru tersebut dan memeriksa kerentanan keamanan. Untuk melakukan ini, kami melakukan pemindaian layer-by-layer statis pada gambar. Jika kami menemukan kerentanan kritis dengan vektor risiko yang dapat dieksploitasi dari jarak jauh, kami menyediakan daftar masalah yang ditemukan. Kami sangat menyarankan agar Anda melakukan analisis keamanan Anda sendiri menggunakan pemindai gambar kontainer sepertiClair,Twistlock,Aqua Security, atau Trend Micro untuk menghindari penundaan dalam proses konsumsi dan penerbitan. 

Pilihan citra dasar Anda untuk membangun citra kontainer Anda dapat memiliki pengaruh yang signifikan pada profil keamanan citra akhir. Jika Anda memilih citra dasar yang sudah diketahui kerentanan kritis, mereka akan ditAndai karena lapisan dasar, bahkan jika lapisan perangkat lunak aplikasi Anda bersih. Kami menyarankan Anda memverifikasi bahwa Anda memulai dengan wadah dasar yang bebas dari kerentanan sebelum Anda membuat gambar Anda dan mengirimkannya ke AWS Marketplace. 

# Memperbarui informasi produk untuk produk kontainer Anda di AWS Marketplace
<a name="update-container-product-info"></a>

Setelah Anda membuat ID produk dan menetapkan harga, Anda dapat mengedit informasi produk Anda, termasuk apa yang akan dilihat pelanggan tentang produk kontainer Anda di AWS Marketplace. Misalnya, jika versi baru memodifikasi deskripsi atau sorotan produk, Anda dapat mengedit informasi produk dengan data baru. Anda juga dapat memperbarui informasi produk lainnya, termasuk judul produk, deskripsi SKU, kategori, kata kunci, dan lainnya. Prosedur berikut menguraikan membuat detail produk untuk produk Anda.

**Untuk membuat atau memperbarui detail produk untuk produk kontainer Anda**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Pilih **Server** dari menu **Produk**. 

1. Pada tab **Produk Server**, pilih produk yang ingin Anda modifikasi.

1. Dari menu menurun **Minta perubahan**, pilih **Perbarui informasi produk**.

1. Perbarui salah satu bidang berikut yang ingin Anda ubah:
   + **Judul produk**
   + **SKU**
   + **Deskripsi singkat**
   + **Deskripsi panjang**
   + **URL gambar logo produk**
   + **Sorotan**
   + **Kategori produk**
   + **Kata kunci**
   + **URL video produk**
   + **Sumber Daya**
   + **Informasi Support**
**catatan**  
Gambar URLs harus berada dalam bucket Amazon S3 yang dapat diakses publik. Untuk detail lebih lanjut tentang format logo, lihat [Persyaratan logo perusahaan dan produk](product-submission.md#seller-and-product-logos).

1. Pilih **Kirim**.

1. Verifikasi bahwa permintaan muncul di tab **Permintaan** dengan status **Dalam tinjauan**. Anda mungkin perlu me-refresh halaman untuk melihat permintaan pada daftar.

Anda dapat memeriksa status permintaan Anda kapan saja dari tab **Permintaan** halaman [Produk server](https://aws.amazon.com/marketplace/management/products/server).

# Menambahkan versi baru produk kontainer Anda AWS Marketplace
<a name="container-add-version"></a>

Sebagai AWS Marketplace penjual, Anda dapat menambahkan versi baru produk kontainer, mengelola versi, dan memperbarui informasi versi. Produk Anda mungkin memiliki beberapa versi selama masa pakainya. Setiap versi memiliki satu set citra kontainer yang khusus untuk versi tersebut. Topik berikut menunjukkan cara mengelola versi produk untuk produk kontainer Anda.

**catatan**  
Anda tidak dapat menambahkan versi ke produk Anda sampai Anda telah membuat ID produk dan harga untuk produk Anda. Untuk informasi lebih lanjut tentang langkah-langkah tersebut, lihat[Langkah 1: Buat ID produk dan kode produk untuk produk kontainer Anda](container-product-getting-started.md#create-initial-container-product). 

**Topics**
+ [Langkah 1: Tambahkan repositori](#add-repositories)
+ [Langkah 2: Unggah gambar kontainer dan artefak ke repositori](#upload-resources)
+ [Langkah 3: Tambahkan versi baru ke produk kontainer Anda](#add-new-version)
+ [Langkah 4: Perbarui informasi versi](#container-product-updating-version)
+ [Batasi versi add-on Amazon EKS Anda](#restriciting-version-eks-addon)

## Langkah 1: Tambahkan repositori
<a name="add-repositories"></a>

Citra kontainer dan artefak lainnya untuk produk Anda disimpan dalam repositori di AWS Marketplace. Biasanya, Anda membuat satu repositori untuk setiap artefak yang dibutuhkan, tetapi repositori dapat menyimpan beberapa versi artefak (dengan tag yang berbeda). 

**catatan**  
Semua citra dalam deployment produk Anda harus menggunakan citra dari repositori AWS Marketplace .

Prosedur berikut menjelaskan cara menambahkan repositori yang diperlukan di. AWS Marketplace

**Untuk menambahkan repositori**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Pilih **Server** dari menu **Produk**.

1. Pada tab **Produk Server**, pilih produk yang ingin Anda ubah, lalu pilih **Tambahkan repositori** dari menu tarik-turun **Permintaan perubahan**.

1. Masukkan nama repositori yang ingin Anda buat. Jika Anda ingin membuat lebih dari satu repositori baru:
   + Pilih **Tambahkan repositori baru untuk setiap repositori** tambahan.
   + Berikan nama yang unik. Nama unik yang Anda pilih harus ada di semua produk di akun penjual Anda.
**catatan**  
Repositori akan memiliki struktur ini:. `<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>` Ketika Anda menambahkan item ke repositori (dalam prosedur berikut), mereka akan mendapatkan tag dan memiliki struktur ini:. `<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>:<tag>`   
`repositoryID`Ini adalah ID internal untuk AWS Marketplace.
`sellerName`Ini didasarkan pada nama yang Anda buat untuk akun penjual Anda. Ketika nama tampilan penjual Anda menghasilkan awalan repositori yang tidak valid`sellerName`, AWS Marketplace secara otomatis mengganti UUID (Universalally Unique Identifier) sebagai pengganti nama penjual. Untuk mengubah awalan UUID di nama repositori Anda, hubungi tim operasi AWS Marketplace.
`respositoryName`Itu didefinisikan dalam langkah ini.
`tag`Ini diatur saat Anda mengunggah artefak ke repositori.

1. Pilih **Kirim**.

**catatan**  
Anda dapat memiliki hingga 70 repositori per produk.

Permintaan baru dibuat dan ditampilkan pada tab **Permintaan**. Setelah selesai, dalam beberapa menit, Anda dapat mulai menambahkan gambar kontainer dan artefak lainnya ke repositori yang telah Anda buat.

## Langkah 2: Unggah gambar kontainer dan artefak ke repositori
<a name="upload-resources"></a>

**Untuk mengunggah citra kontainer dan artefak ke repositori**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Dari menu **Produk**, pilih **Server**.

1. Pada tab **Produk Server**, pilih produk yang ingin Anda modifikasi.

1. Pilih **Tambahkan repositori** dari menu menurun **Minta perubahan**.

1. Pilih **Lihat repositori yang ada**.

1. Pilih repositori yang ingin Anda unggah.

1. Pilih **Lihat perintah push** untuk membuka daftar instruksi, termasuk perintah yang dapat Anda gunakan untuk mendorong gambar Docker kontainer dan Helm bagan ke repositori itu. 

   Untuk informasi umum tentang cara mendorong gambar kontainer dan artefak lainnya ke repositori, lihat [Mendorong gambar di Panduan Pengguna](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html) *Amazon Elastic Container Registry*.
**catatan**  
Anda dapat menggunakan operasi API Amazon Elastic Container Registry (Amazon ECR) Registry ECR) berikut saat memanggil atau: `docker pull` `docker push`  
`DescribeImages`— Gunakan ini untuk meninjau metadata tentang gambar dalam repositori.
`GetAuthorizationToken`— Gunakan untuk mengautentikasi sebelum mengunggah artefak ke repositori, lalu gunakan atau perintah. `docker pull` `docker push`
`ListImages`— Gunakan untuk melihat daftar gambar yang Anda dorong.

1. Gunakan perintah yang terdaftar untuk mendorong artefak yang diperlukan dari repositori lokal Anda ke repositori untuk produk AWS Marketplace Anda.
**catatan**  
**tag**Yang Anda berikan dalam `push` perintah digunakan untuk membedakan versi artefak yang Anda unggah ke repositori. Gunakan tag yang masuk akal untuk versi artefak adalah bagian dari.

1. Ulangi untuk setiap citra kontainer atau artefak yang Anda butuhkan dalam versi Anda.
**catatan**  
Versi Anda dapat menyertakan hingga 50 gambar kontainer atau artefak di setiap opsi pengiriman. Lihat prosedur berikut untuk informasi lebih lanjut tentang opsi pengiriman.

Setelah Anda mengunggah artefak Anda, Anda siap untuk membuat versi produk Anda. 

**catatan**  
Citra kontainer Anda dipindai secara otomatis untuk melihat apakah citra tersebut memenuhi [Persyaratan produk berbasis kontainer untuk AWS Marketplace](container-product-policies.md). Untuk informasi selengkapnya, lihat [Pemindaian produk kontainer untuk masalah keamanan](container-product-getting-started.md#container-security).

### Menambahkan opsi pengiriman baru
<a name="add-delivery-option"></a>

Setiap versi produk kontainer Anda akan membutuhkan opsi pengiriman. Opsi pengiriman menentukan opsi penyebaran yang tersedia untuk pembeli. Bergantung pada salah satu opsi pengiriman di bawah ini, Anda perlu mengunggah artefak yang sesuai ke dalam repositori.
+ Untuk opsi pengiriman **gambar Container**, unggah semua gambar kontainer yang diperlukan untuk instalasi produk ke dalam repositori Amazon Elastic Container Registry (Amazon ECR) yang dibuat di konsol. AWS Marketplace 
+ Untuk opsi pengiriman **Helmbagan**, unggah Helm bagan dan gambar kontainer ke repositori Amazon ECR yang dibuat di konsol. AWS Marketplace 
+ Untuk opsi pengiriman **add-on konsol Amazon EKS**, unggah Helm bagan dan gambar kontainer ke repositori Amazon ECR yang dibuat di konsol. AWS Marketplace 

## Langkah 3: Tambahkan versi baru ke produk kontainer Anda
<a name="add-new-version"></a>

**catatan**  
*Jika Anda menerima kesalahan saat menambahkan versi baru ke penampung, lihat [tabel Tambahkan Kesalahan Asinkron versi baru](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version) di Referensi.AWS Marketplace Catalog API *

**Cara menambahkan versi baru ke produk kontainer**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Pilih **Server** dari menu **Produk**.

1. Pada tab **Produk Server**, pilih produk yang ingin Anda tambahkan versinya. Kemudian pilih **Tambahkan versi baru** dari dropdown **Permintaan perubahan**.

1. Pada halaman **Tambahkan versi baru**, masukkan **Judul versi** dan **Catatan rilis** untuk versi Anda.

1. Setelah memasukkan detail versi, langkah selanjutnya adalah menambahkan opsi pengiriman. Opsi pengiriman adalah serangkaian instruksi dan informasi yang dapat digunakan pembeli untuk meluncurkan perangkat lunak dari versi produk Anda. Opsi pengiriman dikenal sebagai *opsi pemenuhan* kepada pembeli.
**catatan**  
Produk Anda dapat mendukung beberapa platform dengan gambar kontainer yang berbeda (misalnya, Kubernetes dan Ubuntu penerapan). Anda dapat membuat satu opsi pengiriman untuk setiap cara pelanggan dapat mengatur produk Anda, hingga empat opsi pengiriman per versi produk.

   1. Jika produk sudah memiliki opsi pengiriman di versi lain, Anda dapat menggunakan opsi yang ada sebagai templat untuk menambahkan opsi pengiriman ke versi baru. Di **opsi Pengiriman**, pilih opsi pengiriman yang ingin Anda tambahkan dari daftar. Anda dapat mengedit opsi menggunakan instruksi dalam langkah-langkah berikut.

   1. Untuk menambahkan opsi pengiriman baru, pilih **Opsi pengiriman baru**. Setelah menambahkan opsi, ikuti instruksi dalam langkah-langkah berikut untuk mengkonfigurasinya.

1. Pilih metode pengiriman untuk opsi pengiriman. Metode pengiriman menentukan bagaimana pembeli akan meluncurkan perangkat lunak Anda.
   + Untuk opsi pengiriman **gambar Container**, berikan jalur ke gambar kontainer di repositori Amazon Elastic Container Registry (Amazon ECR) yang dibuat di konsol. AWS Marketplace Pembeli menggunakan jalur gambar kontainer untuk meluncurkan perangkat lunak dengan menarik gambar langsung ke lingkungan mereka.
   + Untuk opsi pengiriman **Helmbagan**, berikan jalur ke Helm bagan di repositori Amazon ECR yang dibuat di konsol. AWS Marketplace Pembeli menginstal Helm grafik di lingkungan penyebaran mereka untuk meluncurkan perangkat lunak.
   + Untuk opsi pengiriman **add-on konsol Amazon EKS**, berikan jalur ke Helm bagan di repositori Amazon ECR yang dibuat di konsol. AWS Marketplace Pembeli menginstal wadah menggunakan konsol Amazon EKS atau add-on Amazon EKS asli APIs untuk meluncurkan perangkat lunak. Untuk informasi selengkapnya, lihat [Add-on Amazon EKS yang tersedia dari Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html#workloads-add-ons-available-eks).

   1. Untuk menambahkan opsi pengiriman **gambar Container**, lakukan langkah-langkah berikut:

      1. Dalam **gambar Container**, tambahkan URL Amazon ECR ke gambar kontainer yang berisi perangkat lunak versi produk.

      1. Dalam **judul opsi Pengiriman** dan **deskripsi opsi Deployment**, masukkan judul dan deskripsi untuk opsi pengiriman ini.

      1. Dalam **petunjuk Penggunaan**, masukkan informasi terperinci untuk membantu pembeli Anda menggunakan perangkat lunak Anda setelah meluncurkannya.

      1. Di **Layanan yang didukung**, pilih lingkungan tempat pembeli dapat meluncurkan perangkat lunak.

      1. Dalam **template Deployment**, tambahkan sumber daya yang dapat digunakan pembeli untuk meluncurkan perangkat lunak. Masukkan judul dan URL ke sumber daya untuk setiap template.

   1. Untuk menambahkan opsi pengiriman **Helmbagan**, lakukan langkah-langkah berikut:

      1. Dalam **Helmbagan**, tambahkan URL Amazon ECR ke Helm bagan yang akan dipasang pembeli di lingkungan penyebaran mereka untuk meluncurkan perangkat lunak Anda.

      1. Dalam **gambar Container**, tambahkan URL Amazon ECR ke gambar kontainer yang berisi perangkat lunak versi produk.

      1. Dalam **judul opsi Pengiriman** dan **deskripsi opsi Deployment**, masukkan judul dan deskripsi untuk opsi pengiriman ini.

      1. Dalam **petunjuk Penggunaan**, masukkan informasi terperinci untuk membantu pembeli Anda menggunakan perangkat lunak Anda setelah meluncurkannya.

      1. Di **Layanan yang didukung**, pilih lingkungan tempat pembeli dapat meluncurkan perangkat lunak.

      1. *Opsional -* Dalam **nama Helm rilis**, masukkan nama Kubernetes namespace tempat Helm bagan akan diinstal.

      1. *Opsional -* Dalam **namespace Helm instalasi**, masukkan nama untuk Helm rilis yang akan digunakan oleh perintah. `helm install`

      1. *Opsional -* Dalam **nama akun Kubernetes layanan**, masukkan nama akun Kubernetes layanan yang akan digunakan untuk terhubung ke AWS Identity and Access Management (IAM). Akun Kubernetes layanan memanggil AWS layanan seperti lisensi atau pengukuran.

      1. Dalam **parameter Override**, masukkan parameter yang akan digunakan dalam perintah Helm CLI yang meluncurkan perangkat lunak. Parameter ini memungkinkan pembeli untuk mengganti nilai default yang disediakan. Ada batas 15 parameter saat menggunakan Konsol AWS Marketplace Manajemen, tetapi tidak ada batasan saat menggunakan AWS Marketplace Catalog API. Untuk informasi selengkapnya, lihat [Menambahkan versi baru ke produk berbasis container](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version).
**catatan**  
Beberapa **parameter Override** diperlukan. Produk Amazon EKS Anywhere memerlukan **parameter Override** untuk rahasia lisensi dengan `DefaultValue` dari. `"${AWSMP_LICENSE_SECRET}"` Untuk produk berbayar, Anda harus memberikan satu **parameter Override** untuk konfigurasi akun layanan dengan `DefaultValue` dari. `"${AWSMP_SERVICE_ACCOUNT}"`

      1. Pilih **Sembunyikan kata sandi dan rahasia** untuk menutupi informasi sensitif di konsol, alat baris perintah, dan APIs. Untuk informasi selengkapnya, lihat dokumentasi `NoEcho` [parameter di Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) di *Panduan AWS CloudFormation Pengguna*.

   1. Untuk menambahkan opsi pengiriman **add-on konsol Amazon EKS**, pastikan artefak sesuai[Persyaratan untuk produk add-on Amazon EKS](container-product-policies.md#publishing-eks-add-on), lalu lakukan langkah-langkah berikut:
**catatan**  
Hanya satu opsi pengiriman add-on Amazon EKS yang didukung per versi. Anda tidak dapat menambahkan versi baru hingga versi saat ini yang Anda kerjakan dipublikasikan di konsol Amazon EKS.

      1. Dalam **Helmbagan**, tambahkan URL Amazon ECR ke Helm bagan yang akan dipasang pembeli di lingkungan penyebaran mereka untuk meluncurkan perangkat lunak Anda.

      1. Dalam **gambar Container**, tambahkan URL Amazon ECR ke gambar kontainer yang berisi perangkat lunak versi produk. Pastikan bahwa semua gambar dalam Helm bagan terdaftar.

      1. Dalam **judul opsi Pengiriman** dan **deskripsi opsi Deployment**, masukkan judul dan deskripsi untuk opsi pengiriman ini.

      1. Dalam **Visibilitas**, pertahankan nilai default **Limited dipilih**.

      1. Di **Add-on name**, masukkan nama unik untuk add-on ini. Nama add-on yang Anda masukkan akan ditambahkan dengan nama penjual saat ditampilkan di konsol Amazon EKS.

      1. Dalam **versi Add-on**, masukkan versi add-on yang akan terlihat saat menginstal atau memutakhirkan add-on ini. Ikuti formatnya`major.minor.patch`.

      1. Pada **tipe Add-on**, pilih kategori untuk add-on Anda dari daftar dropdown.

      1. Di **KubernetesVersi**, pilih semua Kubernetes versi yang akan didukung add-on Anda.

      1. Di **Arsitektur**, pilih arsitektur platform yang didukung add-on Anda. Opsi nya adalah **AMD64** dan **ARM64**. Kami merekomendasikan mendukung kedua arsitektur untuk memaksimalkan kompatibilitas. Jika add-on Anda tidak mendukung ARM64 perangkat, Anda harus menentukan tanggal yang direncanakan untuk menambahkan dukungan sebelum produk Anda dapat dipublikasikan di semua iklan Wilayah AWS.

      1. Di **Namespace**, masukkan Kubernetes namespace unik tempat add-on Anda akan diinstal. `kube-public`Ruang nama `default``kube-system`,, dan tidak didukung untuk menginstal add-on pihak ketiga.

      1. Dalam **parameter Environment Override**, Anda dapat memilih hingga 2 parameter lingkungan dari kerangka kerja add-on Amazon EKS. Anda dapat memetakan nama parameter dari values.yaml Anda ke variabel lingkungan ini, yaitu dan. `${AWS_REGION}` `${AWS_EKS_CLUSTER_NAME}`

1. Untuk menambahkan opsi pengiriman tambahan, pilih **opsi Pengiriman baru** dan ulangi instruksi di langkah sebelumnya untuk mengonfigurasinya.

1. Pilih **Kirim**.

## Langkah 4: Perbarui informasi versi
<a name="container-product-updating-version"></a>

Setelah versi dibuat, dapat membantu untuk memberikan informasi terbaru kepada pembeli Anda dengan memodifikasi informasi yang terkait dengan versi. Misalnya, jika Anda berencana untuk membatasi versi 1.0 setelah versi 1.1 dirilis, Anda dapat memperbarui deskripsi versi 1.0 untuk mengarahkan pembeli ke versi 1.1. Berikan tanggal bahwa versi 1.0 akan dibatasi. Anda memperbarui informasi versi dari file Portal Manajemen AWS Marketplace.

**Untuk memperbarui informasi versi**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Pilih **Server** dari menu **Produk**. 

1. Pada tab **Produk Server**, pilih produk yang ingin Anda modifikasi.

1. Dari menu menurun **Minta perubahan**, pilih **Perbarui informasi versi**.

1. Pada halaman **Perbarui versi**, pilih versi yang ingin Anda perbarui.

1. Buat pembaruan ke versi yang dipilih. Bidang yang tersedia untuk diperbarui bergantung pada status versi produk atau opsi pengiriman.

   1. Untuk semua versi, Anda dapat memperbarui **catatan Rilis**.

   1. Untuk versi yang belum tersedia untuk umum, Anda dapat memperbarui **judul Versi**.

   1. Untuk opsi pengiriman yang belum dibatasi, Anda dapat memperbarui bidang berikut:
      + **Deskripsi**
      + **Instruksi penggunaan**
      + **Layanan yang didukung**

   1. Untuk opsi pengiriman dalam versi yang belum tersedia untuk umum, Anda dapat memperbarui bidang berikut:
      + **Judul opsi pengiriman**
      + **Helmbagan** (hanya untuk opsi pengiriman **Helmbagan**)
      + **Gambar kontainer**
      + **Sumber daya penyebaran**
      + **AddOn Nama**
      + **AddOn Versi**
      + **AddOn Jenis**
      + **HelmGrafik URI**
      + **CompatibleKubernetesVersions**
      + **SupportedArchitectures**
      + **Namespace**
      + **EnvironmentOverrideParameters**

   1. Untuk opsi pengiriman dalam versi yang tersedia untuk umum, Anda dapat memperbarui **SupportedArchitectures**.

1. Pilih **Kirim**.

1. Verifikasi bahwa permintaan muncul di tab **Permintaan** dengan status **Dalam tinjauan**.

Anda dapat memeriksa status permintaan Anda kapan saja dari tab **Permintaan** halaman [Produk server](https://aws.amazon.com/marketplace/management/products/server).

## Batasi versi add-on Amazon EKS Anda
<a name="restriciting-version-eks-addon"></a>

Untuk membatasi versi produk kontainer Anda yang diterbitkan sebagai add-on, hubungi tim AWS Marketplace operasi menggunakan formulir hubungi kami di bagian bawah. [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/)

# Mengelola harga produk kontainer di AWS Marketplace
<a name="container-pricing"></a>

Sebagai AWS Marketplace penjual, Anda dapat mengelola dan memperbarui harga produk kontainer. Untuk produk kontainer, Anda dapat membuat daftar produk gratis, produk Bring Your Own License model (BYOL), dan produk berbayar untuk Amazon Elastic Container Service (Amazon ECS) Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), dan. AWS Fargate Anda hanya dapat menetapkan satu harga per produk. Anda dapat menambah atau memperbarui dimensi harga. Bergantung pada model harga Anda, Anda dapat menambahkan dimensi kontrak dan penggunaan. Anda juga dapat memperbarui ketentuan harga atau kebijakan pengembalian dana Anda. Untuk informasi selengkapnya, silakan lihat bagian-bagian berikut ini.

 Untuk informasi selengkapnya tentang model penetapan harga produk kontainer AWS Marketplace, lihat[Harga produk kontainer untuk AWS Marketplace](pricing-container-products.md).

**Topics**
+ [Menambahkan dimensi harga](#container-add-pricing-dimensions)
+ [Memperbarui informasi dimensi](#container-update-dimensions-information)
+ [Memperbarui ketentuan harga](#container-update-pricing-terms)
+ [Memperbarui kebijakan pengembalian dana suatu produk](#container-update-refund-policy)

## Menambahkan dimensi harga
<a name="container-add-pricing-dimensions"></a>

Anda dapat menambahkan dimensi harga ke model harga yang Anda gunakan untuk penagihan produk Anda. Untuk informasi selengkapnya tentang model harga, lihat[Model harga kontainer](pricing-container-products.md#pricing-models-for-server-products).

**catatan**  
Menambahkan dimensi harga untuk kontrak dengan harga konsumsi (misalnya, pay-as-you-go harga untuk penggunaan tambahan) tidak tersedia di Portal Manajemen AWS Marketplace.  
Anda tidak dapat mengubah model harga antara kontrak, penggunaan, dan kontrak dengan harga konsumsi. Hubungi tim [Operasi AWS Marketplace Penjual](https://aws.amazon.com/marketplace/management/contact-us/) untuk bantuan.

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui dimensi harga**, lalu pilih **Tambahkan dimensi harga**.

1. Bergantung pada model harga, Anda dapat menambahkan dimensi kontrak atau dimensi penggunaan dengan memberikan informasi untuk **pengenal API**, **Nama tampilan**, dan **Deskripsi**.

1. Pilih **Berikutnya**, dan masukkan harga dimensi kontrak Anda.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.** 

## Memperbarui informasi dimensi
<a name="container-update-dimensions-information"></a>

Anda dapat mengubah informasi dimensi untuk produk Anda. Untuk informasi selengkapnya tentang model harga, lihat[Model harga kontainer](pricing-container-products.md#pricing-models-for-server-products).

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui dimensi harga**, lalu pilih **Perbarui informasi dimensi**.

1. Anda dapat menambahkan informasi dimensi dengan memberikan informasi untuk **nama Tampilan** dan **Deskripsi** dimensi yang ingin Anda perbarui.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.** 

## Memperbarui ketentuan harga
<a name="container-update-pricing-terms"></a>

Anda dapat mengubah ketentuan harga untuk produk Anda. Ketentuan harga mungkin perlu diperbarui jika Anda mengubah negara tempat produk Anda ditawarkan.

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar **Permintaan perubahan**, pilih **Perbarui penawaran umum**, lalu pilih **Perbarui persyaratan harga**.

1. Harga saat ini sudah diisi sebelumnya untuk Anda edit. Anda dapat menghapus harga saat ini dan menambahkan harga baru Anda. Kami menyarankan Anda meninjau harga yang Anda minta sebelum mengirimkan permintaan Anda untuk ditinjau.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.**

**catatan**  
Jika Anda menaikkan harga dimensi menggunakan **ketentuan harga Pembaruan**, Anda tidak akan dapat memperbarui harga selama 90 hari. Kenaikan harga mengunci harga selama 90 hari sejak hari Anda memulai perubahan. Kunci harga ini hanya berlaku untuk kenaikan harga bukan penurunan harga.

## Memperbarui kebijakan pengembalian dana suatu produk
<a name="container-update-refund-policy"></a>

Anda dapat memperbarui kebijakan pengembalian dana untuk produk Anda. Pembaruan kebijakan pengembalian dana berlaku untuk semua pengguna. Untuk informasi selengkapnya, lihat [Pengembalian uang dan pembatalan di AWS Marketplace](refunds.md). 

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui penawaran umum**, lalu pilih **Perbarui kebijakan pengembalian dana**.

1. Kebijakan pengembalian dana saat ini telah diisi sebelumnya untuk Anda edit. Anda dapat menghapus kebijakan pengembalian dana saat ini dan menambahkan kebijakan pengembalian dana baru Anda. Kami menyarankan Anda meninjau kebijakan pengembalian dana yang Anda minta sebelum mengirimkan permintaan Anda untuk ditinjau. Mengirimkan permintaan menimpa kebijakan pengembalian dana saat ini.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.** 

# Memperbarui ketersediaan produk kontainer menurut negara di AWS Marketplace
<a name="container-update-offer-avail-country"></a>

Sebagai AWS Marketplace penjual, Anda dapat mengubah negara tempat produk kontainer Anda dapat ditawarkan dan berlangganan. Untuk informasi selengkapnya, lihat [Negara](regions-and-countries.md#product-countries). Prosedur berikut menunjukkan kepada Anda cara memperbarui ketersediaan produk kontainer Anda berdasarkan negara.

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui penawaran umum**, lalu pilih **Perbarui ketersediaan menurut negara**.

1. Pilih salah satu opsi berikut: 
   + **Semua negara** - Tersedia di semua negara yang didukung.
   + **Semua negara dengan pengecualian** — Tersedia di semua negara yang didukung kecuali di negara tertentu.
   + **Hanya negara yang diizinkan** - Tersedia bagi pembeli untuk membeli hanya di negara yang Anda tentukan.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.** 

# Memperbarui perjanjian lisensi pengguna akhir (EULA) Anda untuk produk kontainer AWS Marketplace
<a name="container-update-eula"></a>

Sebagai AWS Marketplace penjual, Anda dapat memperbarui perjanjian lisensi pengguna akhir (EULA) untuk menggunakan EULA [Kontrak Standar untuk AWS Marketplace](standardized-license-terms.md#standard-contracts) atau kustom. Pembaruan yang dilakukan pada EULA berlaku untuk pengguna baru yang berlangganan pembaruan produk dan produk Anda. Untuk memperbarui EULA Anda, gunakan prosedur berikut.

1. Buka Portal Manajemen AWS Marketplace at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) dan masuk ke akun penjual Anda.

1. Dari halaman [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), pilih produk kontainer yang ingin Anda modifikasi.

1. Dari daftar tarik-turun **Permintaan perubahan**, pilih **Perbarui penawaran umum**, lalu pilih **Perbarui** EULA.

1. Pilih **Kontrak Standar untuk AWS Marketplace** atau kirimkan EULA kustom Anda. Untuk EULA khusus, Anda harus memberikan kontrak dari bucket Amazon S3.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. **Ketika permintaan selesai, status akan diperbarui ke **Berhasil atau Gagal**.** 

# Memperbarui kebijakan pengembalian dana untuk produk berbasis Kontainer Anda di AWS Marketplace
<a name="update-container-refund-policy"></a>

Sebagai AWS Marketplace penjual, Anda dapat mengatur kebijakan pengembalian dana untuk produk berbasis Container Anda. Jika Anda ingin mengubah kebijakan pengembalian dana untuk produk Anda, Anda dapat menggunakan **kebijakan pengembalian dana Perbarui**. Prosedur berikut menunjukkan cara memperbarui kebijakan pengembalian dana Anda.

**Untuk memperbarui kebijakan pengembalian dana**

1. Buka Portal Manajemen AWS Marketplace at[https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/), lalu masuk ke akun penjual Anda.

1. Buka halaman [Produk Server](https://aws.amazon.com/marketplace/management/products/server), lalu pilih produk yang ingin Anda modifikasi.

1. Dari menu tarik-turun **Permintaan perubahan**, pilih **Perbarui penawaran umum**, lalu **Perbarui kebijakan pengembalian dana**.

1. Rincian kebijakan pengembalian dana saat ini disediakan di kotak teks untuk Anda edit. Mengirimkan permintaan menimpa kebijakan pengembalian dana saat ini.

1. Pilih **Kirim** untuk mengirimkan permintaan Anda untuk ditinjau.

1. Verifikasi bahwa tab **Permintaan** menampilkan **status Permintaan** sebagai **Dalam peninjauan**. Ketika permintaan selesai, status menjadi **Berhasil**.

# Menguji dan melepaskan produk kontainer Anda AWS Marketplace
<a name="test-release-product"></a>

Setelah Anda menambahkan versi baru produk kontainer Anda AWS Marketplace, Anda dapat menguji produk Anda dan kemudian merilisnya ke publik. Topik ini menguraikan langkah-langkah dan proses spesifik yang diperlukan untuk menguji dan merilis produk Anda ke publik.

**Topics**
+ [Gambar kontainer dan opsi pengiriman Helm bagan](#container-helm-delivery)
+ [Opsi pengiriman add-on Amazon EKS](#eks-addon-delivery)

## Gambar kontainer dan opsi pengiriman Helm bagan
<a name="container-helm-delivery"></a>

Bagian ini memberikan panduan tentang merilis gambar dan Helm bagan Container Anda.

Permintaan Anda untuk versi baru dibuat dan akan selesai dalam beberapa menit. Anda dapat melacak permintaan dari tab **Permintaan** dari halaman **Produk server**. *Jika Anda menerima kesalahan saat menguji atau merilis add-on, lihat tabel Kesalahan Aynchronous di [Tambahkan versi baru di Referensi](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version).AWS Marketplace Catalog API *

**catatan**  
Jika produk Anda saat ini diatur ke ketersediaan terbatas, hanya pembeli yang menyediakan produk yang dapat mengakses versi produk. Jika produk Anda saat ini disetel ke ketersediaan publik, semua AWS Marketplace pembeli dapat mengakses versi produk.

Jika ini adalah versi pertama Anda, produk Anda sekarang siap untuk dipublikasikan.

## Opsi pengiriman add-on Amazon EKS
<a name="eks-addon-delivery"></a>

Bagian ini memberikan panduan tentang pengujian dan rilis add-on Amazon EKS Anda.

**Uji add-on Anda**
+ Setelah Anda mengirimkan add-on, AWS Marketplace memproses permintaan Anda dan menerbitkan add-on Anda dalam keadaan terbatas untuk Anda validasi di katalog add-on Amazon EKS. Anda dapat melacak permintaan dari tab **Permintaan** halaman **produk Server** di halaman Portal Manajemen AWS Marketplace. Waktu konsumsi akan bervariasi dari 5-10 hari kerja tergantung pada volume permintaan yang kami tangani.

  Saat permintaan Anda dalam status **Under review**, add-on masih dipublikasikan oleh AWS tim dari AWS Marketplace katalog add-on Amazon EKS. Minta perubahan status ke **Sukses** setelah add-on dipublikasikan ke status **Terbatas**. Anda dapat memulai pengujian add-on Anda setelah ini.
+ Setelah add-on Anda tersedia, Anda dapat menemukannya di Wilayah Asia Pasifik (Seoul) untuk tujuan pengujian. AWS Marketplace bergantung pada keahlian Anda untuk memverifikasi fungsionalitas perangkat lunak Anda. Untuk menguji add-on Anda, Anda harus membuat klaster Amazon EKS di Wilayah Asia Pasifik (Seoul) di akun penjual tempat add-on Anda diizinkan terdaftar. Untuk menguji add-on Anda, ikuti [petunjuk terperinci ini](https://aws.amazon.com/blogs/awsmarketplace/deploy-third-party-software-add-ons-aws-marketplace-amazon-eks-clusters/). Pastikan untuk menguji pada setiap Kubernetes versi yang didukung perangkat lunak Anda.
+ Jika Anda menawarkan produk berbayar, buat penawaran pribadi ke internal berikut Akun AWS. Akun ini membantu mengintegrasikan perangkat lunak Anda ke konsol Amazon EKS di semua iklan Wilayah AWS.

  ```
  288092140294, 288092140294, 408202761791
  ```
+ Jaga agar klaster pengujian Anda tetap aktif hingga AWS Marketplace menyetujui dan memindahkan versi add-on Anda ke publik.
**catatan**  
AWS Marketplace tidak akan menanggung biaya AWS infrastruktur yang dikeluarkan selama pengujian produk kontainer Anda di kluster Amazon EKS Anda. Anda dapat mengikuti mekanisme ukuran yang tepat untuk menurunkan node ke biaya pengoperasian minimal saat kami memverifikasi hasil pengujian.

**Lepaskan add-on Anda ke publik**

Setelah Anda memvalidasi perangkat lunak Anda melalui kluster Amazon EKS sebagai add-on, Anda dapat mengirimkan permintaan untuk merilis versi add-on Amazon EKS Anda ke publik menggunakan atau. [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/) AWS Marketplace Catalog API

 *Untuk informasi selengkapnya, lihat [Memperbarui visibilitas untuk add-on Amazon EKS di Referensi](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#update-delivery-option-visibility).AWS Marketplace Catalog API *

Anda dapat melacak permintaan dari tab **Permintaan** halaman **produk Server** di halaman Portal Manajemen AWS Marketplace. Waktu konsumsi akan bervariasi.

# Persyaratan produk berbasis kontainer untuk AWS Marketplace
<a name="container-product-policies"></a>

AWS Marketplace mempertahankan persyaratan berikut untuk semua produk dan penawaran berbasis kontainer di. AWS Marketplace Persyaratan ini membantu mempromosikan katalog yang aman, terjaga, dan dapat dipercaya untuk pelanggan kami. Kami juga mendorong penjual untuk meninjau implementasi kontrol dan protokol tambahan yang berlaku untuk memenuhi kebutuhan produk spesifik mereka.

Semua produk dan metadata terkait ditinjau ketika dikirimkan untuk memastikan mereka memenuhi atau melampaui kebijakan saat ini AWS Marketplace . Kebijakan ini diperbarui secara berkala agar selaras dengan pedoman keamanan yang berkembang. AWS Marketplace terus memindai produk untuk memverifikasi bahwa daftar yang ada terus memenuhi setiap perubahan pada persyaratan ini. Jika suatu produk tidak sesuai, AWS Marketplace akan menghubungi penjual untuk memperbarui produk mereka untuk memenuhi standar baru. Dalam beberapa kasus, produk mungkin dibuat sementara tidak tersedia untuk pelanggan baru sampai masalah diselesaikan. Proses ini membantu menjaga keamanan dan kepercayaan AWS Marketplace platform untuk semua pengguna.

**Topics**
+ [Kebijakan Keamanan](#container-security-requirements)
+ [Persyaratan informasi pelanggan](#container-customer-info-requirements)
+ [Persyaratan penggunaan produk](#container-usage-requirements)
+ [Persyaratan arsitektur](#container-architecture-requirements)
+ [Persyaratan struktur bagan helm](#helm-chart-structure-requirements)
+ [Petunjuk penggunaan produk kontainer](#container-product-usage-instructions)
+ [Persyaratan untuk produk add-on Amazon EKS](#publishing-eks-add-on)

## Kebijakan Keamanan
<a name="container-security-requirements"></a>

 Semua produk berbasis kontainer harus mematuhi persyaratan keamanan berikut:
+ Gambar kontainer tidak boleh berisi kerentanan, malware, atau paket perangkat lunak End-of-Life (EoL) dan sistem operasi yang diketahui.
+ Kontainer tidak boleh meminta AWS kredensi untuk mengakses AWS layanan. Ketika produk Anda perlu mengakses AWS layanan, Anda harus menggunakan salah satu dari berikut ini:
  + Peran IAM untuk akun layanan, untuk beban kerja Amazon Elastic Kubernetes Service (Amazon EKS).
  + Peran IAM untuk tugas, untuk beban kerja Amazon Elastic Container Service (Amazon ECS).
+ Produk berbasis kontainer hanya memerlukan sedikit hak istimewa untuk dijalankan. Untuk informasi selengkapnya, lihat [Keamanan di Amazon Elastic Container Service](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/security.html) and [Security di Amazon EKS](https://docs.aws.amazon.com//eks/latest/userguide/security.html).
+ Citra kontainer harus dikonfigurasi untuk dijalankan dengan hak non-root secara default.
+ Kontainer tidak boleh berisi rahasia hardcode seperti kata sandi (bahkan hash) untuk pengguna dan layanan sistem, kunci pribadi, kredensi, dll.
+ Otentikasi dalam layanan apa pun yang berjalan di dalam wadah tidak boleh menggunakan otentikasi berbasis kata sandi, meskipun kata sandi dibuat, disetel ulang, atau ditentukan oleh pengguna saat peluncuran. Kata sandi nol dan kosong juga tidak diizinkan.
+ Gambar kontainer tidak boleh menyertakan lapisan dengan arsitektur yang tidak didukung (misalnya, metadata Kerangka Pengesahan in-toto).

## Persyaratan informasi pelanggan
<a name="container-customer-info-requirements"></a>

 Semua produk berbasis kontainer harus mematuhi persyaratan informasi pelanggan berikut: 
+ Perangkat lunak tidak boleh mengumpulkan atau mengekspor data pelanggan tanpa sepengetahuan pelanggan dan persetujuan tegas kecuali sebagaimana disyaratkan oleh BYOL (Bring Your Own License). Aplikasi yang mengumpulkan atau mengekspor data pelanggan harus mengikuti pedoman ini: 
  + Pengumpulan data pelanggan harus swalayan, otomatis, dan aman. Pembeli tidak perlu menunggu penjual menyetujui untuk menyebarkan perangkat lunak. 
  + Pengumpulan data pelanggan harus konsisten dengan perjanjian Anda dengan AWS, termasuk namun tidak terbatas pada, [Syarat dan Ketentuan AWS Marketplace](https://aws.amazon.com/legal/seller-terms/), [Ketentuan AWS Layanan](https://aws.amazon.com/service-terms/), [Pemberitahuan AWS Privasi](https://aws.amazon.com/privacy/), dan [Perjanjian AWS Pelanggan](https://aws.amazon.com/agreement/).
  + Informasi pembayaran tidak boleh dikumpulkan.

## Persyaratan penggunaan produk
<a name="container-usage-requirements"></a>

 Semua produk berbasis kontainer harus mematuhi persyaratan penggunaan produk berikut: 
+ Penjual hanya bisa mencantumkan produk yang berfungsi penuh. Produk beta atau prarilis untuk tujuan uji coba atau evaluasi tidak diperbolehkan. Pengembang, komunitas, dan edisi BYOL perangkat lunak komersial didukung jika penjual menyediakan versi berbayar yang setara AWS Marketplace dalam waktu 90 hari setelah menyediakan edisi gratis.
+ Semua petunjuk penggunaan produk berbasis kontainer harus meliputi semua langkah untuk men-deploy produk berbasis kontainer. Petunjuk penggunaan harus menyediakan perintah dan sumber daya deployment yang menunjuk ke citra kontainer yang sesuai pada AWS Marketplace.
+ Produk berbasis kontainer harus meliputi semua citra kontainer yang dibutuhkan pelanggan untuk menggunakan perangkat lunak. Selain itu, produk berbasis kontainer tidak boleh mengharuskan pengguna untuk meluncurkan produk menggunakan gambar apa pun dari luar AWS Marketplace (misalnya, gambar kontainer dari repositori pihak ketiga).
+ Kontainer dan perangkat lunaknya harus dapat digunakan dengan cara swalayan dan tidak boleh memerlukan metode atau biaya pembayaran tambahan. Aplikasi yang memerlukan dependensi eksternal pada penerapan harus mengikuti pedoman ini:
  + Persyaratan harus diungkapkan dalam deskripsi atau petunjuk penggunaan daftar. Misalnya, *Produk ini memerlukan koneksi internet untuk digunakan dengan benar. Paket-paket berikut diunduh saat penerapan:.* <list of package> 
  + Penjual bertanggung jawab atas penggunaan dan memastikan ketersediaan dan keamanan semua dependensi eksternal. 
  + Jika dependensi eksternal tidak lagi tersedia, produk harus dihapus AWS Marketplace juga. 
  + Dependensi eksternal tidak boleh memerlukan metode atau biaya pembayaran tambahan.
+ Kontainer yang memerlukan koneksi berkelanjutan ke sumber daya eksternal yang tidak berada di bawah kendali langsung pembeli — misalnya, eksternal APIs atau Layanan AWS dikelola oleh penjual atau pihak ketiga — harus mengikuti pedoman ini:
  + Persyaratan harus diungkapkan dalam deskripsi atau petunjuk penggunaan daftar. Misalnya, *Produk ini membutuhkan koneksi internet yang berkelanjutan. Layanan eksternal yang sedang berlangsung berikut ini diperlukan untuk berfungsi dengan baik:.* <list of resources> 
  + Penjual bertanggung jawab atas penggunaan dan memastikan ketersediaan dan keamanan semua sumber daya eksternal.
  + Jika sumber daya eksternal tidak lagi tersedia, produk harus dihapus AWS Marketplace juga.
  + Sumber daya eksternal tidak boleh memerlukan metode atau biaya pembayaran tambahan dan pengaturan koneksi harus otomatis.
+ Perangkat lunak produk dan metadata tidak boleh berisi bahasa yang mengarahkan pengguna ke platform cloud lain, produk tambahan, atau layanan upsell yang tidak tersedia di AWS Marketplace.
+ Jika produk Anda merupakan add-on untuk produk lain atau produk ISV lain, deskripsi produk Anda harus menunjukkan bahwa itu memperluas fungsionalitas produk lain dan bahwa tanpa itu, produk Anda memiliki utilitas yang sangat terbatas. Misalnya, *Produk ini memperluas fungsionalitas dan tanpa itu, produk ini memiliki utilitas yang sangat terbatas<product name>. Harap dicatat bahwa mungkin memerlukan lisensi sendiri untuk fungsionalitas penuh dengan daftar ini.* <product name>

## Persyaratan arsitektur
<a name="container-architecture-requirements"></a>

 Semua produk berbasis kontainer harus mematuhi persyaratan arsitektur berikut: 
+ Gambar kontainer sumber untuk AWS Marketplace harus didorong ke repositori Amazon Elastic Container Registry (Amazon ECR) yang dimiliki oleh. AWS Marketplace Anda dapat membuat repositori ini di produk server Portal Manajemen AWS Marketplace bawah untuk setiap daftar produk kontainer Anda.
+ Citra kontainer harus didasarkan pada Linux.
+ [Produk berbasis kontainer berbayar harus dapat digunakan di Amazon ECS, [Amazon EKS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html), atau. [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)
+ Produk berbasis kontainer berbayar dengan harga kontrak dan integrasi dengan AWS License Manager harus diterapkan di Amazon EKS, Amazon ECS, Amazon EKS AWS Fargate Anywhere, Amazon ECS Anywhere, OpenShift Red Hat Service AWS on (ROSA), cluster Kubernetes yang dikelola sendiri di lokasi, atau di Amazon Elastic Compute Cloud.
+ Untuk produk bagan Helm, referensi gambar kontainer harus disusun sesuai dengan [Persyaratan struktur bagan helm](#helm-chart-structure-requirements) untuk mendukung penerapan lintas wilayah.
+ Jika produk berbasis kontainer Anda mengharuskan pembeli untuk menerapkan Amazon Machine Image (AMI), produk tersebut harus berupa AMI yang dikelola atau AWS AMI terpisah yang diterbitkan. AWS Marketplace Jika Anda mempublikasikan AMI Anda sendiri di AWS Marketplace, itu harus mematuhi [Persyaratan produk berbasis AMI untuk AWS Marketplace](product-and-ami-policies.md) dan Anda harus menunjukkan bahwa itu adalah produk tambahan seperti yang dipersyaratkan [Kebijakan penggunaan produk](product-and-ami-policies.md#product-usage) dalam. Anda dapat memberi harga produk berbasis AMI Anda sebagai BYOL karena ini merupakan perpanjangan dari penawaran berbasis kontainer Anda. AWS Marketplace memindai produk berbasis AMI untuk kerentanan dan eksposur umum yang belum ditambal () dan persyaratan keamanan. CVEs Pembeli Anda juga harus berlangganan produk berbasis AMI Anda sebelum menggunakannya.

## Persyaratan struktur bagan helm
<a name="helm-chart-structure-requirements"></a>

Semua produk bagan Helm yang dikirimkan AWS Marketplace harus mematuhi persyaratan struktur berikut untuk memastikan regionalisasi dan penyebaran yang tepat di seluruh wilayah: AWS 
+ Referensi gambar kontainer harus didefinisikan secara eksklusif dalam `values.yaml` file dan tidak di-hardcode dalam file lain dalam bagan Helm. Ini memungkinkan AWS Marketplace untuk secara otomatis mengganti referensi ini saat mereplikasi produk Anda ke berbagai wilayah.
+ `values.yaml`File harus menggunakan variabel untuk semua referensi gambar kontainer.
+ Secara opsional, Anda dapat keluar `registry` dan `tag` masuk ke bidang terpisah pada tingkat yang sama dengan repositori untuk membangun referensi gambar Anda.
+ Template helm harus mereferensikan variabel-variabel ini menggunakan sintaks templating Helm standar (misalnya,). `{{ .Values.image.repository }}:{{ .Values.image.tag }}`
+ Hindari menggunakan logika bersyarat dalam template yang akan melewati referensi gambar yang ditentukan dalam. `values.yaml`
+ Saat menguji bagan Helm Anda dengan AWS wilayah yang berbeda, pastikan bahwa mengubah wilayah `values.yaml` dengan benar memperbarui semua referensi gambar di sumber daya yang diterapkan.

AWS Marketplace memvalidasi bahwa semua referensi gambar kontainer didefinisikan dengan benar dalam `values.yaml` file selama proses pengiriman produk. Produk yang tidak memenuhi persyaratan ini akan ditolak.

### Persyaratan untuk referensi gambar kontainer di bagan Helm
<a name="helm-chart-best-practices"></a>

Berikut ini menunjukkan pendekatan untuk menyusun referensi gambar kontainer di bagan Helm:

**`values.yaml`(format yang disarankan):**

```
image:
  registry: "709825985650.dkr.ecr.us-east-1.amazonaws.com"
  repository: "accuknox/kubearmor"
  tag: "v1.1.1"
```

**catatan**  
Kami merekomendasikan pendekatan di atas untuk struktur Anda`values.yaml`, tetapi metode alternatif di bawah ini juga valid.

**`values.yaml`(format alternatif):**

```
image:
  repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/guance/datakit"
  tag: "1.0"
```

**`values.yaml`(format alternatif):**

```
image:
  repository: "709825985650.dkr.ecr.us-east-1.amazonaws.com/guance/datakit:1.0"
```

**catatan**  
Untuk template penerapan, format di bawah ini adalah satu-satunya format valid yang tersedia.

**Template penyebaran:**

```
containers:
- name: kubearmor
  image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}"
```

**Pendekatan yang salah (jangan gunakan):**

```
containers:
- name: kubearmor
  image: "709825985650.dkr.ecr.us-east-1.amazonaws.com/accuknox/kubearmor:v1.1.1"
```

### Kemungkinan kesalahan validasi bagan Helm
<a name="helm-chart-validation-errors"></a>

Selama proses pengiriman produk, AWS Marketplace lakukan pemeriksaan validasi pada produk bagan Helm untuk memastikan kepatuhan dengan persyaratan referensi gambar kontainer. Jika bagan Helm Anda tidak memenuhi persyaratan ini, Anda mungkin mengalami kesalahan validasi berikut:


| Kesalahan | Penjelasan | 
| --- | --- | 
| INCOMPATIBLE\$1HELM\$1OBJECTS | Objek Helm yang ditentukan tidak didukung untuk add-on EKS. Lihat [Persyaratan untuk produk add-on Amazon EKS](#publishing-eks-add-on). | 
| INVALID\$1DEPENDENT\$1HELM\$1CHARTS | Bagan Helm Dependen harus terkandung dalam direktori bagan induk dan tidak bersumber secara eksternal. | 
| INVALID\$1HELM\$1SENSITIVE\$1CONFIG | Skema konfigurasi tidak dapat berisi bidang yang mengumpulkan informasi sensitif. Skema konfigurasi tidak boleh menerima kata sandi, kunci API, sertifikat, atau rahasia. Sebagai gantinya, sediakan bidang untuk nama rahasia Kubernetes yang akan dibuat oleh pelanggan secara terpisah. | 
| INVALID\$1HELM\$1CHART\$1IMAGES | [Semua gambar, termasuk dependensi sumber terbuka, harus didorong ke repositori AWS Marketplace Amazon ECR yang dibuat melalui permintaan Add Repository.](container-add-version.md#add-repositories) | 
| INVALID\$1HELM\$1UNDECLARED\$1IMAGES | Semua referensi gambar kontainer harus secara eksplisit tercantum dalam permintaan [Tambah Versi](container-add-version.md#add-new-version). | 
| INVALID\$1HELM\$1LINT | Bagan Helm gagal helm lint validasi. Jalankan helm lint secara lokal untuk mengidentifikasi dan memperbaiki masalah struktural atau sintaksis. Gunakan versi Helm 3.19.0 atau yang lebih baru. | 
| INVALID\$1HELM\$1TEMPLATE | Bagan Helm gagal helm template validasi. Bagan tidak dapat dirender ke dalam manifes Kubernetes yang valid. Uji secara lokal dengan helm template untuk mengidentifikasi sintaks template atau kesalahan logika. Gunakan versi Helm 3.19.0 atau yang lebih baru. | 
| MISSING\$1HELM\$1DEPLOYMENT\$1CONFIG | Bagan Helm untuk add-on Amazon EKS harus berisi Deployment atau resource. DaemonSet Amazon EKS memerlukan setidaknya satu dari jenis beban kerja ini untuk manajemen siklus hidup add-on. Lihat [Persyaratan untuk produk add-on Amazon EKS](#publishing-eks-add-on). | 
| INCOMPATIBLE\$1CONFIGURATION\$1SCHEMA\$1VERSION | Versi skema JSON di tidak aws\$1mp\$1configuration\$1schema.json didukung. Lihat [Persyaratan skema](#schema-requirements) untuk versi skema yang didukung. | 
| INVALID\$1IMAGE\$1REFERENCE | Semua gambar harus didefinisikan sebagai variabel dalam values.yaml dan direferensikan menggunakan sintaks template Helm seperti yang dijelaskan dalam. [Persyaratan struktur bagan helm](#helm-chart-structure-requirements) | 
| MISSING\$1VALUES\$1IMAGE\$1REFERENCE | Setiap referensi gambar kontainer harus memiliki entri yang sesuaivalues.yaml. | 
| MISSING\$1IMAGE\$1TAG | Referensi gambar kontainer values.yaml harus menyertakan nilai tag eksplisit atau default ke versi bagan dariChart.yaml. | 

## Petunjuk penggunaan produk kontainer
<a name="container-product-usage-instructions"></a>

Saat membuat petunjuk penggunaan untuk produk kontainer Anda, ikuti langkah-langkah dan panduan di[Membuat AMI dan petunjuk penggunaan produk kontainer untuk AWS Marketplace](ami-container-product-usage-instructions.md). 

### Petunjuk penggunaan bagan helm
<a name="helm-chart-usage-instructions"></a>

Saat membuat petunjuk penggunaan untuk produk bagan Helm:
+ Dokumentasikan dengan jelas semua parameter yang dapat dikonfigurasi dalam `values.yaml` file Anda, termasuk repositori gambar, tag, dan parameter registri.
+ Berikan contoh cara mengganti parameter ini saat memasang bagan Helm.
+ Jangan menginstruksikan pengguna untuk memodifikasi file apa pun selain `values.yaml` atau menggunakan `--set` parameter saat memasang bagan.
+ Sertakan informasi tentang cara produk Anda menangani regionalisasi gambar kontainer.

## Persyaratan untuk produk add-on Amazon EKS
<a name="publishing-eks-add-on"></a>

Add-on Amazon EKS adalah perangkat lunak yang menyediakan kemampuan operasional untuk Kubernetes aplikasi tetapi tidak spesifik untuk aplikasi. Misalnya, add-on Amazon EKS menyertakan agen observabilitas atau Kubernetes driver yang memungkinkan klaster berinteraksi dengan AWS sumber daya dasar untuk jaringan, komputasi, dan penyimpanan.

Sebagai penjual produk kontainer, Anda dapat memilih di antara beberapa opsi penerapan termasuk Amazon EKS. Anda dapat mempublikasikan versi produk Anda sebagai AWS Marketplace add-on ke dalam katalog add-on Amazon EKS. Add-on Anda muncul di konsol Amazon EKS di samping add-on yang dikelola oleh AWS dan vendor lain. Pembeli Anda dapat menggunakan perangkat lunak Anda sebagai add-on semudah mereka melakukan add-on lainnya.

Untuk informasi selengkapnya, lihat [add-on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html) di *Panduan Pengguna Amazon EKS*.

### Mempersiapkan produk kontainer Anda sebagai AWS Marketplace add-on
<a name="preparing-eks-addon"></a>

Untuk mempublikasikan produk kontainer Anda sebagai AWS Marketplace add-on, produk tersebut harus memenuhi persyaratan berikut:
+ Produk kontainer Anda harus dipublikasikan di AWS Marketplace.
+ Produk kontainer Anda harus dibangun kompatibel untuk keduanya AMD64 dan ARM64 arsitektur.
+ Produk kontainer Anda tidak boleh menggunakan [model harga](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html) Bring Your Own License (BYOL).
**catatan**  
BYOL tidak didukung untuk pengiriman add-on Amazon EKS.
+ Anda harus mematuhi semua [persyaratan produk berbasis kontainer](https://docs.aws.amazon.com/marketplace/latest/userguide/container-product-policies.html) termasuk memasukkan semua gambar dan Helm bagan kontainer ke dalam repositori AWS Marketplace Amazon ECR yang dikelola. Persyaratan ini mencakup gambar sumber terbuka, misalnya,`nginx`. Gambar dan bagan tidak dapat di-host di repositori eksternal lainnya termasuk, namun tidak terbatas pada, [Galeri Publik Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/public/public-repositories.html), Docker Hub dan. Quay
+ **Helmgrafik** - Mempersiapkan dan mengemas perangkat lunak Anda sebagai Helm bagan. Kerangka add-on Amazon EKS mengubah Helm bagan menjadi manifes Kubernetes. Beberapa Helm fitur tidak didukung dalam sistem Amazon EKS. Daftar berikut menjelaskan persyaratan yang harus dipenuhi sebelum melakukan onboarding perangkat lunak Anda sebagai add-on Amazon EKS. Dalam daftar ini, semua Helm perintah menggunakan Helm versi 3.19.0:
  + Semua `Capabilities` objek didukung, dengan pengecualian untuk`.APIVersions`. `.APIVersions`tidak didukung untuk non-built-in kustom Kubernetes APIs.
  + Hanya `Release.Namespace` objek `` `Release.Name` dan yang didukung.
  + Helmkait dan `lookup` fungsinya tidak didukung.
  + Semua grafik dependen harus ditempatkan di dalam Helm bagan utama (ditentukan dengan file jalur repositori://...).
  + HelmBagan harus berhasil melewati Helm Lint dan Helm Template tanpa kesalahan. Perintahnya adalah sebagai berikut:
    + HelmSerat — `helm lint helm-chart`

      Masalah umum termasuk bagan yang tidak dideklarasikan dalam metadata bagan induk. Sebagai contoh, `chart metadata is missing these dependencies: chart-base Error: 1 chart(s) linted, 1 chart(s) failed`.
    + HelmTemplate - `helm template chart-name chart-location --set k8version=Kubernetes-version --kube-version Kubernetes-version --namespace addon-namespace --include-crds --no-hooks -f any-overriden-values`

      Lewati konfigurasi yang diganti dengan bendera. `-f`
  + Simpan semua binari kontainer di repo AWS Marketplace Amazon ECR. Untuk membuat manifes, gunakan perintah Helm template yang ditampilkan sebelumnya. Cari manifes untuk referensi gambar eksternal seperti `busybox` atau `gcr` gambar. Unggah semua gambar kontainer bersama dengan dependensi ke repo AWS Marketplace Amazon ECR yang dibuat dengan menggunakan opsi **Add Repository di dropdown** permintaan.
+ **Konfigurasi kustom** - Anda dapat menambahkan variabel kustom selama penerapan. Untuk informasi tentang cara mengidentifikasi pengalaman pengguna akhir, beri nama perangkat lunak`aws_mp_configuration_schema.json`, dan paket ke dalam pembungkus dengan Helm bagan, lihat [Amazon EKS add-ons: Advanced configuration](https://aws.amazon.com/blogs/containers/amazon-eks-add-ons-advanced-configuration/).

  Menurut [Kata Kunci “\$1schema”](https://json-schema.org/draft/2020-12/json-schema-core#name-the-schema-keyword), `$schema` harus berupa URI yang menunjuk ke sumber daya yang valid`application/schema+json`.

  File ini tidak boleh menerima informasi sensitif apa pun seperti kata sandi, kunci lisensi, dan sertifikat.

  Untuk menangani rahasia dan instalasi sertifikat, Anda dapat memberikan langkah pasca atau pre-Add-on instalasi kepada pengguna akhir. Produk tidak boleh bergantung pada lisensi eksternal apa pun. Produk harus bekerja berdasarkan AWS Marketplace hak.

  Untuk informasi selengkapnya tentang batasan`aws_mp_configuration_schema.json`, lihat[Persyaratan konfigurasi add-on dan praktik terbaik untuk penyedia add-on](#eks-addon-configuration).
+ **Identifikasi dan buat namespace tempat perangkat lunak akan digunakan - Dalam** rilis pertama produk Anda, Anda harus mengidentifikasi namespace tempat perangkat lunak akan digunakan dengan menambahkan namespace templat.
+ **Definisi sumber daya khusus (CRDs)** - Kerangka addon Amazon EKS tidak mendukung penginstalan CRDs dan deklarasi sumber daya khusus berdasarkan CRDs penerapan dengan add-on yang sama. Jika add-on Anda memiliki sumber daya khusus dan bergantung pada CRDs, Anda dapat: 
  + **Publikasikan dua add-on:** Pisahkan definisi CRD menjadi add-on terpisah (bagan helm terpisah) dan instalasi [sumber daya kustom](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) yang sebenarnya menjadi add-on terpisah.
  + **Publikasikan satu add-on dengan instruksi manual tambahan:** Publikasikan satu add-on yang menginstal cluster on. CRDs Berikan instruksi penggunaan bersama dengan file manifes kubernetes bagi pengguna akhir untuk menyiapkan sumber daya kustom yang bergantung padanya. CRDs
+ **Buat `serviceAccount` jika berlaku** — Jika perangkat lunak adalah perangkat lunak berbayar AWS Marketplace atau harus terhubung dengan yang lain Layanan AWS, pastikan Helm bagan dibuat secara `serviceAccount` default. Jika `serviceAccount` kreasi ditangani oleh parameter dalam `values.yaml` file, atur nilai parameter ke`true`. Misalnya, `serviceAccount.create = true`. Ini diperlukan karena pelanggan mungkin memilih untuk menginstal add-on dengan mewarisi izin dari instance node yang mendasarinya yang sudah memiliki izin yang diperlukan. Jika bagan Helm tidak membuat`serviceAccount`, maka izin tidak dapat dikaitkan dengan. `serviceAccount`
+ **Penerapan atau Daemonset yang Dapat Dilacak** — Pastikan bagan Helm Anda memiliki daemonset atau penerapan. Kerangka addon Amazon EKS melacak penerapan sumber daya Amazon EKS Anda yang menggunakannya. Tanpa penerapan atau daemonset yang dapat dilacak, addon Anda akan menghadapi kesalahan penerapan. Jika addon Anda tidak memiliki deployment atau daemonset, misalnya, jika addon Anda menerapkan sekumpulan sumber daya Kustom atau pekerjaan Kubernetes yang tidak dapat dilacak, tambahkan deployment dummy atau objek daemonset.
+ **Support untuk arsitektur AMD dan ARM** — Banyak pelanggan Amazon EKS menggunakan ARM64 saat ini untuk menggunakan instans AWS Graviton. Perangkat lunak pihak ketiga harus mendukung kedua arsitektur.
+ **Integrasikan dengan lisensi atau pengukuran APIs dari AWS Marketplace** - AWS Marketplace mendukung beberapa model penagihan. Untuk informasi selengkapnya, lihat [Integrasi penagihan, pengukuran, dan lisensi produk kontainer](container-products-billing-integration.md). Jika Anda ingin menjual produk Anda melalui mekanisme PAYG, lihat[Mengkonfigurasi pengukuran khusus untuk produk kontainer dengan AWS Marketplace Metering Service](container-metering-meterusage.md). Jika Anda ingin menjual produk Anda melalui model dimuka atau kontrak, lihat[Harga kontrak untuk produk kontainer dengan AWS License Manager](container-license-manager-integration.md). 
+ **Unggah perangkat lunak dan semua artefak dan dependensi** — Bagan Helm harus mandiri, dan tidak boleh memerlukan dependensi dari sumber eksternal, misalnya,. GitHub Jika perangkat lunak memerlukan dependensi eksternal, maka dependensi harus didorong ke repositori AWS Marketplace Amazon ECR pribadi di bawah daftar yang sama. AWS Marketplace 
+ **Berikan instruksi penerapan di situs web Anda** [— Kami meminta Anda meng-host panduan penyebaran bagi pelanggan untuk mengidentifikasi cara menerapkan perangkat lunak Anda melalui perintah create-addon.](https://docs.aws.amazon.com/cli/latest/reference/eks/create-addon.html)
+ ** permissions/IAM Peran Add-on** — Jika add-on Anda yang diterbitkan dari AWS Marketplace memerlukan akses ke AWS layanan, perangkat lunak Anda harus memiliki akun layanan Kubernetes yang dianotasi dengan kebijakan IAM untuk mengakses layanan. AWS Anda dapat memilih dari dua opsi untuk akun layanan Anda untuk membuat permintaan API ke AWS layanan:
  + Credentials via IRSA: Opsi ini memungkinkan perangkat lunak Anda untuk memperoleh kredensi asumsi dari Identity and Access Management (IAM) and Access Management (IAM) Role Service (IRSA). Untuk informasi selengkapnya, lihat [peran IAM untuk akun layanan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html). 
  + Identitas pod Amazon EKS: Opsi ini memungkinkan perangkat lunak Anda menggunakan Identitas Pod dari pod Amazon EKS untuk membuat permintaan API ke AWS layanan. Untuk informasi selengkapnya, lihat [Pelajari cara EKS Pod Identity memberikan Pod akses ke layanan AWS](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)

  Add-on Anda harus memiliki file konfigurasi tambahan bernama `aws_mp_addon_parameters.json` di tingkat atas bagan Helm, di direktori yang sama dengan skema konfigurasi kustom saat ini (). `aws_mp_configuration_schema.json` Saat ini, file ini hanya menangani izin yang kompatibel dengan identitas pod. Format file adalah sebagai berikut: 

  ```
  {
    "permissions": {
        "isPodIdentityCompatible" : true,
        "permissionsList": [
         {
          "serviceAccount" : "String",
          "managedPolicies" : ["Policy Arn"],
         }
       ]
      }
    }
  ```

  **Nama berkas: `aws_mp_addon_parameters.json`**
**catatan**  
`aws_mp_addon_parameters.json`File ini mengaktifkan bagian **Akses Add-on** di halaman **pengaturan konfigurasi Add-on di** konsol Amazon EKS    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/marketplace/latest/userguide/container-product-policies.html)
**catatan**  
Pay-as-you-go Produk add-on (PAYG) dari tidak AWS Marketplace dapat menggunakan Amazon EKS Pod Identity dan harus menggunakan Peran IAM untuk Akun Layanan (IRSA) untuk kontrol akses.
+ **Pembaruan versi** — Amazon EKS merilis versi Kubernetes baru beberapa minggu setelah rilis upstream. Karena versi cluster Amazon EKS baru tersedia secara umum, vendor memiliki waktu 45 hari untuk mengesahkan atau memperbarui perangkat lunak mereka agar kompatibel dengan rilis versi cluster Amazon EKS yang baru. Jika versi add-on Anda saat ini mendukung versi Kubernetes yang baru, validasi dan sertifikasi yang sama sehingga kami dapat memperbarui matriks kompatibilitas versi. Jika versi add-on baru diperlukan untuk mendukung rilis versi Kubernetes yang baru, silakan kirimkan versi baru untuk orientasi.
+ Perangkat lunak mitra harus termasuk dalam salah satu jenis berikut atau menjadi perangkat lunak operasional yang akan meningkatkan Kubernetes atau Amazon EKS: Gitops \$1 monitoring \$1 logging \$1 cert-management \$1 policy-management \$1 cost-management \$1 autoscaling \$1 storage \$1 kubernetes-management \$1 service-mesh \$1 dll-backup \$1 \$1 load-balancer \$1 lokal-registry\$1 jaringan \$1 Keamanan \$1 backup \$1 ingress-controller \$1 observability ingress-service-type
+ Perangkat lunak tidak dapat berupa [Container Network Interface (CNI)](https://github.com/containernetworking/cni).
+ Perangkat lunak harus dijual melalui AWS Marketplace dan terintegrasi dengan Lisensi dan pengukuran APIs untuk produk berbayar. Produk BYOL tidak diterima.

### Persyaratan konfigurasi add-on dan praktik terbaik untuk penyedia add-on
<a name="eks-addon-configuration"></a>

Amazon EKS memerlukan konfigurasi sebagai string [skema Helm JSON](https://helm.sh/docs/topics/charts/#schema-files) dari penyedia add-on. Pengaya yang memerlukan konfigurasi yang diperlukan atau mengizinkan konfigurasi opsional harus menyertakan `aws_mp_configuration_schema.json` file dengan Bagan Helm yang dikirimkan ke. AWS Marketplace Amazon EKS akan menggunakan skema ini untuk memvalidasi input konfigurasi dari pelanggan dan menolak panggilan API dengan nilai input yang tidak sesuai dengan skema. Konfigurasi add-on biasanya termasuk dalam dua kategori:
+ Konfigurasi untuk properti Kubernetes umum seperti label, toleransi, nodeSelector, dll.
+ Konfigurasi yang khusus add-on seperti kunci lisensi, pemberdayaan fitur, URLs dll.

Bagian ini difokuskan pada kategori pertama yang terkait dengan properti Kubernetes umum.

Amazon EKS merekomendasikan mengikuti praktik terbaik seputar konfigurasi add-on Amazon EKS.
+ [Persyaratan skema](#schema-requirements)
+ [Parameter umum yang diizinkan untuk konfigurasi](#parameters-allowed)
+ [Parameter umum yang tidak diizinkan untuk konfigurasi](#parameters-not-available)

#### Persyaratan skema
<a name="schema-requirements"></a>

Saat mendefinisikan skema json, pastikan Anda menggunakan versi jsonschema yang didukung oleh add-on Amazon EKS. 

Daftar skema yang didukung:
+ https://json-schema. org/draft-04/schema
+ https://json-schema. org/draft-06/schema
+ https://json-schema. org/draft-07/schema
+ https://json-schema. org/draft/2019-09/schema

Menggunakan versi skema json lainnya tidak kompatibel dengan add-on Amazon EKS dan akan menyebabkan add-on tidak dapat dirilis hingga ini diperbaiki.

**Contoh file skema Helm**

```
{
"$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
"podAnnotations": {
"description": "Pod Annotations"
"type": "object"
    },
    "podLabels": {
"description": "Pod Labels"
"type": "string"
    },
    "resources": {
"type": "object"
"description": "Resources"
    },
    "logLevel": {
"description": "Logging Level"
"type": "string",
      "enum": [
        "info",
        "debug"
      ]
    },
    "config": {
"description": "Custom Configuration"
"type": "object"
    }
  }
}
```

**camelCase**  
Parameter konfigurasi harus menjadi CamelCase, dan akan ditolak jika tidak mengikuti format ini.

**Deskripsi diperlukan**  
Selalu sertakan deskripsi yang bermakna untuk properti skema. Deskripsi ini akan digunakan untuk merender nama label di konsol Amazon EKS untuk setiap parameter konfigurasi.

**Definisi RBAC**  
Penyedia add-on perlu mendefinisikan dan menyediakan izin RBAC yang diperlukan untuk berhasil menginstal add-on menggunakan prinsip hak istimewa paling sedikit. Jika izin RBAC perlu diubah untuk versi add-on yang lebih baru atau perbaikan apa pun untuk mengatasi CVE, penyedia add-on perlu memberi tahu tim Amazon EKS tentang perubahan ini. Izin yang diperlukan untuk setiap sumber daya Kubernetes harus dibatasi pada nama sumber daya objek.   

```
apiGroups: ["apps"]
resources: ["daemonsets"]
resourceNames: ["ebs-csi-node"]
verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
```

**Manajemen Rahasia**  
Bagian ini hanya berlaku untuk add-on yang membutuhkan pelanggan untuk mengonfigurasi informasi rahasia seperti kunci aplikasi, kunci API, kata sandi, dll. Saat ini, Amazon EKS APIs tidak mendukung penyampaian informasi rahasia dalam teks biasa karena implikasi keamanan. Namun, pelanggan dapat menggunakan konfigurasi untuk meneruskan nama Rahasia Kubernetes yang menyimpan kunci yang dibutuhkan oleh add-on. Pelanggan akan diminta untuk membuat objek Kubernetes Secret yang berisi kunci dengan namespace yang sama sebagai langkah prasyarat dan kemudian meneruskan nama Secret menggunakan gumpalan konfigurasi saat membuat add-on. Kami menyarankan agar penyedia add-on memberi nama properti skema sehingga pelanggan tidak secara tidak sengaja salah mengira itu sebagai kunci yang sebenarnya. Misalnya: appSecretName, connectionSecretName dll.   
Singkatnya, penyedia add-on dapat memanfaatkan skema untuk memungkinkan pelanggan melewati nama rahasia tetapi bukan kunci yang benar-benar akan menyimpan rahasia itu sendiri. 

**Contoh nilai konfigurasi**  
Anda dapat menyertakan contoh konfigurasi dalam skema Anda untuk membantu pelanggan dengan konfigurasi add-on. Contoh berikut adalah dari skema AWS Distro untuk OpenTelemetry add-on.  

```
"examples": [
      {
        "admissionWebhooks": {
          "namespaceSelector": {},
          "objectSelector": {}
        },
        "affinity": {},
        "collector": {
          "amp": {
            "enabled": true,
            "remoteWriteEndpoint": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/api/v1/remote_write"
          },
          "cloudwatch": {
            "enabled": true
          },
          "mode": "deployment",
          "replicas": 1,
          "resources": {
            "limits": {
              "cpu": "256m",
              "memory": "512Mi"
            },
            "requests": {
              "cpu": "64m",
              "memory": "128Mi"
            }
          },
          "serviceAccount": {
            "annotations": {},
            "create": true,
            "name": "adot-collector"
          },
          "xray": {
            "enabled": true
          }
        },
        "kubeRBACProxy": {
          "enabled": true,
          "resources": {
            "limits": {
              "cpu": "500m",
              "memory": "128Mi"
            },
            "requests": {
              "cpu": "5m",
              "memory": "64Mi"
            }
          }
        },
        "manager": {
          "env": {},
          "resources": {
            "limits": {
              "cpu": "100m",
              "memory": "128Mi"
            },
            "requests": {
              "cpu": "100m",
              "memory": "64Mi"
            }
          }
        },
        "nodeSelector": {},
        "replicaCount": 1,
        "tolerations": []
      }
    ]
```

#### Parameter umum yang diizinkan untuk konfigurasi
<a name="parameters-allowed"></a>

Berikut ini adalah parameter yang direkomendasikan dalam file skema Helm yang dihadapi pelanggan.


| Parameter | Deskripsi | Haruskah memiliki default? | 
| --- | --- | --- | 
| TambahanAllabels | Tambahkan label Kubernetes ke semua objek Kubernetes yang dikelola oleh add-on. | Tidak | 
| TambahanananananOTASI | Tambahkan anotasi Kubernetes ke semua objek Kubernetes yang dikelola oleh add-on. | Tidak | 
| PodLabel | Tambahkan label Kubernetes ke pod yang dikelola oleh add-on. | Tidak | 
| PodAnnotations | Tambahkan anotasi Kubernetes ke pod yang dikelola oleh add-on. | Tidak | 
| logLevel | Tingkat log untuk komponen yang dikelola oleh add-on. | Ya | 
| NodeSelector | Bentuk kendala pemilihan simpul yang direkomendasikan paling sederhana. Anda dapat menambahkan field nodeSelector ke spesifikasi Pod Anda dan menentukan label node yang Anda inginkan untuk dimiliki oleh node target. | Berpotensi, misalnya node Linux saja | 
| toleransi | Toleransi diterapkan pada polong. Toleransi memungkinkan scheduler untuk menjadwalkan pod dengan taints yang cocok. Toleransi memungkinkan penjadwalan tetapi tidak menjamin penjadwalan. | Mungkin, lebih umum dengan daemonset | 
| afinitas | Fitur afinitas terdiri dari dua jenis afinitas: Fungsi afinitas node seperti bidang NodeSelector tetapi lebih ekspresif dan memungkinkan Anda untuk menentukan aturan lunak, afinitas/anti-afinitas antar Pod memungkinkan Anda untuk membatasi Pod terhadap label pada Pod lain. | Mungkin | 
| topologySpreadConstraints | Anda dapat menggunakan batasan penyebaran topologi untuk mengontrol bagaimana Pod tersebar di seluruh klaster Anda di antara domain kegagalan seperti wilayah, zona, node, dan domain topologi yang ditentukan pengguna lainnya. Ini dapat membantu mencapai ketersediaan tinggi serta pemanfaatan sumber daya yang efisien. | Mungkin | 
| permintaan/batas sumber daya | Tentukan berapa banyak kebutuhan cpu/memory setiap wadah. Permintaan sangat disarankan untuk diatur. Batas bersifat opsional. | Ya | 
| replika | Jumlah replika pod yang dikelola oleh add-on. Tidak berlaku untuk daemonset. | Ya | 

**catatan**  
Untuk parameter konfigurasi penjadwalan beban kerja, Anda mungkin perlu memisahkan komponen tingkat atas dalam Skema jika diperlukan. Contoh, driver Amazon EBS CSI berisi dua komponen utama, controller dan node agent - pelanggan memerlukan node yang berbeda selectors/tolerations untuk setiap komponen. 

**catatan**  
Nilai default yang didefinisikan dalam skema JSON murni untuk tujuan dokumentasi pengguna saja dan tidak menggantikan kebutuhan untuk memiliki default yang sah dalam file. `values.yaml` Jika menggunakan properti default, pastikan bahwa default dalam `values.yaml` cocok dengan skema dan dua artefak (`values.schema.json`dan`values.yaml`) tetap sinkron setiap kali perubahan dilakukan pada Bagan Helm.

```
"affinity": {
            "default": {
              "affinity": {
                "nodeAffinity": {
                  "preferredDuringSchedulingIgnoredDuringExecution": [
                    {
                      "preference": {
                        "matchExpressions": [
                          {
                            "key": "eks.amazonaws.com/compute-type",
                            "operator": "NotIn",
                            "values": [
                              "fargate"
                            ]
                          }
                        ]
                      },
                      "weight": 1
                    }
                  ]
                },
                "podAntiAffinity": {
                  "preferredDuringSchedulingIgnoredDuringExecution": [
                    {
                      "podAffinityTerm": {
                        "labelSelector": {
                          "matchExpressions": [
                            {
                              "key": "app",
                              "operator": "In",
                              "values": [
                                "ebs-csi-controller"
                              ]
                            }
                          ]
                        },
                        "topologyKey": "kubernetes.io/hostname"
                      },
                      "weight": 100
                    }
                  ]
                }
              }
            },
            "description": "Affinity of the controller pod",
            "type": [
              "object",
              "null"
            ]
          }
```

### Parameter umum yang tidak diizinkan untuk konfigurasi
<a name="parameters-not-available"></a>

Parameter metadata cluster seperti`clusterName`,,`region`, `vpcId``accountId`, dan lainnya mungkin diperlukan oleh berbagai add-on (misalnya, Elastic Load Balancing Controller). Parameter apa pun yang mirip dengan ini yang diketahui oleh layanan Amazon EKS akan secara otomatis disuntikkan oleh add-on Amazon EKS, dan tidak bertanggung jawab pengguna untuk menentukan sebagai opsi konfigurasi. Parameter ini meliputi:
+ AWS wilayah
+ Nama klaster Amazon EKS
+ ID VPC dari cluster
+ Registri kontainer, khusus untuk akun build-prod, yang digunakan oleh add-on jaringan
+ IP cluster DNS, khusus untuk add-on coredns
+ Titik akhir API kluster Amazon EKS
+ IPv4 diaktifkan pada cluster
+ IPv6 diaktifkan pada cluster
+ Delegasi awalan untuk IPv6 diaktifkan di cluster

Penyedia add-on perlu memastikan Anda memiliki template yang ditentukan untuk parameter yang berlaku tersebut. Masing-masing parameter di atas akan memiliki `parameterType` atribut yang telah ditentukan sebelumnya yang ditentukan oleh Amazon EKS. Metadata rilis akan menentukan pemetaan antara `parameterType` dan parameter name/path dalam template. Dengan cara ini, nilai dapat diteruskan secara dinamis oleh Amazon EKS tanpa mengharuskan pelanggan untuk menentukannya melalui konfigurasi dan juga memberikan fleksibilitas kepada penyedia add-on untuk menentukan nama/jalur template mereka sendiri. Parameter seperti di atas yang perlu disuntikkan Amazon EKS secara dinamis harus dikecualikan dari file skema.

**Contoh pemetaan dari metadata rilis**

```
"defaultConfiguration": [
       {
            "key": "image.containerRegistry",
            "parameterType": "CONTAINER_REGISTRY"
       }
]
```

Berikut ini adalah parameter yang tidak disarankan untuk dapat dikonfigurasi dalam file skema Helm yang dihadapi pelanggan. Entah parameter harus memiliki default yang tidak dapat dimodifikasi, atau tidak disertakan sama sekali dalam template add-on.


| Parameter | Deskripsi | Haruskah memiliki default? | 
| --- | --- | --- | 
| gambar | Container image yang akan di-deploy pada cluster Kubernetes. | Tidak, dikelola melalui definisi add-on | 
| imagePullSecrets | Mengkonfigurasi pod untuk menggunakan rahasia untuk menarik dari registri pribadi. | N/A | 
| LivenessProbe | Proses Kubelet menggunakan liveness probe untuk mengetahui kapan harus me-restart sebuah container. Misalnya, liveness probe dapat menangkap kebuntuan, di mana aplikasi berjalan, tetapi tidak dapat membuat kemajuan. Memulai ulang wadah dalam keadaan seperti itu dapat membantu membuat aplikasi lebih tersedia meskipun ada bug. | Ya | 
| ReadinessProbe | Penting bahwa Anda memiliki probe kesiapan untuk wadah Anda. Dengan cara ini proses Kubelet yang berjalan di pesawat data Anda akan tahu kapan container siap melayani lalu lintas. Sebuah Pod dianggap siap ketika semua kontainernya sudah siap. Salah satu penggunaan sinyal ini adalah untuk mengontrol Pod mana yang digunakan sebagai backend untuk Layanan. Ketika sebuah Pod tidak siap, Pod akan dihapus dari Service load balancer. | Ya | 
| StartupProbe | Kubelet menggunakan probe startup untuk mengetahui kapan aplikasi container telah dimulai. Jika probe seperti itu dikonfigurasi, itu menonaktifkan pemeriksaan keaktifan dan kesiapan hingga berhasil, memastikan probe tersebut tidak mengganggu startup aplikasi. Ini dapat digunakan untuk mengadopsi pemeriksaan keaktifan pada kontainer awal yang lambat, menghindari mereka dibunuh oleh kubelet sebelum mereka aktif dan berjalan. | Opsional | 
| podDisruptionBudget | Tentukan Pod Discruption Budget (PDB) untuk memastikan jumlah minimum POD tetap berjalan selama gangguan sukarela. PDB membatasi jumlah Pod dari aplikasi yang direplikasi yang turun secara bersamaan dari gangguan sukarela. Misalnya, aplikasi berbasis kuorum ingin memastikan bahwa jumlah replika yang berjalan tidak pernah dibawa di bawah angka yang dibutuhkan untuk kuorum. Front end web mungkin ingin memastikan bahwa jumlah replika yang melayani beban tidak pernah turun di bawah persentase tertentu dari total. | Ya, jika default ke lebih dari dua replika | 
| ServiceAccount (nama) | Nama pod akun layanan akan berjalan di bawah. | Ya | 
| ServiceAccount (anotasi) | Anotasi diterapkan ke akun layanan. Biasanya digunakan untuk fitur IAM Roles for Service Accounts | Tidak, peran akun layanan IAM ARN diatur di API add-on Amazon EKS tingkat atas. Pengecualian untuk aturan ini adalah jika add-on Anda memiliki beberapa deployments/controllers (seperti Flux) dan memerlukan peran IRSA terpisah. ARNs | 
| priorityClassName | Prioritas menunjukkan pentingnya sebuah Pod relatif terhadap Pod lainnya. Jika Pod tidak dapat dijadwalkan, scheduler akan mencoba untuk mencegah (mengusir) Pod prioritas yang lebih rendah untuk memungkinkan penjadwalan Pod yang tertunda. | Ya. Sebagian besar add-on sangat penting untuk fungsionalitas cluster, dan harus memiliki kelas prioritas yang ditetapkan secara default. | 
| podSecurityContext | Konteks keamanan mendefinisikan pengaturan hak istimewa dan kontrol akses untuk Pod atau Container. Biasanya digunakan untuk mengatur FSGroup - yang diperlukan untuk IRSA di v1.19 dan cluster yang lebih rendah. | Tidak mungkin, mengingat Amazon EKS tidak lagi mendukung Kubernetes v1.19 | 
| SecurityContext | Konteks keamanan mendefinisikan pengaturan hak istimewa dan kontrol akses untuk Pod atau Container. | Ya | 
| UpdateStrategy | Menentukan strategi yang digunakan untuk mengganti Pod lama dengan yang baru. | Ya | 
| NameOverride | Ganti nama pod. | Tidak | 
| podSecurityPolicy |  Menegakkan pembatasan pada parameter.  | Tidak - tidak PSPs digunakan lagi | 
| extraVolumeMounts/Ekstravolum |  Digunakan untuk IRSA di cluster EKS non Amazon.   | Tidak | 

# Harga produk kontainer untuk AWS Marketplace
<a name="pricing-container-products"></a>

Pada AWS Marketplace, Anda dapat membuat daftar produk gratis, produk Bring Your Own License model (BYOL), dan produk berbayar untuk Amazon Elastic Container Service (Amazon ECS) Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), dan. AWS Fargate Anda hanya dapat menetapkan satu harga per produk. Topik ini menguraikan model harga yang tersedia untuk produk kontainer. 

**catatan**  
Anda menggunakan [Layanan AWS Marketplace Pengukuran](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) untuk menegakkan hak dan penggunaan meter untuk produk berbayar Anda. Untuk per tugas atau harga per pod, penggunaan diukur secara otomatis oleh AWS.

Harga yang Anda tetapkan untuk produk kontainer berlaku untuk semua Wilayah AWS. Setiap kali Anda menurunkan harga untuk produk kontainer, harga baru diterapkan untuk pembeli Anda segera. Untuk kenaikan harga, pembeli yang ada diberitahu tentang perubahan 90 hari sebelum berdampak pada penagihan mereka. Pembeli baru ditagih jumlah baru.

**catatan**  
Untuk pelanggan baru, perubahan harga segera efektif. Untuk pelanggan yang sudah ada, perubahan harga berlaku efektif pada hari pertama bulan setelah periode 90 hari yang dimulai pada tanggal pemberitahuan perubahan harga dikirim. Misalnya, Anda mengirim pemberitahuan perubahan harga pada 16 Maret. 16 Juni sekitar 90 hari setelah 16 Maret. Karena perubahan harga terjadi pada hari pertama bulan yang mengikuti periode 90 hari, tanggal efektif perubahan adalah 1 Juli.

**Topics**
+ [Model harga kontainer](#pricing-models-for-server-products)

## Model harga kontainer
<a name="pricing-models-for-server-products"></a>

AWS Marketplace memiliki beberapa model harga untuk produk kontainer. 

Tabel berikut memberikan informasi umum tentang model penetapan harga untuk produk berbasis kontainer.


**Model harga untuk produk kontainer**  

| Model penentuan harga | Deskripsi | 
| --- | --- | 
| Bawa Lisensi Sendiri (BYOL) | BYOL dikelola di luar AWS Marketplace melalui hubungan penagihan eksternal yang Anda pertahankan dengan pembeli. Perangkat lunak Anda dalam wadah tidak terintegrasi dengan AWS Marketplace untuk penagihan. | 
| Bulanan | **Harga bulanan tetap**Harga bulanan tetap yang memberi pengguna penggunaan produk tanpa batas selama bulan berikutnya.Contoh: Anda menetapkan harga untuk produk Anda pada \$199 per bulan. Produk Anda menyertakan tiga gambar kontainer berbeda yang digunakan menggunakan definisi tugas Amazon ECS.Setelah pembeli berlangganan produk Anda, mereka segera dikenakan biaya \$199, yang berulang setiap bulan sampai mereka membatalkan langganan. Pembeli juga mendapatkan penggunaan produk yang tidak terbatas. Pembeli juga membayar secara terpisah untuk infrastruktur apa pun yang menjalankan tugas. Saat berlangganan, mereka dapat mengakses gambar kontainer Anda. Mereka dapat meluncurkan dan menjalankan sejumlah kontainer dari gambar-gambar tersebut di Amazon ECS atau Amazon EKS dalam konfigurasi apa pun.Jika pembeli membatalkan langganan mereka di pertengahan bulan, mereka kehilangan akses ke repositori Amazon ECR tempat AWS Marketplace menyimpan gambar kontainer. Pembeli mungkin telah menarik dan menyimpan gambar asli. Namun, mereka tidak dapat lagi menarik versi gambar kontainer baru yang Anda sediakan AWS Marketplace. Pembeli dikembalikan untuk bagian yang tidak digunakan pada bulan terakhir. Anda dibayar berdasarkan penggunaan pembeli dikurangi biaya yang disepakati AWS Marketplace . | 
| Dimensi harga terukur kustom |  Harga terukur khusus berdasarkan dimensi yang Anda tentukan (misalnya pengguna, node, repositori, atau GB), hingga 24 dimensi per produk.  Contoh: Biaya produk Anda oleh pengguna. Anda memiliki pengguna admin dan pengguna reguler, dan Anda menentukan harga sebagai \$12 untuk pengguna admin dan \$11 untuk pengguna reguler. Anda dapat mengaturnya sebagai dimensi terpisah saat mencantumkan produk Anda. Anda mengenakan biaya oleh pengguna yang masuk per hari dan Anda mengukur penggunaan itu per hari. Untuk mempelajari lebih lanjut tentang pengukuran kustom untuk harga berbasis penggunaan, lihat. [Mengkonfigurasi pengukuran khusus untuk produk kontainer dengan AWS Marketplace Metering Service](container-metering-meterusage.md)  | 
| Per tugas atau per pod harga per jam |  **Tugas Amazon ECS atau pod Amazon EKS** Per tugas Amazon ECS atau per Amazon EKS harga pod yang kami ukur hingga yang kedua dengan harga yang ditetapkan per jam. Contoh: Produk Anda mencakup tiga gambar kontainer yang berbeda: simpul pengontrol, node pekerja, dan simpul analitik. Karena produk Anda tidak berfungsi atau berguna tanpa node pengontrol, Anda memutuskan bahwa itu adalah gambar yang ingin Anda isi untuk penggunaan. Anda menetapkan harga \$16 per jam. Anda memodifikasi perangkat lunak dalam image kontainer agar node pengontrol dapat diintegrasikan dengan operasi [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)`RegisterUsage`API. Ini memastikan bahwa hanya pembeli dengan langganan aktif yang dapat meluncurkan dan menjalankan gambar kontainer itu dan penggunaannya diukur berdasarkan berapa lama itu berjalan. Pembeli dikenakan biaya \$16 per jam penggunaan untuk setiap pod pengontrol Amazon EKS yang berjalan. Jika pembeli meluncurkan lima pod pengontrol Amazon EKS yang menyertakan kontainer node pengontrol, mereka dikenakan biaya \$130 per jam (\$16 per pod). Pembeli juga membayar secara terpisah untuk infrastruktur apa pun yang dijalankan pod. Untuk harga per jam, penagihan per detik dengan minimum 1 menit. Jika pelanggan menjalankan kontainer pengontrol ini selama 20 menit dan 30 detik, mereka akan terisi daya`20 x ($6/60) + 30 x ($6/60/60) = $2 + $0.05 = $2.05`. Anda dibayar berdasarkan penggunaan pembeli dikurangi biaya yang disepakati AWS Marketplace . Untuk mempelajari lebih lanjut tentang harga per tugas atau per pod per jam, lihat[Mengkonfigurasi pengukuran per jam dengan AWS Marketplace Metering Service](container-metering-registerusage.md).  | 
| Harga per jam atau harga pengukuran khusus dengan kontrak jangka panjang |  Kontrak jangka panjang, dengan harga yang lebih murah, dibayar di muka atau dengan angsuran reguler. Kontrak jangka panjang dapat ditambahkan ke produk yang sudah ada yang memiliki harga terukur khusus, atau per tugas dan harga per pod. Pembeli membayar harga terukur ketika mereka mengkonsumsi lebih dari apa yang mereka beli dalam kontrak jangka panjang. Contoh: Untuk model harga terukur, Anda dapat menambahkan harga kontrak jangka panjang bagi pembeli untuk mendapatkan diskon karena melakukan di muka. Katakanlah bahwa Anda biasanya mengenakan biaya \$11 per beberapa unit yang dikonsumsi. Pembeli yang menggunakan 1 unit per jam akan membayar \$18760 per tahun ()`365 days x 24 hours x $1 per hour`. Anda dapat mengaktifkan kontrak yang memungkinkan pembeli untuk menggunakan 1 unit per jam selama 365 hari dengan setengah harga itu (\$14380). Dalam hal ini, pembeli berkomitmen untuk membayar di muka untuk kontrak satu tahun, dan harga turun dari \$11 per unit menjadi \$10,5 per unit. Anda juga dapat memungkinkan pembeli untuk membeli beberapa kontrak ini. Jika kuantitas yang diukur menunjukkan bahwa pembeli mengkonsumsi 10 unit dalam satu jam, dan mereka memiliki dua kontrak, maka 2 unit akan dimasukkan dalam 2 kontrak. 8 unit tambahan akan ditagih pada reguler \$11 per jam, dengan total \$18 pada jam itu. Untuk contoh per tugas atau per pod, Anda juga dapat menambahkan harga kontrak jangka panjang bagi pembeli untuk mendapatkan diskon untuk melakukan di muka. Jika Anda biasanya mengenakan biaya \$16 per pod, Anda dapat menetapkan durasi kontrak jangka panjang 365 hari dengan harga \$113.140 (). `365 days x 24 hours x $3 per pod per hour` Satu kontrak kemudian akan memberikan hak kepada pelanggan untuk 1 pod per jam selama 365 hari tersebut. Pelanggan dapat memilih untuk membeli beberapa kontrak. Misalnya, pelanggan dapat membeli dua kontrak yang memberikan hak kepada mereka untuk 2 pod per jam. Jika pelanggan menjalankan lebih banyak pod per jam daripada kontrak yang berhak, maka kelebihan pod akan ditagih dengan harga normal per jam Anda. Dalam kedua kasus tersebut, pembeli yang membeli kontrak jangka panjang akan ditagih di muka, baik sebagai pembayaran satu kali atau pembayaran future yang dijadwalkan secara teratur. Pembeli juga akan ditagih untuk penggunaan tambahan apa pun di atas kontrak mereka dengan tarif terukur.   | 
| Harga kontrak kontainer |  **Kontainer dengan harga kontrak** — Produk berbasis kontainer yang pembeli membayar biaya di muka. Untuk mempelajari lebih lanjut tentang harga kontrak, lihat[Harga kontrak untuk produk kontainer dengan AWS License Manager](container-license-manager-integration.md).  | 

# Integrasi penagihan, pengukuran, dan lisensi produk kontainer
<a name="container-products-billing-integration"></a>

AWS Marketplace terintegrasi dengan yang lain Layanan AWS untuk memberikan pengukuran dan harga berbasis kontrak untuk produk kontainer Anda. Untuk produk berbasis kontainer dengan harga penggunaan, Anda dapat menggunakan [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)untuk memeriksa hak untuk menggunakan produk Anda dan penggunaan pengukuran untuk penagihan. Untuk produk berbasis kontainer dengan harga kontrak, Anda dapat menggunakan lisensi AWS License Manager untuk mengaitkan lisensi dengan produk Anda. Bagian berikut memberikan informasi lebih lanjut tentang pengukuran per jam dan kustom dengan AWS Marketplace Metering Service dan harga kontrak dengan. AWS License Manager

**Topics**
+ [Pengukuran per jam dan kustom dengan AWS Marketplace Metering Service](#entitlement-and-metering-for-paid-products)
+ [Harga kontrak dengan AWS License Manager](#container-products-contracts-license-manager)
+ [Mengkonfigurasi pengukuran per jam dengan AWS Marketplace Metering Service](container-metering-registerusage.md)
+ [Mengkonfigurasi pengukuran khusus untuk produk kontainer dengan AWS Marketplace Metering Service](container-metering-meterusage.md)
+ [Harga kontrak untuk produk kontainer dengan AWS License Manager](container-license-manager-integration.md)

## Pengukuran per jam dan kustom dengan AWS Marketplace Metering Service
<a name="entitlement-and-metering-for-paid-products"></a>

[Untuk memeriksa hak untuk menggunakan produk Anda dan untuk mengukur penggunaan untuk penagihan, gunakan Layanan Pengukuran AWS Marketplace .](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) Jika Anda ingin menentukan unit harga Anda sendiri dan meteran penggunaannya kepada kami untuk penagihan, integrasikan dengan menggunakan operasi [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API. Jika Anda ingin menentukan harga produk berdasarkan jumlah tugas atau pod yang digunakan dan memiliki AWS pengukur penggunaan secara otomatis, integrasikan dengan menggunakan operasi [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API. Untuk kedua jenis harga, Anda dapat menambahkan harga kontrak jangka panjang tanpa mengubah cara Anda berintegrasi dengan AWS Marketplace Metering Service.

Ketika Anda membuat produk kontainer baru di Portal Manajemen AWS Marketplace, kami menyediakan satu set pengidentifikasi produk (kode produk dan kunci publik) yang digunakan untuk mengintegrasikan produk Anda dengan. AWS Marketplace Metering Service

### Penetapan
<a name="seller-container-entitlement"></a>

Mengintegrasikan dengan AWS Marketplace Metering Service memungkinkan Anda untuk memverifikasi bahwa pelanggan yang menjalankan perangkat lunak berbayar Anda berlangganan produk Anda AWS Marketplace, melindungi Anda dari penggunaan yang tidak sah saat startup kontainer. Untuk memverifikasi hak, gunakan operasi [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)atau [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API, tergantung pada model harga Anda. Untuk model harga bulanan per jam dan tetap, gunakan operasi `RegisterUsage` API. Untuk model harga pengukuran kustom, gunakan operasi `MeterUsage` API.

Jika pembeli tidak berhak atas produk Anda, operasi API ini mengembalikan `CustomerNotEntitledException` pengecualian.

**catatan**  
Jika pembeli berhenti berlangganan dari produk Anda saat menjalankannya, mereka berhak untuk terus menjalankannya. Namun, mereka tidak dapat meluncurkan kontainer tambahan untuk produk Anda.

### Pedoman integrasi
<a name="integration-guidelines"></a>

Saat Anda membuat dan memublikasikan produk kontainer dan menggunakan operasi `MeterUsage` atau `RegisterUsage` API untuk hak dan pengukuran, ingatlah pedoman berikut:
+ Jangan mengonfigurasi AWS kredensi dalam perangkat lunak Anda atau gambar kontainer Docker. AWS kredensi untuk pembeli diperoleh secara otomatis saat runtime saat image container Anda berjalan dalam tugas Amazon ECS atau pod Amazon EKS.
+  Untuk memanggil operasi `MeterUsage` atau `RegisterUsage` API dari Amazon EKS, Anda harus [menggunakan AWS SDK yang didukung](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html). Untuk menguji`MeterUsage`atau`RegisterUsage`integrasi Amazon EKS, Anda harus menjalankan cluster Amazon EKS menjalankan Kubernetes 1.13.x atau lebih besar. Kubernetes 1.13 diperlukan untuk peran AWS Identity and Access Management (IAM) untuk dukungan pod. Peran IAM diperlukan untuk pod yang sedang berjalan untuk mendapatkan AWS kredensional yang diperlukan untuk menjalankan tindakan ini di Amazon EKS. 
+ Anda dapat melakukan pengembangan lokal, tetapi Anda akan mendapatkan`PlatformNotSupportedException`pengecualian. Pengecualian ini tidak akan terjadi saat Anda meluncurkan penampung pada layanan AWS kontainer (Amazon ECS, Amazon EKS, dan Fargate).

### Didukung Wilayah AWS
<a name="supported-regions-metering"></a>

Untuk daftar semua yang AWS Marketplace didukung Wilayah AWS, lihat [Tabel Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) di situs web Infrastruktur Global.

#### Memperoleh Wilayah AWS untuk pengukuran
<a name="metering-aws-region-configuration"></a>

Saat mengintegrasikan penampung Anda untuk pengukuran dengan operasi `MeterUsage` atau `RegisterUsage` API, jangan mengonfigurasi AWS SDK untuk menggunakan yang spesifik. Wilayah AWS Wilayah harus diperoleh secara dinamis saat runtime. 

**Example**  
Misalnya, pelanggan meluncurkan tugas Amazon ECS atau pod Amazon EKS. Operasi `RegisterUsage` API dipanggil di Wilayah yang berbeda dari Wilayah tempat tugas Amazon ECS atau pod Amazon EKS diluncurkan. Oleh karena itu, operasi `RegisterUsage` API menimbulkan `InvalidRegionException` kesalahan.



AWS Bahasa SDK tidak menentukan `AWS_REGION` secara konsisten. Jika SDK Anda tidak secara otomatis mengambil`AWS_REGION`, perangkat lunak perlu ditulis secara manual untuk menentukan`AWS_Region`. Misalnya, AWS SDK untuk Java secara otomatis menggunakan [metadata instans Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) (khususnya,`ec2InstanceMetadata`) untuk mendapatkan Wilayah saat variabel lingkungan atau konfigurasi lain tidak ada. Dalam hal ini, hanya panggilan`ec2InstanceMetadata`jika`AWS_REGION`variabel lingkungan tidak ada.

Untuk informasi tentang cara mendapatkan Wilayah AWS saat runtime secara dinamis, lihat [Panduan Pengembang AWS SDK](https://aws.amazon.com/tools) untuk bahasa pemrograman Anda.

### Mencegah modifikasi pengukuran
<a name="prevent-metering-modification"></a>

Memperkenalkan cara bagi pembeli untuk mengubah atau mengganti panggilan ke`RegisterUsage`atau`MeterUsage`dapat mengakibatkan masalah penagihan dan pembayaran yang tidak diinginkan. Kami sangat menyarankan Anda mengintegrasikan logika pengukuran dan hak.

Saat merekayasa produk Anda untuk mencegah modifikasi pengukuran, ingatlah hal berikut:
+ Jika pembeli dapat menyisipkan lapisan gambar baru yang berisi `CMD` atau `ENTRYPOINT` instruksi, langsung `MeterUsage` integrasikan `RegisterUsage` atau ke dalam perangkat lunak yang dijalankan pembeli melalui gambar kontainer Anda. Jika tidak, panggilan ke `RegisterUsage` atau `MeterUsage` dieksekusi melalui `CMD` atau `ENTRYPOINT` dari gambar dasar kemungkinan akan diganti oleh pembeli.
+ Kami menyarankan Anda mengelola kode AWS Marketplace produk yang digunakan perangkat lunak Anda sebagai masukan `RegisterUsage` atau dengan `MeterUsage` cara yang tidak dapat dimodifikasi oleh pembeli. *Namun, jika produk Anda mengelola kode produk dengan cara yang dapat ditimpa pelanggan, seperti bagan Helm AWS CloudFormation, atau manifes Kubernetes, Anda harus mempertahankan daftar kode produk tepercaya.* AWS Marketplace Ini untuk memastikan bahwa kode produk yang dilewati perangkat lunak Anda sebagai input `RegisterUsage` atau `MeterUsage` valid.
+  Jika salah satu kode produk tepercaya Anda adalah produk gratis, pastikan kode produk tersebut tidak dapat digunakan sebagai pengganti kode produk berbayar.

## Harga kontrak dengan AWS License Manager
<a name="container-products-contracts-license-manager"></a>

Untuk produk berbasis kontainer dengan harga kontrak, Anda gunakan AWS License Manager untuk mengaitkan lisensi dengan produk Anda. 

AWS License Manager adalah alat manajemen lisensi yang memungkinkan aplikasi Anda untuk melacak dan memperbarui lisensi (juga dikenal sebagai hak) yang telah dibeli oleh pelanggan. Bagian ini memberikan informasi tentang cara mengintegrasikan produk Anda AWS License Manager. Setelah integrasi selesai, Anda dapat mempublikasikan daftar produk Anda AWS Marketplace.

Untuk informasi selengkapnya AWS License Manager, lihat [Panduan AWS License Manager Pengguna](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) dan [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)bagian *Referensi AWS CLI Perintah*.

**catatan**  
Pelanggan tidak dapat meluncurkan instance baru dari kontainer setelah masa berakhirnya kontrak. Namun, selama durasi kontrak, mereka dapat meluncurkan sejumlah instance. Lisensi ini tidak terikat pada node atau instance tertentu. Perangkat lunak apa pun yang berjalan pada wadah apa pun pada node apa pun dapat memeriksa lisensi selama memiliki AWS kredensialnya yang ditetapkan.
**Pembuatan Penawaran Pribadi** — Penjual dapat menghasilkan penawaran pribadi untuk produk menggunakan alat pembuatan penawaran Pribadi di Portal Manajemen AWS Marketplace.
**Pelaporan** — Anda dapat mengatur umpan data dengan menyiapkan bucket Amazon S3 di bagian Laporan **di** bagian. Portal Manajemen AWS Marketplace Untuk informasi selengkapnya, lihat [Laporan penjual, umpan data, dan dasbor di AWS Marketplace](reports-and-data-feed.md).

### Alur kerja integrasi
<a name="container-LM-LM-workflow"></a>

Langkah-langkah berikut menunjukkan alur kerja untuk mengintegrasikan produk kontainer Anda dengan: AWS License Manager

1. Penjual menciptakan produk dengan AWS License Manager integrasi.

1. Penjual mencantumkan produk di AWS Marketplace.

1. Pembeli menemukan produk AWS Marketplace dan membelinya.

1. Lisensi dikirim ke pembeli di dalamnya Akun AWS.

1. Pembeli menggunakan perangkat lunak dengan meluncurkan instans Amazon EC2, tugas Amazon ECS, atau perangkat lunak pod Amazon EKS. Pelanggan menyebarkan menggunakan peran IAM.

1. Perangkat lunak membaca lisensi di AWS License Manager akun pembeli, menemukan hak yang dibeli, dan menyediakan fitur yang sesuai. 
**catatan**  
License Manager tidak melakukan pelacakan atau pembaruan apa pun; ini dilakukan oleh aplikasi penjual.

# Mengkonfigurasi pengukuran per jam dengan AWS Marketplace Metering Service
<a name="container-metering-registerusage"></a>

**catatan**  
 Untuk penerapan Amazon EKS, perangkat lunak Anda harus menggunakan [peran IAM untuk akun layanan (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) untuk menandatangani panggilan API untuk operasi API. [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_RegisterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_RegisterUsage.html) Menggunakan [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html), peran node, atau kunci akses jangka panjang tidak didukung.  
Untuk penerapan Amazon ECS, perangkat lunak Anda harus menggunakan peran [IAM tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) untuk menandatangani panggilan API untuk operasi API. [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_RegisterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_RegisterUsage.html) Menggunakan peran node atau kunci akses jangka panjang tidak didukung.

Jika produk kontainer Anda menggunakan harga per jam per tugas atau per-pod alih-alih dimensi harga terukur khusus, Anda tidak perlu menentukan dimensi pengukuran khusus. Anda dapat menggunakan AWS Marketplace Metering Service untuk pengukuran per jam dengan produk kontainer. AWS Marketplace Bagian berikut menunjukkan cara mengonfigurasi pengukuran per jam dengan AWS Marketplace Metering Service.

Perangkat lunak pengukur operasi `RegisterUsage` API digunakan per tugas Amazon Elastic Container Service (Amazon ECS) atau per pod Amazon Elastic Kubernetes Service (Amazon EKS), per jam, dengan penggunaan prorata ke yang kedua. Penggunaan minimal 1 menit berlaku untuk tugas atau pod yang berumur pendek. Pengukuran berkelanjutan untuk penggunaan perangkat lunak secara otomatis ditangani oleh. AWS Marketplace Metering Control Plane Perangkat lunak Anda tidak diperlukan untuk melakukan tindakan khusus pengukuran apa pun kecuali menelepon `RegisterUsage` sekali untuk pengukuran penggunaan perangkat lunak untuk memulai.

`RegisterUsage`harus segera dipanggil pada saat meluncurkan wadah. Jika Anda tidak mendaftarkan kontainer dalam 6 jam pertama peluncuran kontainer, AWS Marketplace Metering Service tidak memberikan jaminan pengukuran apa pun untuk bulan-bulan sebelumnya. Namun, pengukuran akan berlanjut untuk bulan berjalan ke depan sampai wadah berakhir.

Mereka AWS Marketplace Metering Control Plane terus menagih pelanggan untuk menjalankan tugas Amazon ECS dan pod Amazon EKS, terlepas dari status langganan pelanggan. Ini menghilangkan kebutuhan perangkat lunak Anda untuk melakukan pemeriksaan hak setelah peluncuran tugas atau pod awal yang berhasil. 

*Untuk informasi selengkapnya tentang mengintegrasikan AWS Marketplace Metering Service API dengan produk kontainer dengan harga per jam, lihat lab [Integrasikan dengan pengukuran per jam](https://catalog.workshops.aws/mpseller/en-US/container/integrate-hourly) di bengkel penjual.AWS Marketplace * 

**Topics**
+ [Prasyarat pengukuran per jam](#hourly-metering-prereqs)
+ [Integrasi pengujian untuk `RegisterUsage`](#testing-integration-for-registerusage)
+ [Penanganan kesalahan untuk `RegisterUsage`](#hourly-metering-entitlement-error-handling)
+ [Mengintegrasikan produk container Anda dengan AWS Marketplace Metering Service menggunakan AWS SDK untuk Java](java-integration-example-registerusage.md)

## Prasyarat pengukuran per jam
<a name="hourly-metering-prereqs"></a>

Sebelum menerbitkan produk, Anda harus melakukan hal berikut:

1. Buat produk kontainer baru di Portal Manajemen AWS Marketplace, dan catat kode produknya.

   Untuk informasi selengkapnya, lihat [Ikhtisar: Buat produk kontainer](container-product-getting-started.md#create-container-product).

1. Gunakan peran AWS Identity and Access Management (IAM) untuk tugas atau pod yang menjalankan aplikasi Anda dengan izin IAM yang diperlukan untuk memanggil. `RegisterUsage` Kebijakan terkelola `AWSMarketplaceMeteringRegisterUsage` meliputi izin-izin ini. Untuk informasi selengkapnya tentang kebijakan, lihat [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)di *Referensi Kebijakan AWS Terkelola*.

1. (Opsional) Jika Anda ingin melihat logging, kami sarankan Anda mengaktifkan AWS CloudTrail logging dalam tugas atau definisi pod.

1. Lakukan panggilan uji ke operasi `RegisterUsage` API dengan catatan untuk semua dimensi harga yang Anda tetapkan.

## Integrasi pengujian untuk `RegisterUsage`
<a name="testing-integration-for-registerusage"></a>

Gunakan operasi `RegisterUsage` API untuk menguji integrasi Anda sebelum mengirimkan gambar Anda AWS Marketplace untuk dipublikasikan.

Panggil `RegisterUsage` dari gambar kontainer dengan menjalankan produk Anda di Amazon ECS atau Amazon EKS. Gunakan AWS akun yang Anda gunakan untuk membuat daftar produk AWS Marketplace. Integrasi pengukuran Anda harus secara dinamis mengatur Wilayah AWS, bukan hardcoding itu. Namun, saat menguji, luncurkan setidaknya satu tugas Amazon ECS atau pod Amazon EKS yang berisi kontainer berbayar Anda di Wilayah AS Timur (Virginia Utara). Dengan melakukan ini, tim AWS Marketplace operasi dapat memverifikasi pekerjaan Anda dengan log di Wilayah tersebut.

**catatan**  
Jika produk Anda mendukung Amazon ECS dan Amazon EKS, Anda hanya perlu meluncurkan di Amazon EKS bagi kami untuk memvalidasi integrasi Anda.

Anda tidak dapat sepenuhnya menguji integrasi sampai produk Anda dipublikasikan dengan semua metadata dan informasi harga yang diperlukan. Jika diminta, tim operasi AWS Marketplace katalog dapat memverifikasi penerimaan catatan pengukuran Anda.

## Penanganan kesalahan untuk `RegisterUsage`
<a name="hourly-metering-entitlement-error-handling"></a>

Jika image container Anda terintegrasi dengan AWS Marketplace Metering Service dan menerima pengecualian selain `ThrottlingException` saat startup container, Anda harus menghentikan container untuk mencegah penggunaan yang tidak sah.

Pengecualian selain `ThrottlingException` dilemparkan hanya pada panggilan awal ke operasi `RegisterUsage` API. Panggilan berikutnya dari tugas Amazon ECS yang sama atau pod Amazon EKS tidak dibuang `CustomerNotSubscribedException` meskipun pelanggan berhenti berlangganan saat tugas atau pod masih berjalan. Pelanggan ini masih dikenakan biaya untuk menjalankan kontainer setelah mereka berhenti berlangganan, dan penggunaannya dilacak.

Tabel berikut menjelaskan kesalahan yang mungkin ditimbulkan oleh operasi `RegisterUsage` API. Setiap bahasa pemrograman AWS SDK memiliki seperangkat pedoman penanganan kesalahan yang dapat Anda rujuk untuk informasi tambahan. 


|  **Kesalahan**  |  **Deskripsi**  | 
| --- | --- | 
|  InternalServiceErrorException  |  RegisterUsagetidak tersedia.  | 
|  CustomerNotEntitledException  |  Pelanggan tidak memiliki langganan yang valid untuk produk tersebut.  | 
|  InvalidProductCodeException  |  ParameterProductCodenilai yang dilewatkan sebagai bagian dari permintaan tidak ada.  | 
|  InvalidPublicKeyException  |  ParameterPublicKeyVersionnilai yang dilewatkan sebagai bagian dari permintaan tidak ada.  | 
|  PlatformNotSupportedException  |  AWS Marketplace tidak mendukung penggunaan pengukuran dari platform yang mendasarinya. Hanya Amazon ECS, Amazon EKS, dan AWS Fargate yang didukung.  | 
|  ThrottlingException  |  Panggilan keRegisterUsagediperlambat.  | 
|  InvalidRegionException  |  RegisterUsageharus dipanggil sama Wilayah AWS dengan tugas Amazon ECS atau pod Amazon EKS diluncurkan. Hal ini mencegah kontainer dari memilih Wilayah (misalnya,withRegion(“us-east-1”)) saat memanggilRegisterUsage.  | 

# Mengintegrasikan produk container Anda dengan AWS Marketplace Metering Service menggunakan AWS SDK untuk Java
<a name="java-integration-example-registerusage"></a>

Anda dapat menggunakan AWS SDK untuk Java untuk berintegrasi dengan AWS Marketplace Metering Service. Pengukuran berkelanjutan untuk penggunaan perangkat lunak secara otomatis ditangani oleh. AWS Marketplace Metering Control Plane Perangkat lunak Anda tidak diperlukan untuk melakukan tindakan khusus pengukuran apa pun kecuali menelepon `RegisterUsage` sekali untuk pengukuran penggunaan perangkat lunak untuk memulai. Topik ini memberikan contoh implementasi menggunakan AWS SDK untuk Java untuk mengintegrasikan dengan `RegisterUsage` tindakan [Layanan AWS Marketplace Pengukuran](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html). 

`RegisterUsage`harus segera dipanggil pada saat meluncurkan wadah. Jika Anda tidak mendaftarkan kontainer dalam 6 jam pertama peluncuran kontainer, AWS Marketplace Metering Service tidak memberikan jaminan pengukuran apa pun untuk bulan-bulan sebelumnya. Namun, pengukuran akan berlanjut untuk bulan berjalan ke depan sampai wadah berakhir.

Untuk kode sumber lengkap, lihat[RegisterUsage Contoh Java](#registerusage-java-example). Banyak dari langkah-langkah ini berlaku terlepas dari bahasa AWS SDK. 



**Contoh langkah untuk integrasi AWS Marketplace Metering Service**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/tour).

1. Dari**Aset**Pilih**Kontainer**untuk mulai membuat produk kontainer baru. Membuat produk menghasilkan kode produk untuk produk untuk mengintegrasikan dengan citra kontainer Anda. Untuk informasi tentang izin IAM yang diperlukan, lihat [AWS Marketplace izin API pengukuran dan hak](iam-user-policy-for-aws-marketplace-actions.md).

1.  Unduh [AWS Java SDK](https://aws.amazon.com/sdk-for-java/) publik. 
**penting**  
 Untuk memanggil metering APIs dari Amazon EKS, Anda harus [menggunakan AWS SDK yang didukung](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) dan berjalan di klaster Amazon EKS yang menjalankan Kubernetes 1.13 atau yang lebih baru. 

1.  (Opsional) Jika Anda mengintegrasikan dengan `RegisterUsage` tindakan dan ingin melakukan verifikasi tanda tangan digital, Anda perlu mengonfigurasi pustaka verifikasi [BouncyCastle](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on)tanda tangan di classpath aplikasi Anda.

   Jika Anda ingin menggunakan JSON Web Token (JWT), Anda juga harus menyertakan[Java JWT](https://jwt.io/)perpustakaan di classpath aplikasi Anda. Menggunakan JWT memberikan pendekatan yang lebih sederhana untuk verifikasi tanda tangan tetapi tidak diperlukan, dan Anda dapat menggunakan mandiri sebagai BouncyCastle gantinya. Baik Anda menggunakan JWT atau BouncyCastle, Anda perlu menggunakan sistem build seperti Maven untuk menyertakan dependensi transitif atau JWT di classpath aplikasi Anda. BouncyCastle 

   ```
   // Required for signature verification using code sample
   <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcpkix-jdk15on</artifactId>
       <version>1.60</version>
   </dependency>
   
   // This one is only required for JWT
   <dependency>
       <groupId>com.nimbusds</groupId>
       <artifactId>nimbus-jose-jwt</artifactId>
       <version>6.0</version>
   </dependency>
   ```

1.  Panggilan`RegisterUsage`dari setiap citra kontainer berbayar dalam penawaran produk Anda.`ProductCode`dan`PublicKeyVersion`diperlukan parameter, dan semua input lainnya adalah opsional. Berikut ini adalah contoh muatan untuk`RegisterUsage`. 

   ```
   {
       "ProductCode" : "string", // (required)
       "PublicKeyVersion": 1,    // (required)
       "Nonce": "string",        // (optional) to scope down the registration
                                 //            to a specific running software
                                 //            instance and guard against
                                 //            replay attacks
   }
   ```
**catatan**  
Dimungkinkan untuk melihat masalah sementara dalam menghubungkan ke AWS Marketplace Metering Service. AWS Marketplace sangat merekomendasikan untuk menerapkan percobaan ulang hingga 30 menit, dengan mundur eksponensial, untuk menghindari pemadaman jangka pendek atau masalah jaringan.

1.  `RegisterUsage`menghasilkan tanda tangan digital RSA-PSS menggunakan SHA-256 yang dapat Anda gunakan untuk memverifikasi keaslian permintaan. Tanda tangan meliputi kolom-kolom berikut:`ProductCode`,`PublicKeyVersion`, dan`Nonce`. Untuk memverifikasi tanda tangan digital, Anda harus mempertahankan bidang ini dari permintaan. Kode berikut adalah contoh responss terhadap`RegisterUsage`Panggilan. 

   ```
   {
   "Signature": "<<JWT Token>>"
   }
   
   // Where the JWT Token is composed of 3 dot-separated, 
   // base-64 URL Encoded sections.
   // e.g. eyJhbGcVCJ9.eyJzdWIMzkwMjJ9.rrO9Qw0SXRWTe
   
   // Section 1: Header/Algorithm
   {
   "alg": "PS256",
   "typ": "JWT"
   }
   
   // Section 2: Payload
   {
   "ProductCode" : "string",
   "PublicKeyVersion": 1,
   "Nonce": "string",
   "iat": date // JWT issued at claim 
   }
   
   // Section 3: RSA-PSS SHA256 signature
   "rrO9Q4FEi3gweH3X4lrt2okf5zwIatUUwERlw016wTy_21Nv8S..."
   ```

1. Buat kembali versi baru gambar penampung Anda yang menyertakan `RegisterUsage` panggilan, beri tag penampung, dan dorong ke registri kontainer apa pun yang kompatibel dengan Amazon ECS atau Amazon EKS, seperti Amazon ECR atau Amazon ECR Public. Jika Anda menggunakan Amazon ECR, memastikan bahwa akun meluncurkan tugas Amazon ECS atau Amazon EKS pod memiliki izin pada repositori Amazon ECR. Jika tidak, peluncuran gagal.

1.  Buat[IAM](https://aws.amazon.com/iam/)peran yang memberikan izin untuk kontainer Anda untuk menelepon`RegisterUsage`, seperti yang didefinisikan dalam kode berikut. Anda harus menyediakan IAM role ini di parameter [Peran tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) Amazon ECS atau definisi pod Amazon EKS.

------
#### [ JSON ]

****  

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

------

1. Buat tugas Amazon ECS atau definisi pod Amazon EKS yang mereferensikan wadah yang telah terintegrasi AWS Marketplace dan mereferensikan peran IAM yang Anda buat di langkah 7. Anda harus mengaktifkan AWS CloudTrail logging dalam definisi tugas jika Anda ingin melihat logging. 

1. Buat Amazon ECS atau Amazon EKS cluster untuk melaksanakan tugas Anda atau pod. Untuk informasi selengkapnya tentang cara membuat Amazon ECS cluster, lihat[Membuat Gugus](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html)di*Panduan Pengembang Layanan Elastic kontainer*. Untuk informasi selengkapnya tentang membuat cluster Amazon EKS (menggunakan Kubernetes versi 1.1.3.x atau yang lebih baru), lihat[Membuat klaster EKS Amazon](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html).

1. Konfigurasikan cluster Amazon ECS atau Amazon EKS dan luncurkan definisi tugas Amazon ECS atau pod Amazon EKS yang Anda buat, di us-east-1. Wilayah AWS Hanya selama proses pengujian ini, sebelum produk ditayangkan, Anda harus menggunakan wilayah ini.

1. Saat Anda mendapatkan responss yang valid kembali dari`RegisterUsage`, Anda dapat mulai membuat produk kontainer Anda. Untuk pertanyaan, hubungi[AWS Marketplace Operasi Penjual](https://aws.amazon.com/marketplace/management/contact-us/)Tim. 

## RegisterUsage Contoh Java
<a name="registerusage-java-example"></a>

Contoh berikut menggunakan AWS SDK untuk Java dan AWS Marketplace Metering Service untuk memanggil `RegisterUsage` operasi. Verifikasi tanda tangan bersifat opsional, tetapi jika Anda ingin melakukan verifikasi tanda tangan, Anda harus menyertakan pustaka verifikasi tanda tangan digital yang diperlukan. Contoh ini hanya untuk tujuan ilustrasi. 

```
import com.amazonaws.auth.PEM;
import com.amazonaws.services.marketplacemetering.AWSMarketplaceMetering;
import com.amazonaws.services.marketplacemetering.AWSMarketplaceMeteringClientBuilder;
import com.amazonaws.services.marketplacemetering.model.RegisterUsageRequest;
import com.amazonaws.services.marketplacemetering.model.RegisterUsageResult;
import com.amazonaws.util.json.Jackson;
import com.fasterxml.jackson.databind.JsonNode;
import com.nimbusds.jose.JWSObject;
import com.nimbusds.jose.JWSVerifier;
import com.nimbusds.jose.crypto.RSASSAVerifier;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
import java.security.PublicKey;
import java.security.Security;
import java.security.Signature;
import java.security.interfaces.RSAPublicKey;
import java.util.Base64;
import java.util.Optional;
import java.util.UUID;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

/**
 * Class for making calls out to &MKT; Metering Service.
 */
class RegisterUsage {

    private static final String PRODUCT_CODE = ".......";

    private final AWSMarketplaceMetering registerUsageClient;
    private final SignatureVerifier signatureVerifier;
    private final int publicKeyVersion;

    public RegisterUsage(final SignatureVerifier signatureVerifier) {
        this.signatureVerifier = signatureVerifier;
        this.publicKeyVersion = PublicKeyProvider.PUBLIC_KEY_VERSION;
        this.registerUsageClient = AWSMarketplaceMeteringClientBuilder.standard().build();
    }

    /**
     * Shows how to call RegisterUsage client and verify digital signature.
     */
    public void callRegisterUsage() {
        RegisterUsageRequest request = new RegisterUsageRequest()
                .withProductCode(PRODUCT_CODE)
                .withPublicKeyVersion(publicKeyVersion)
                .withNonce(UUID.randomUUID().toString());

        // Execute call to RegisterUsage (only need to call once at container startup)
        RegisterUsageResult result = this.registerUsageClient.registerUsage(request);

        // Verify Digital Signature w/o JWT
        boolean isSignatureValid = this.signatureVerifier.verify(request, result);
        if (!isSignatureValid) {
            throw new RuntimeException("Revoke entitlement, digital signature invalid.");
        }
    }
}

/**
 * Signature verification class with both a JWT-library based verification
 * and a non-library based implementation.
 */
class SignatureVerifier {
    private static BouncyCastleProvider BC = new BouncyCastleProvider();

    private static final String SIGNATURE_ALGORITHM = "SHA256withRSA/PSS";

    private final PublicKey publicKey;

    public SignatureVerifier(PublicKeyProvider publicKeyProvider) {
        this.publicKey = publicKeyProvider.getPublicKey().orElse(null);
        Security.addProvider(BC);
    }

    /**
     * Example signature verification using the NimbusJOSEJWT library to verify the JWT Token.
     *
     * @param request RegisterUsage Request.
     * @param result  RegisterUsage Result.
     * @return true if the token matches.
     */
    public boolean verifyUsingNimbusJOSEJWT(final RegisterUsageRequest request, final RegisterUsageResult result) {
        if (!getPublicKey().isPresent()) {
            return false;
        }

        try {
            JWSVerifier verifier = new RSASSAVerifier((RSAPublicKey) getPublicKey().get());
            JWSObject jwsObject = JWSObject.parse(result.getSignature());
            return jwsObject.verify(verifier) && validatePayload(jwsObject.getPayload().toString(), request, result);
        } catch (Exception e) {
            // log error
            return false;
        }
    }

    /**
     * Example signature verification without any JWT library support.
     *
     * @param request RegisterUsage Request.
     * @param result  RegisterUsage Result.
     * @return true if the token matches.
     */
    public boolean verify(final RegisterUsageRequest request, final RegisterUsageResult result) {
        if (!getPublicKey().isPresent()) {
            return false;
        }
        try {
            String[] jwtParts = result.getSignature().split("\\.");
            String header = jwtParts[0];
            String payload = jwtParts[1];
            String payloadSignature = jwtParts[2];

            Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM, BC);
            signature.initVerify(getPublicKey().get());
            signature.update(String.format("%s.%s", header, payload).getBytes(StandardCharsets.UTF_8));
            boolean verified = signature.verify(Base64.getUrlDecoder()
                    .decode(payloadSignature.getBytes(StandardCharsets.UTF_8)));

            String decodedPayload = new String(Base64.getUrlDecoder().decode(payload));
            return verified && validatePayload(decodedPayload, request, result);
        } catch (Exception e) {
            // log error
            return false;
        }
    }

    /**
     * Validate each value in the returned payload matches values originally
     * supplied in the request to RegisterUsage. TimeToLiveInMillis and
     * PublicKeyExpirationTimestamp will have the values in the payload compared
     * to values in the signature
     */
    private boolean validatePayload(final String payload, final RegisterUsageRequest request,
                                    final RegisterUsageResult result) {
        try {
            JsonNode payloadJson = Jackson.getObjectMapper().readTree(payload);
            boolean matches = payloadJson.get("productCode")
                    .asText()
                    .equals(request.getProductCode());
            matches = matches && payloadJson.get("nonce")
                    .asText()
                    .equals(request.getNonce());
            return matches = matches && payloadJson.get("publicKeyVersion")
                    .asText()
                    .equals(String.valueOf(request.getPublicKeyVersion()));

        } catch (Exception ex) {
            // log error
            return false;
        }
    }

    private Optional<PublicKey> getPublicKey() {
        return Optional.ofNullable(this.publicKey);
    }
}

/**
 * Public key provider taking advantage of the &AWS; PEM Utility.
 */
class PublicKeyProvider {
    // Replace with your public key. Ensure there are new-lines ("\n") in the
    // string after "-----BEGIN PUBLIC KEY-----\n" and before "\n-----END PUBLIC KEY-----".
    private static final String PUBLIC_KEY =
            "-----BEGIN PUBLIC KEY-----\n"
                    + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdlatRjRjogo3WojgGHFHYLugd\n"
                    + "UWAY9iR3fy4arWNA1KoS8kVw33cJibXr8bvwUAUparCwlvdbH6dvEOfou0/gCFQs\n"
                    + "HUfQrSDv+MuSUMAe8jzKE4qW+jK+xQU9a03GUnKHkkle+Q0pX/g6jXZ7r1/xAK5D\n"
                    + "o2kQ+X5xK9cipRgEKwIDAQAB\n"
                    + "-----END PUBLIC KEY-----";

    public static final int PUBLIC_KEY_VERSION = 1;

    public Optional<PublicKey> getPublicKey() {
        try {
            return Optional.of(PEM.readPublicKey(new ByteArrayInputStream(
                    PUBLIC_KEY.getBytes(StandardCharsets.UTF_8))));
        } catch (Exception e) {
            // log error
            return Optional.empty();
        }
    }
}
```

# Mengkonfigurasi pengukuran khusus untuk produk kontainer dengan AWS Marketplace Metering Service
<a name="container-metering-meterusage"></a>

**catatan**  
 Untuk penerapan Amazon EKS, perangkat lunak Anda harus menggunakan [peran IAM untuk akun layanan (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) untuk menandatangani panggilan API untuk operasi API. [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) Menggunakan [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html), peran node, atau kunci akses jangka panjang tidak didukung.  
Untuk penerapan Amazon ECS, perangkat lunak Anda harus menggunakan peran [IAM tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) untuk menandatangani panggilan API untuk operasi API. [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) Menggunakan peran node atau kunci akses jangka panjang tidak didukung.  
Untuk penerapan Amazon Bedrock AgentCore Runtime, perangkat lunak Anda harus menggunakan [peran eksekusi AgentCore Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-permissions.html#runtime-permissions-execution) untuk menandatangani panggilan API untuk operasi API. [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) Kunci akses jangka panjang tidak didukung.

AWS Marketplace produk kontainer dapat memiliki pengukuran khusus hingga 24 dimensi harga yang berbeda per produk. Setiap dimensi dapat memiliki harga kontrak jangka panjang yang terkait dengannya. Untuk mengaktifkan pengukuran khusus, integrasikan produk container Anda dengan AWS Marketplace Metering Service. Anda dapat menentukan unit harga Anda sendiri dan pengukuran kustom untuk penggunaan tersebut AWS untuk penagihan menggunakan operasi [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API. Bagian berikut menunjukkan cara mengonfigurasi pengukuran khusus untuk produk kontainer Anda.

Dimensi harga didefinisikan di dua lokasi, sekali saat membuat produk Anda di Portal Manajemen AWS Marketplace (portal penjual) dan sekali di perangkat lunak Anda untuk melakukan `MeterUsage` operasi. Metode dua faktor ini memastikan bahwa penawaran berikutnya bekerja sebagaimana dimaksud sebelum dibuat tersedia untuk umum.

Untuk mengatur pengukuran khusus, Anda harus memilih kategori penggunaan, tipe unit, dan dimensi harga: 
+ **Kategori penggunaan**— Kategori penggunaan membantu pembeli memahami produk Anda dan cara menggunakannya. 
+ **Tipe unit**— Tipe unit mendefinisikan satuan ukuran untuk penagihan. Misalnya, bandwidth diukur dalam GBps atau MBps, jumlah host, atau data yang diukur dalam MB, GB, atau TB.
+ **Dimensi harga** — Dimensi harga mewakili fitur atau layanan yang telah Anda tetapkan harga per unit (misalnya, pengguna, pemindaian, vCPUs, atau agen yang digunakan). Dimensi harga bersifat publik. Namun, Anda masih dapat menentukan penawaran pribadi dan Bring Your Own License (BYOL) untuk produk publik. Jangan mengirim harga dalam catatan pengukuran. Anda mengukur jumlah unit, dan kami menggunakannya bersama dengan harga yang Anda tentukan saat membuat produk Anda untuk menghitung tagihan pembeli. 

  Jika harga produk Anda tidak sesuai dengan kategori atau tipe unit yang telah ditentukan sebelumnya, Anda dapat memilih kategori **Unit** generik. Kemudian, gunakan deskripsi dimensi untuk menggambarkan apa unitnya.

Opsional, Anda dapat mendistribusikan penggunaan ke alokasi oleh properti yang Anda melacak. Alokasi direpresentasikan sebagai tag kepada pembeli. Tag ini memungkinkan pembeli untuk melihat biaya mereka dibagi menjadi penggunaan berdasarkan nilai tag. Sebagai contoh, jika Anda mengisi oleh pengguna, dan pengguna memiliki properti “Departemen”, Anda dapat membuat alokasi penggunaan dengan tag yang memiliki kunci “Departemen”, dan satu alokasi per nilai. Ini tidak mengubah harga, dimensi, atau total penggunaan yang Anda laporkan, tetapi memungkinkan pelanggan Anda untuk melihat biaya mereka berdasarkan kategori yang sesuai dengan produk Anda.

Kami menyarankan Anda mengirim catatan pengukuran setiap jam. Namun, Anda dapat menggabungkan penggunaan selama periode harian atau bulanan juga. Jika Anda mengalami pemadaman, Anda dapat menggabungkan penggunaan perangkat lunak pembeli dan mengirimkannya dalam pengukuran jam berikutnya. Anda tidak dapat mengirim lebih dari satu catatan per jam.

*Untuk informasi selengkapnya tentang mengintegrasikan AWS Marketplace Metering Service API untuk produk kontainer dengan harga pengukuran khusus, lihat lab [Integrasikan dengan pengukuran khusus](https://catalog.workshops.aws/mpseller/en-US/container/integrate-custom) bengkel penjual.AWS Marketplace *

**penting**  
Percobaan gratis dan hak prabayar dilacak pada tingkat per jam. Akibatnya, mengirim catatan ini secara terpisah dapat menyebabkan pembeli menjadi kelebihan biaya.

**Topics**
+ [Prasyarat pengukuran](#custom-metering-prereqs)
+ [`MeterUsage`Integrasi pengujian untuk ECS dan EKS](#testing-meterusage-integration)
+ [MeterUsage Integrasi pengujian untuk AgentCore](#testing-agentcore-metering)
+ [Penanganan kesalahan untuk `MeterUsage`](#custom-metering-entitlement-error-handling)
+ [(Opsional) Penandaan terukur vendor](#container-vendor-metered-tagging)
+ [Contoh kode](#container-meter-code-example)
+ [Mengintegrasikan produk kontainer Anda menggunakan pengukuran khusus dengan dan AWS Marketplace Metering Service AWS SDK untuk Java](java-integration-example-meterusage.md)

## Prasyarat pengukuran
<a name="custom-metering-prereqs"></a>

Sebelum menerbitkan produk, Anda harus melakukan hal berikut:

1. Buat produk kontainer baru di Portal Manajemen AWS Marketplace, dan catat kode produknya.

1. Gunakan peran AWS Identity and Access Management (IAM) untuk tugas, pod, atau titik akhir AgentCore Runtime yang menjalankan aplikasi Anda dengan izin IAM yang diperlukan untuk memanggil. `MeterUsage` Kebijakan terkelola `AWSMarketplaceMeteringRegisterUsage` meliputi izin-izin ini. Untuk informasi selengkapnya tentang kebijakan, lihat [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)di *Referensi Kebijakan AWS Terkelola*.

1. (Opsional) Kami menyarankan Anda mengaktifkan AWS CloudTrail logging dalam tugas atau definisi pod jika Anda ingin melihat logging.

1. Lakukan panggilan uji ke operasi `MeterUsage` API dengan catatan untuk semua dimensi harga yang Anda tetapkan.

## `MeterUsage`Integrasi pengujian untuk ECS dan EKS
<a name="testing-meterusage-integration"></a>

Gunakan `MeterUsage` operasi untuk menguji integrasi Anda sebelum mengirimkan gambar Anda AWS Marketplace untuk dipublikasikan.

Panggilan `MeterUsage` dari gambar kontainer dengan menjalankan produk Anda di Amazon Elastic Container Service (Amazon ECS) Service (Amazon ECS) atau Amazon Elastic Kubernetes Service (Amazon EKS Akun AWS ) dengan yang Anda gunakan untuk membuat daftar produk. AWS Marketplace Integrasi pengukuran Anda harus secara dinamis mengatur Wilayah AWS, bukan hard coding itu. Namun, saat menguji, luncurkan setidaknya satu tugas Amazon ECS atau pod Amazon EKS yang berisi kontainer berbayar Anda di Wilayah AS Timur (Virginia Utara) sehingga tim AWS Marketplace operasi dapat memverifikasi pekerjaan Anda dengan log di Wilayah tersebut.

**catatan**  
Jika produk Anda mendukung Amazon ECS dan Amazon EKS, Anda hanya perlu meluncurkan di Amazon EKS bagi kami untuk memvalidasi integrasi Anda.
Uji setiap dimensi sebelum meluncurkan produk Anda ke publik dan setelah menambahkan dimensi baru. Jika Anda tidak mengirim catatan pengukuran untuk setiap dimensi yang terkait dengan produk kontainer, itu akan mengakibatkan kesalahan dengan permintaan yang gagal.

Anda tidak dapat sepenuhnya menguji integrasi sampai produk Anda dipublikasikan dengan semua metadata dan informasi harga yang diperlukan. Jika diminta, tim operasi AWS Marketplace katalog dapat memverifikasi penerimaan catatan pengukuran Anda.

## MeterUsage Integrasi pengujian untuk AgentCore
<a name="testing-agentcore-metering"></a>

Gunakan `MeterUsage` operasi untuk menguji integrasi Anda sebelum mengirimkan gambar Anda AWS Marketplace untuk dipublikasikan.

Panggil `MeterUsage` dari gambar kontainer dengan menjalankan produk Anda di Amazon Bedrock AgentCore dengan AWS akun yang Anda gunakan untuk membuat daftar AWS Marketplace produk. Integrasi pengukuran Anda harus secara dinamis mengatur AWS Wilayah, daripada mengkodekannya dengan keras. Namun, saat menguji, luncurkan setidaknya satu AgentCore agen Amazon Bedrock yang berisi kontainer berbayar Anda di Wilayah AS Timur (Virginia N.) sehingga tim AWS Marketplace operasi dapat memverifikasi pekerjaan Anda dengan log di Wilayah tersebut. 

 Anda tidak perlu menggabungkan catatan penggunaan per jam. Panggil `MeterUsage` setiap pemanggilan agen dengan penggunaan untuk pemanggilan itu.

Anda harus menggunakan AWS SDK versi terbaru yang dirilis untuk bahasa Anda. Ini secara otomatis mengisi `ClientToken` parameter dengan nilai yang dihasilkan secara otomatis untuk membantu idempotensi. Rilis SDK sebelumnya yang tidak mengisi bidang ini tidak akan berfungsi untuk `MeterUsage` panggilan dari dalam Amazon Bedrock. AgentCore Karena masalah jaringan, Anda harus menggunakan kembali permintaan yang sama persis saat mencoba lagi. Melakukan hal itu memastikan bahwa permintaan diperlakukan secara idempoten.

Karena perbedaan perilaku pengukuran yang diharapkan antara Amazon Bedrock AgentCore dan produk kontainer lainnya, kami tidak menyarankan berbagi gambar kontainer yang sama untuk digunakan di Amazon Bedrock dan AgentCore di Amazon ECS atau EKS.

## Penanganan kesalahan untuk `MeterUsage`
<a name="custom-metering-entitlement-error-handling"></a>

Panggil `MeterUsage` pengaturan `DryRun` parameter ke true saat startup kontainer untuk memvalidasi bahwa integrasi pengukuran berfungsi. Jika citra kontainer Anda terintegrasi dengan`MeterUsage`operasi dan menerima pengecualian selain`ThrottlingException`pada startup kontainer, Anda harus mengakhiri kontainer untuk mencegah penggunaan yang tidak sah.

Pengecualian selain`ThrottlingException`dilemparkan hanya pada panggilan awal untuk`MeterUsage`. Panggilan berikutnya dari tugas Amazon ECS yang sama atau pod Amazon EKS atau titik akhir AgentCore Runtime tidak dibuang`CustomerNotSubscribedException`, meskipun pelanggan berhenti berlangganan saat tugas atau pod masih berjalan. Pelanggan tersebut masih dikenakan biaya untuk menjalankan kontainer setelah mereka berhenti berlangganan, dan penggunaannya dilacak.

Lihat [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)di *Referensi AWS Marketplace Metering Service API* untuk deskripsi rinci tentang kesalahan umum untuk`MeterUsage`. Setiap bahasa pemrograman AWS SDK memiliki seperangkat pedoman penanganan kesalahan yang dapat Anda rujuk untuk informasi tambahan. 

## (Opsional) Penandaan terukur vendor
<a name="container-vendor-metered-tagging"></a>

Penandaan yang diukur vendor membantu Vendor Perangkat Lunak Independen (ISVs) memberi pembeli wawasan yang lebih terperinci tentang penggunaan perangkat lunak mereka dan dapat membantu mereka melakukan alokasi biaya.

**catatan**  
Penandaan yang diukur vendor tidak didukung untuk permintaan pengukuran untuk produk Amazon Bedrock. AgentCore 

Anda memiliki beberapa cara untuk menandai penggunaan perangkat lunak pembeli. Salah satunya adalah pertama-tama bertanya kepada pembeli Anda apa yang ingin mereka lihat dalam alokasi biaya mereka. Kemudian Anda dapat membagi penggunaan di seluruh properti yang Anda lacak untuk akun pembeli. Contoh properti termasuk`AccountId`,, `Business Unit``Cost Centers`, dan metadata relevan lainnya untuk produk Anda. Properti ini diekspos ke pembeli sebagai tag. Dengan menggunakan tag, pembeli dapat melihat biayanya dibagi menjadi penggunaan berdasarkan nilai tag di Konsol AWS Penagihan ([https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)). Penandaan yang diukur vendor tidak mengubah harga, dimensi, atau total penggunaan yang Anda laporkan. Hal ini memungkinkan pelanggan Anda untuk melihat biaya mereka berdasarkan kategori yang sesuai dengan produk Anda.

Dalam kasus penggunaan umum, pembeli berlangganan produk Anda dengan satu Akun AWS. Pembeli juga memiliki banyak pengguna yang terkait dengan langganan produk yang sama. Anda dapat membuat alokasi penggunaan dengan tag yang memiliki kunci`AccountId`, dan kemudian mengalokasikan penggunaan untuk setiap pengguna. Dalam hal ini, pembeli dapat mengaktifkan `AccountId` tag di konsol Billing and Cost Management mereka dan menganalisis penggunaan pengguna individu.

### Pengalaman penjual
<a name="container-vendor-metered-tag-seller"></a>

Penjual dapat menggabungkan catatan pengukuran untuk sumber daya dengan kumpulan tag yang sama alih-alih menggabungkan penggunaan untuk semua sumber daya. Misalnya, penjual dapat membuat catatan pengukuran yang mencakup ember yang berbeda`UsageAllocations`. Setiap bucket mewakili `UsageQuantity` untuk satu set tag, seperti `AccountId` dan`BusinessUnit`. 

Dalam diagram berikut, **Resource 1** memiliki satu set `AccountId` dan `BusinessUnit` tag yang unik, dan muncul di **Rekaman Pengukuran** sebagai entri tunggal. 

**Resource 2** dan **Resource 3** keduanya memiliki `AccountId` tag yang sama`2222`,, dan `BusinessUnit` tag yang sama,`Operations`. Akibatnya, mereka digabungkan menjadi satu `UsageAllocations` entri dalam **Rekaman Pengukuran**.

![\[Diagram yang menunjukkan bagaimana tag metering vendor menggabungkan data penggunaan. Tiga sumber daya (Sumber Daya 1, 2, dan 3) dengan berbeda AccountIds dan BusinessUnits dikonsolidasikan ke dalam Rekaman Pengukuran tunggal dengan UsageAllocations dikelompokkan oleh AccountId dan BusinessUnit sebelum dikirim ke AWS Marketplace Metering Service.\]](http://docs.aws.amazon.com/id_id/marketplace/latest/userguide/images/seller-vendor-meter-tag.png)


Penjual juga dapat menggabungkan sumber daya tanpa tag menjadi satu `UsageAllocation` dengan jumlah penggunaan yang dialokasikan dan mengirimkannya sebagai salah satu entri di. `UsageAllocations`

Batasan meliputi:
+ Jumlah tag — 5
+ Ukuran `UsageAllocations` (kardinalitas) — 2.500

Validasi meliputi:
+ Karakter diperbolehkan untuk kunci tag dan nilai — a-zA-Z 0-9\$1 -= . \$1:\$1 /@
+ Tag maksimum di seluruh `UsageAllocation` daftar - 5
+ Dua tidak `UsageAllocations` dapat memiliki tag yang sama (yaitu, kombinasi yang sama dari kunci tag dan nilai). Jika itu masalahnya, mereka harus menggunakan hal yang sama`UsageAllocation`.
+ Jumlah `AllocatedUsageQuantity` dari `UsageAllocation` harus sama dengan`UsageQuantity`, yang merupakan penggunaan agregat.

### Pengalaman pembeli
<a name="container-vendor-metered-tag-buyer"></a>

Tabel berikut menunjukkan contoh pengalaman pembeli setelah pembeli mengaktifkan tag `AccountId` dan `BusinessUnit` vendor. 

Dalam contoh ini, pembeli dapat melihat penggunaan yang dialokasikan dalam **Laporan Penggunaan Biaya** mereka. Tag yang diukur vendor menggunakan awalan. `“aws:marketplace:isv”` Pembeli dapat mengaktifkannya di Billing and Cost Management, **di bawah Tag Alokasi Biaya AWS, tag alokasi** **biaya yang dihasilkan**.

Baris pertama dan terakhir dari **Laporan Penggunaan Biaya** relevan dengan apa yang dikirim Penjual ke Layanan Pengukuran (seperti yang ditunjukkan dalam [Pengalaman penjual](#container-vendor-metered-tag-seller) contoh).


**Laporan Penggunaan Biaya (Sederhana)**  

| ProductCode  | Pembeli | UsageDimension | UsageQuantity | `aws:marketplace:isv:AccountId ` | `aws:marketplace:isv:BusinessUnit` | 
| --- | --- | --- | --- | --- | --- | 
| xyz | 111122223333 | Jaringan: per (GB) diperiksa  | 70 | 2222 | Operasi | 
| xyz | 111122223333 | Jaringan: per (GB) diperiksa  | 30 | 3333 | Keuangan | 
| xyz | 111122223333 | Jaringan: per (GB) diperiksa  | 20 | 4444 | IA | 
| xyz | 111122223333 | Jaringan: per (GB) diperiksa  | 20 | 5555 | Pemasaran | 
| xyz | 111122223333 | Jaringan: per (GB) diperiksa  | 30 | 1111 | Pemasaran | 

Untuk contoh kode, lihat [`MeterUsage`contoh kode dengan penandaan alokasi penggunaan (Opsional)](#container-meterusage-code-example).

## Contoh kode
<a name="container-meter-code-example"></a>

Contoh kode berikut disediakan untuk membantu Anda mengintegrasikan produk kontainer Anda dengan yang AWS Marketplace APIs diperlukan untuk menerbitkan dan memelihara produk Anda.

### `MeterUsage`contoh kode dengan penandaan alokasi penggunaan (Opsional)
<a name="container-meterusage-code-example"></a>

Contoh kode berikut relevan untuk produk kontainer dengan model harga konsumsi. Contoh Python mengirimkan catatan pengukuran dengan tag alokasi penggunaan yang sesuai untuk membebankan biaya AWS Marketplace kepada pelanggan Anda. pay-as-you-go

```
# NOTE: Your application will need to aggregate usage for the 
#       customer for the hour and set the quantity as seen below. 
# AWS Marketplace can only accept records for up to an hour in the past. 
#
# productCode is supplied after the AWS Marketplace Ops team has 
# published the product to limited

# Import AWS Python SDK
import boto3
import time

usageRecord = [
    { 
        "AllocatedUsageQuantity": 2, 
        "Tags": 
            [ 
                { "Key": "BusinessUnit", "Value": "IT" },
                { "Key": "AccountId", "Value": "123456789" },
            ]

    },
    { 
        "AllocatedUsageQuantity": 1, 
        "Tags": 
            [ 
                { "Key": "BusinessUnit", "Value": "Finance" },
                { "Key": "AccountId", "Value": "987654321" },
            ]

    }
]

marketplaceClient = boto3.client("meteringmarketplace")

response = marketplaceClient.meter_usage(
    ProductCode="testProduct",
    Timestamp=int(time.time()),
    UsageDimension="Dimension1",
    UsageQuantity=3,
    DryRun=False,
    UsageAllocations=usageRecord 
)
```

Untuk informasi selengkapnya`MeterUsage`, lihat [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)di *Referensi AWS Marketplace Metering Service API*.

### Contoh tanggapan
<a name="container-meterusage-code-response"></a>

```
{ "MeteringRecordId": "string" }
```

# Mengintegrasikan produk kontainer Anda menggunakan pengukuran khusus dengan dan AWS Marketplace Metering Service AWS SDK untuk Java
<a name="java-integration-example-meterusage"></a>

AWS Marketplace produk kontainer dapat memiliki pengukuran khusus hingga 24 dimensi harga yang berbeda per produk. Untuk mengaktifkan pengukuran khusus, Anda mengintegrasikan produk container Anda dengan AWS Marketplace Metering Service. Anda dapat menentukan unit harga Anda sendiri dan pengukuran kustom untuk penggunaan tersebut AWS untuk penagihan menggunakan operasi [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API. Contoh berikut menguraikan implementasi yang menggunakan AWS SDK untuk Java untuk mengintegrasikan dengan operasi [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)`MeterUsage`. 

Untuk detail lengkap, lihat[`MeterUsage`Contoh Java](#meterusage-java-example). Banyak langkah-langkah berikut berlaku terlepas dari bahasa. 

**Contoh: Integrasi Layanan AWS Marketplace Metering**

1. Masuk ke [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/tour).

1. Dari**Aset**, pilih**Kontainer**untuk mulai membuat produk kontainer baru. Membuat produk menghasilkan kode produk untuk produk untuk mengintegrasikan dengan citra kontainer Anda. Untuk informasi tentang izin pengaturan AWS Identity and Access Management (IAM), lihat. [AWS Marketplace izin API pengukuran dan hak](iam-user-policy-for-aws-marketplace-actions.md)

1.  Unduh [AWS Java SDK](https://aws.amazon.com/sdk-for-java/) publik. 
**penting**  
 Untuk memanggil operasi metering API dari Amazon Elastic Kubernetes Service (Amazon EKS)[, Anda harus AWS menggunakan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) SDK yang didukung dan berjalan di klaster Amazon EKS yang menjalankan Kubernetes 1.13 atau yang lebih baru. 

1. Panggil `MeterUsage` operasi dari tugas atau pod setiap jam sekali untuk setiap penggunaan dimensi. Operasi API menerima satu catatan pengukuran untuk kombinasi unik`Dimension`,`Resource`, dan`Hour`. Sumber daya adalah salah satu Amazon Elastic kontainer Service (Amazon ECS) tugas atau pod Amazon EKS.

   ```
   {
       "ProductCode" : "string", // (required)
       "UsageDimension" : "string", // (required)
       "UsageQuantity":  int, // (optional) Default is 0. Acceptable value from [0, 2147483647 (INT_MAX)]
       "Timestamp": Date, // (required) Timestamp in UTC. Value can be one hour in the past.
       "UsageAllocations": List<UsageAllocation> // (optional) UsageAllocations across 1 or more tags.
   }
   ```
**catatan**  
Dimungkinkan untuk melihat masalah sementara dalam menghubungkan ke. AWS Marketplace Metering Service AWS Marketplace sangat merekomendasikan menerapkan percobaan ulang hingga 30 menit, dengan mundur eksponensial, untuk menghindari pemadaman jangka pendek atau masalah jaringan.

1. Buat kembali versi baru gambar kontainer Anda yang menyertakan `MeterUsage` panggilan, beri tag penampung, dan dorong ke registri Docker apa pun yang kompatibel dengan Amazon ECS atau Amazon EKS, seperti Amazon Elastic Container Registry (Amazon ECR). Jika Anda menggunakan Amazon ECR, memastikan bahwa akun meluncurkan tugas Amazon ECS atau Amazon EKS pod memiliki izin pada repositori Amazon ECR. Jika tidak, operasi gagal.

1. Buat [IAM](https://aws.amazon.com/iam/) role yang memberikan izin untuk kontainer Anda untuk dipanggil`MeterUsage`, seperti yang didefinisikan dalam contoh kode berikut. Anda harus menyediakan peran ini AWS Identity and Access Management (IAM) dalam parameter [Peran Tugas tugas tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) Amazon ECS atau definisi pod Amazon EKS.

------
#### [ JSON ]

****  

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

------

1. Buat tugas Amazon ECS atau definisi pod Amazon EKS yang mereferensikan wadah yang telah terintegrasi AWS Marketplace dan mereferensikan peran IAM yang Anda buat di langkah 6. Jika Anda ingin melihat logging, aktifkan AWS CloudTrail logging dalam definisi tugas. 

1. Buat Amazon ECS atau Amazon EKS cluster untuk menjalankan tugas Anda atau pod. Untuk informasi selengkapnya tentang membuat klaster Amazon ECS, lihat [Membuat klaster](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html) di *Panduan Pengembang Layanan Kontainer Elastis Amazon*. Untuk informasi selengkapnya tentang membuat cluster Amazon EKS (menggunakan Kubernetes versi 1.1.3.x atau yang lebih baru), lihat[Membuat klaster EKS Amazon](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html).

1. Konfigurasikan cluster Amazon ECS atau Amazon EKS dan luncurkan definisi tugas Amazon ECS atau pod Amazon EKS yang Anda buat di langkah 8, di Wilayah us-east-1. AWS Hanya selama proses pengujian ini, sebelum produk ditayangkan, bahwa Anda harus menggunakan Wilayah ini.

1. Saat Anda mendapatkan respons yang valid dari`MeterUsage`untuk masing-masing dimensi yang diterbitkan untuk produk, Anda dapat mulai membuat produk kontainer Anda. Untuk pertanyaan, hubungi[AWS Marketplace Operasi Penjual](https://aws.amazon.com/marketplace/management/contact-us/)Tim. 

## `MeterUsage`Contoh Java
<a name="meterusage-java-example"></a>

Contoh kode berikut menggunakan AWS Marketplace Metering Service AWS SDK untuk Java dan AWS untuk memanggil `MeterUsage` operasi.

Contoh kode berikut panggilan`MeterUsage`operasi tanpa`UsageAllocations`.

```
import com.amazonaws.services.marketplacemetering.AWSMarketplaceMetering;
import com.amazonaws.services.marketplacemetering.AWSMarketplaceMeteringClientBuilder;
import com.amazonaws.services.marketplacemetering.model.MeterUsageRequest;
import com.amazonaws.services.marketplacemetering.model.MeterUsageResult;

import java.util.Date;

public class MeterUsage {
    private static final String PRODUCT_CODE = ".......";
    private final AWSMarketplaceMetering awsMarketplaceMetering;

    public MeterUsage() {
        awsMarketplaceMetering = AWSMarketplaceMeteringClientBuilder.standard().build();
    }

    /**
     * Submits metering record for a FCP Dimension. The API accepts 1 metering record per dimension
     * for a given buyer's resource for a given timestamp hour. Ex. If a buyer is running 10 tasks,
     * the API will accepts 1 call to MeterUsage in an hour for a given dimension for each running task.
     *
     * @param dimension - FCP dimension name provided during the publishing of the product.
     * @param quantity - FCP dimension consumption value for the hour.
     * @param timestamp - Timestamp, in UTC, for which the usage is being reported.
     *                  Timestamp cant be more than 1 hour in the past.
     *                  Make sure the timestamp value is not before the start of the software usage.
     */
    public void callMeterUsage(String dimension, int quantity, Date timestamp) {
        MeterUsageRequest meterUsageRequest = new MeterUsageRequest()
                .withProductCode(PRODUCT_CODE)
                .withUsageDimension(dimension)
                .withUsageQuantity(quantity)
                .withTimestamp(timestamp);
        MeterUsageResult meterUsageResult = awsMarketplaceMetering.meterUsage(meterUsageRequest);
    }
}
```

Contoh kode berikut panggilan`MeterUsage`Operasi dengan`UsageAllocations`.

```
private static String callMeterUsageWithAllocationsByTag(AWSMarketplaceMetering marketplaceMetering) {
        // Tag Keys for the product
        String tagKey1 = "Key1";
        String tagKey2 = "Key2";
        String tagKey3 = "Key3";

        // 1st Usage Allocation bucket which has two Tags [{Key1, Key1Value1},{Key2, Key2Value1}]
        List<Tag> tagsForUsageAllocation1 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value1"),
                new Tag().withKey(tagKey2).withValue("Key2Value1"));
        UsageAllocation usageAllocation1 = new UsageAllocation()
                .withTags(tagsForUsageAllocation1)
                .withAllocatedUsageQuantity(20);

        // 2nd Usage Allocation bucket which has two Tags [{Key1, Key1Value2},{Key2, Key2Value1}]
        List<Tag> tagsForUsageAllocation2 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value2"),
                new Tag().withKey(tagKey2).withValue("Key2Value1"));
        UsageAllocation usageAllocation2 = new UsageAllocation()
                .withTags(tagsForUsageAllocation2)
                .withAllocatedUsageQuantity(20);

        // 3rd Usage Allocation bucket which has two Tags [{Key1, Key1Value2},{Key2, Key2Value2},{Key3, Key3Value1}]
        List<Tag> tagsForUsageAllocation3 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value2"),
                new Tag().withKey(tagKey2).withValue("Key2Value2"),
                new Tag().withKey(tagKey3).withValue("Key3Value1"));
        UsageAllocation usageAllocation3 = new UsageAllocation()
                .withTags(tagsForUsageAllocation3)
                .withAllocatedUsageQuantity(15);

        // 4th Usage Allocation bucket with no tags
        UsageAllocation usageAllocation4 = new UsageAllocation()
                .withAllocatedUsageQuantity(15);

        List<UsageAllocation> usageAllocationList = Arrays.asList(usageAllocation1,
                usageAllocation2,
                usageAllocation3,
                usageAllocation4);

        MeterUsageRequest meterUsageRequest = new MeterUsageRequest()
                .withProductCode("TestProductCode")
                .withUsageDimension("Dimension1")
                .withTimestamp(new Date())
                //UsageQuantity value must match with sum of all AllocatedUsageQuantity
                .withUsageQuantity(70)
                .withUsageAllocations(usageAllocationList);

        MeterUsageResult meterUsageResult;
        try {
            meterUsageResult = marketplaceMetering.meterUsage(meterUsageRequest);
        } catch (Exception e) {
            // Log Error
            throw e;
        }

        return meterUsageResult.getMeteringRecordId();
    }
```

# Harga kontrak untuk produk kontainer dengan AWS License Manager
<a name="container-license-manager-integration"></a>

Untuk produk berbasis kontainer dengan harga kontrak, Anda dapat menggunakan AWS License Manager untuk mengaitkan lisensi dengan produk Anda. AWS License Manager adalah alat manajemen lisensi yang memungkinkan aplikasi Anda untuk melacak dan memperbarui lisensi (juga dikenal sebagai hak) yang telah dibeli oleh pelanggan. Bagian ini memberikan informasi tentang cara mengintegrasikan produk Anda AWS License Manager. Setelah integrasi selesai, Anda dapat mempublikasikan daftar produk Anda AWS Marketplace.

Jika Anda mengintegrasikan License Manager dengan produk AWS Marketplace for Containers Anywhere untuk Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon Elastic Compute Cloud (Amazon EC2), atau infrastruktur lokal, ikuti petunjuknya. [Mengintegrasikan AWS Marketplace untuk Kontainer Di Mana Saja dengan License Manager](container-anywhere-license-manager-integration.md)

Untuk informasi selengkapnya AWS License Manager, lihat [Panduan AWS License Manager Pengguna](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) dan [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)bagian *Referensi AWS CLI Perintah*.

Untuk informasi selengkapnya tentang integrasi AWS License Manager dengan produk kontainer dengan harga kontrak, lihat lab [Integrasikan dengan pembayaran di muka](https://catalog.workshops.aws/mpseller/en-US/container/integrate-contract) bengkel *AWS Marketplace penjual*.

**Topics**
+ [Harga kontrak untuk produk kontainer](#container-contracts)
+ [Model lisensi](#container-LM-license-models)
+ [AWS License Manager prasyarat integrasi](#container-LM-prereqs)
+ [Mengintegrasikan produk kontainer dengan License Manager](#container-integrate-with-LM)
+ [Operasi API License Manager](#container-LM-API-calls)
+ [Perpanjangan dan peningkatan lisensi](#container-LM-lic-renew-upgrade)
+ [Mengintegrasikan AWS Marketplace untuk Kontainer Di Mana Saja dengan License Manager](container-anywhere-license-manager-integration.md)

## Harga kontrak untuk produk kontainer
<a name="container-contracts"></a>

Untuk produk berbasis kontainer dengan harga kontrak, AWS Marketplace menagih pelanggan Anda di muka atau dengan jadwal pembayaran yang Anda tentukan, berdasarkan kontrak antara Anda dan pelanggan Anda. Setelah itu, mereka berhak menggunakan sumber daya tersebut. 

Untuk menetapkan harga Anda, pilih satu atau lebih durasi kontrak yang Anda tawarkan kepada pelanggan. Anda dapat memasukkan harga yang berbeda untuk setiap durasi kontrak. Pilihan Anda adalah durasi 1 bulan, 12 bulan, 24 bulan, dan 36 bulan. Untuk penawaran pribadi, Anda dapat menentukan durasi khusus dalam beberapa bulan (hingga 60 bulan). 

Pilih kategori yang paling menggambarkan harga produk Anda. Kategori harga muncul untuk pelanggan di situs AWS Marketplace web. Anda dapat memilih dari **Bandwidth** (GB/s, MB/s), **Data** (GB, MB, TB), **Host**, **Requests**, **Tiers**, atau **Users**. Jika tidak ada kategori standar yang sesuai dengan kebutuhan Anda, Anda dapat memilih kategori **Unit** yang lebih umum. 

Penawaran ini memungkinkan hingga 24 dimensi untuk ditambahkan ke dalamnya.


**Contoh: Aplikasi penyimpanan data**  

|   | Harga 1 bulan | Harga 12 bulan  | Harga 24 bulan  | Harga P36 bulan  | 
| --- | --- | --- | --- | --- | 
|  Data tidak terenkripsi (GB)  |  \$11,50/GB  |  \$116,00/GB  |  \$130.00/GB  |  \$160.00/GB  | 
|  Data terenkripsi (GB)  |  \$11,55/GB  |  \$116,60/GB  |  \$131.20/GB  |  \$161.20/GB  | 


**Contoh: Produk pemantauan log**  

|   | Harga 1 bulan | Harga 12 bulan  | Harga 24 bulan | Harga 36 bulan | 
| --- | --- | --- | --- | --- | 
|  Dasar (10 host dipantau, 5 kontainer dipantau)  |  \$1100  |  \$11000  | \$12000  | \$14000 | 
|  Standar (20 host dipantau, 10 kontainer dipantau)  |  \$1200  |  \$12000  | \$14000  | \$18000 | 
|  Pro (40 host dipantau, 20 kontainer dipantau)  |  \$1400  |  \$14000  | \$18000  | \$116.000 | 
|  Host tambahan dipantau per jam  | \$110  | \$1100  |  \$1200 | \$1400 | 
|  Kontainer tambahan dipantau per jam  | \$110  | \$1100  |  \$1200 | \$1400 | 

**catatan**  
Harga bisa untuk jangka waktu berikut: 1 bulan, 12 bulan, 24 bulan, atau 36 bulan. Anda dapat memilih untuk menawarkan satu atau lebih opsi ini untuk produk Anda. Durasi harus sama di setiap dimensi.   

**Example**  
Misalnya, dalam kasus di mana Anda memiliki `ReadOnlyUsers` dan `AdminUsers` dimensi, jika Anda menawarkan harga tahunan untuk ReadOnlyUsers, Anda harus menawarkan harga tahunan juga. `AdminUsers`


### Perpanjangan otomatis
<a name="ami-contracts-automatic-renewals"></a>

 Ketika pelanggan membeli produk Anda melalui AWS Marketplace menggunakan kontrak kontainer, mereka dapat setuju untuk memperbarui persyaratan kontrak secara otomatis. Pelanggan terus membayar hak setiap bulan atau selama 1, 2, atau 3 tahun. 

Pelanggan dapat mengubah pengaturan perpanjangan mereka kapan saja. Untuk informasi selengkapnya, lihat [Memodifikasi kontrak yang ada](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-container-contracts.html#modify-existing-contract) di *Panduan AWS Marketplace Pembeli*.

## Model lisensi
<a name="container-LM-license-models"></a>

AWS Marketplace integrasi dengan AWS License Manager mendukung dua model lisensi:
+ [Model lisensi yang dapat dikonfigurasi](#container-LM-config-lic-model)
+ [Model lisensi berjenjang](#container-LM-tiered-lic-model)

### Model lisensi yang dapat dikonfigurasi
<a name="container-LM-config-lic-model"></a>

Model lisensi yang dapat dikonfigurasi (juga dikenal sebagai model lisensi yang dapat diukur) memberikan hak kepada pembeli untuk sejumlah sumber daya tertentu setelah pembeli memperoleh lisensi. 

Anda menetapkan dimensi harga dan harga per unit. Kemudian, pembeli dapat memilih jumlah sumber daya yang ingin mereka beli.

**Example dimensi harga dan harga per unit**  
Anda dapat menetapkan dimensi harga (seperti cadangan data) dan harga per unit (seperti \$130/unit).  
Pembeli dapat memilih untuk membeli 5, 10, atau 20 unit.   
Produk Anda melacak dan penggunaan meter untuk mengukur jumlah sumber daya yang dikonsumsi.

Dengan model konfigurasi, hak dihitung dalam salah satu dari dua cara:
+ [Lisensi drawdown](#container-floating-lic)
+ [Lisensi mengambang](#container-floating-lic) 

#### Lisensi drawdown
<a name="container-drawndown-lic"></a>

 Lisensi diambil dari kumpulan jumlah lisensi yang diizinkan saat digunakan. Hak tersebut diperiksa secara permanen dan tidak dapat dikembalikan ke kumpulan lisensi.

**Example Memproses data dalam jumlah terbatas**  
Seorang pengguna berhak untuk memproses 500 GB data. Ketika mereka terus memproses data, kuantitas diambil dari kumpulan 500 GB hingga semua lisensi 500 GB dikonsumsi.

Untuk lisensi drawdown, Anda dapat menggunakan operasi `CheckoutLicense` API untuk memeriksa unit lisensi (hak) yang digunakan. 

**Example cadangan ke Amazon S3 untuk sejumlah unit/tahun**  
Anda memiliki produk penyimpanan yang memungkinkan pencadangan ke Amazon Simple Storage Service hingga 1.024 unit untuk data selama satu tahun. Aplikasi Anda dapat diluncurkan dengan menggunakan beberapa instans Amazon EC2. Aplikasi Anda memiliki mekanisme untuk melacak dan mengumpulkan data. Perangkat lunak Anda memanggil operasi `CheckoutLicense` API dengan ID Produk pada setiap cadangan atau pada interval tetap untuk memperbarui jumlah yang dikonsumsi.   
Dalam contoh ini, perangkat lunak Anda memanggil operasi `CheckoutLicense` API untuk memeriksa 10 unit data. Ketika total kapasitas mencapai batas cadangan yang telah dibeli pelanggan, panggilan API gagal.

**Permintaan**

```
linux-machine ~]$ aws license-manager checkout-license\
--product-sku "2205b290-19e6-4c76-9eea-377d6bf7la47" \
--checkout-type "PERPETUAL" \
--key-fingerprint "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements "Name=DataConsumption, Value=l0, Unit=Count" \
--client-token "AKIAIOSFODNN7EXAMPLE"
```

**Respons**

```
{"CheckoutType": "PERPETUAL",
"EntitlementsAllowed": [{
"Name": "IntermediateTier",
"Units": "None"
}],
"Expiration": "2021-04-22Tl9:02:36",
"IssuedAt": "2021-04-22Tl8:02:36",
"LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
"LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

#### Lisensi mengambang
<a name="container-floating-lic"></a>

 Lisensi dikembalikan ke kumpulan jumlah lisensi yang diizinkan setelah digunakan.

Untuk lisensi mengambang, aplikasi memeriksa hak dari kumpulan hak menggunakan operasi `CheckoutLicense` API saat sumber daya digunakan. Respons operasi `CheckoutLicense` API mencakup token konsumsi lisensi yang merupakan pengenal unik untuk checkout. Token konsumsi lisensi dapat digunakan untuk melakukan tindakan tambahan pada hak yang diperiksa, seperti memeriksanya kembali ke lisensi atau memperpanjang checkout.

Untuk memeriksa kembali hak ke kumpulan, gunakan operasi `CheckInLicense` API saat sumber daya tidak lagi digunakan.

```
aws license-manager check-in-license --license-consumption-token "f1603b3c1f574b7284db84..."
```

Jika terjadi kegagalan untuk memeriksa hak (jika aplikasi macet), hak akan memeriksa kembali ke kumpulan secara otomatis setelah 60 menit. Jika sumber daya digunakan lebih dari 60 menit, itu adalah praktik terbaik untuk menjaga hak diperiksa dari kumpulan dengan menggunakan operasi `ExtendLicenseConsumption` API selama sumber daya digunakan.

```
aws license-manager extend-license-consumption --license-consumption-token "f1603b3c1f574b7284..."
```

**Example jumlah pengguna dari batas atas tetap**  
Seorang pengguna berhak atas 500 pengguna simultan pada aplikasi. Saat pengguna masuk dan keluar, pengguna ditarik dan dikembalikan ke kumpulan 500 pengguna. Namun, aplikasi tidak dapat menarik lebih dari 500 pengguna dari pool karena 500 pengguna simultan adalah batas atas tetap.

Untuk hak mengambang, Anda dapat menggunakan operasi `CheckInLicense` API untuk mengembalikan unit lisensi ke kumpulan hak. 

**Example jumlah pengguna bersamaan selama satu tahun**  
Produk Anda diberi harga berdasarkan jumlah pengguna bersamaan. Pelanggan membeli lisensi untuk 10 pengguna selama satu tahun. Pelanggan meluncurkan perangkat lunak dengan memberikan izin AWS Identity and Access Management (IAM). Ketika pengguna log in, aplikasi Anda memanggil operasi `CheckoutLicense` API untuk mengurangi kuantitas sebesar 1. Saat pengguna log out, aplikasi mengembalikan lisensi tersebut ke pool dengan memanggil operasi `CheckInLicense` API. Jika Anda tidak menelepon`CheckInLicense`, unit lisensi akan secara otomatis diperiksa setelah 1 jam.

**catatan**  
Dalam Permintaan berikut, `key-fingerprint` bukan nilai placeholder tetapi nilai sebenarnya dari sidik jari yang dengannya semua lisensi akan dipublikasikan.

**Permintaan**

```
aws license-manager checkout-license\
--product-sku "2205b290-19e6-4c76-9eea-377d6bf7la47" \
--checkout-type "PROVISIONAL" \
--key-fingerprint "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements "Name=ReadOnlyUSers, Value=l0, Unit=Count" \
--client-token "AKIAIOSFODNN7EXAMPLE"
```

**Respons**

```
{
  "CheckoutType": "PROVISIONAL",
  "EntitlementsAllowed": [
    {
      "Name": "ReadOnlyUsers", 
      "Count": 10,
      "Units": "Count",
      "Value": "Enabled"
    }
},
  "Expiration": "2021-04-22Tl9:02: 36",
  "IssuedAt": "2021-04-22Tl8:02:36",
  "LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
  "LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

### Model lisensi berjenjang
<a name="container-LM-tiered-lic-model"></a>

Model lisensi berjenjang memberikan hak kepada pembeli ke tingkat tertentu, atau tingkat, fitur aplikasi setelah pembeli memperoleh lisensi. 

Anda membuat tingkatan untuk produk Anda, seperti Basic, Intermediate, dan Premium. Pembeli kemudian memilih salah satu tingkatan yang telah ditentukan.

Aplikasi tidak perlu melacak atau mengukur penggunaan aplikasi.

Dengan model lisensi berjenjang, hak tidak dihitung melainkan menandakan tingkat layanan yang diperoleh oleh pelanggan. 

Jika Anda ingin menawarkan fitur yang dibundel bersama-sama, tingkatan lebih disukai. 

**Example Tingkat Dasar, Menengah, dan Premium**  
Pelanggan dapat menandatangani kontrak untuk salah satu dari tiga kemungkinan tingkatan perangkat lunak: Dasar, Menengah, atau Premium. Masing-masing tingkatan ini memiliki harga sendiri. Perangkat lunak Anda dapat mengidentifikasi tingkat yang telah didaftarkan pelanggan dengan menjalankan operasi `CheckoutLicense` API dan menentukan semua tingkatan yang mungkin dalam permintaan.   
Tanggapan permintaan berisi hak yang sesuai dengan tingkat yang telah diperoleh pelanggan. Berdasarkan informasi ini, perangkat lunak dapat memberikan pengalaman pelanggan yang sesuai.

#### Permintaan
<a name="container-LM-tiered-request"></a>

```
linux-machine  ~]$ aws  license-manager   checkout-license\
--product-sku  "2205b290-19e6-4c76-9eea-377d6bf7la47"  \
--checkout-type  "PROVISIONAL"  \
--key-fingerprint  "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements  "Name=BasicTier,  Unit=None"   "Name=IntermediateTier,  Unit=None"	\ "Name=PremiumTier, Unit=None"
```

#### Respons
<a name="container-LM-tiered-response"></a>

```
{
  "CheckoutType": "PROVISIONAL",
  "EntitlementsAllowed": [
    {
      "Name": "IntermediateTier", 
      "Units": "None"
    }
},
  "Expiration": "2021-04-22Tl9:02:36",
  "IssuedAt": "2021-04-22Tl8:02:36",
  "LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
  "LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

## AWS License Manager prasyarat integrasi
<a name="container-LM-prereqs"></a>

Sebelum menerbitkan produk, Anda harus melakukan hal berikut:

1. Buat produk kontainer baru di Portal Manajemen AWS Marketplace, dan catat kode produknya.

   Untuk informasi selengkapnya, lihat [Ikhtisar: Buat produk kontainer](container-product-getting-started.md#create-container-product).

1. Gunakan peran IAM untuk tugas atau pod yang menjalankan aplikasi Anda dengan izin IAM yang diperlukan untuk memanggil operasi`CheckoutLicense`,`ExtendLicenseConsumption`, dan `CheckInLicense` API.

   Izin IAM yang diperlukan dirinci dalam kebijakan IAM berikut.

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Sid":"VisualEditorO",
            "Effect":"Allow",
            "Action":[
               "license-manager:CheckoutLicense",
               "license-manager:GetLicense",
               "license-manager:CheckInLicense",
               "license-manager:ExtendLicenseConsumption",
               "license-manager:ListReceivedLicenses"
            ],
            "Resource":"*"
         }
      ]
   }
   ```

------

1. Lakukan panggilan uji ke operasi `RegisterUsage` API dengan catatan untuk semua dimensi harga yang Anda tentukan.

## Mengintegrasikan produk kontainer dengan License Manager
<a name="container-integrate-with-LM"></a>

**Untuk mengintegrasikan produk berbasis kontainer Anda dengan License Manager**

1. Setel izin IAM untuk memanggil License Manager. Untuk informasi selengkapnya, lihat [AWS License Manager prasyarat integrasi](#container-LM-prereqs).

1. Unduh AWS SDK.
**catatan**  
Jangan mengkonfigurasi AWS kredensional dalam perangkat lunak Anda. AWS kredensil untuk pembeli diperoleh secara otomatis saat runtime saat container Anda berjalan dalam instans Amazon EC2, tugas Amazon ECS, atau pod Amazon EKS.

1. Tambahkan cek lisensi ke produk Anda.

   Produk Anda dapat memanggil operasi `CheckoutLicense` API di mana pun pemeriksaan lisensi harus dilakukan. Untuk memeriksa lisensi, produk Anda harus tahu:

   1. Penerbit lisensi tepercaya ()AWS Marketplace

   1. SKU Produk aplikasi (ID Produk)

   1. Hak untuk memeriksa aplikasi ini

   Panggilan API bervariasi berdasarkan jenis lisensi harga yang Anda siapkan.

1. Publikasikan daftar produk Anda di AWS Marketplace.

## Operasi API License Manager
<a name="container-LM-API-calls"></a>

Untuk mengelola lisensi yang disimpan di akun License Manager pelanggan, perangkat lunak Anda dapat menggunakan operasi API berikut:
+ `GetLicense`— API yang dapat ditanyakan oleh perangkat lunak. Ini mengambil status lisensi yang dibeli (yaitu kedaluwarsa atau segera kedaluwarsa) dan mengirimkan pemberitahuan status kepada pelanggan.
+ `CheckoutLicense`— Menemukan lisensi yang telah dibeli pengguna. Anda juga dapat menggunakan operasi `CheckoutLicense` API untuk memperbarui kuantitas lisensi ketika pengguna telah menggunakan sejumlah lisensi. Dengan`CheckoutLicense`, Anda dapat terus memeriksa jumlah lisensi yang digunakan oleh pelanggan. Ketika pelanggan kehabisan semua lisensi, panggilan ini mengembalikan kesalahan. Untuk informasi tentang irama yang disarankan untuk dijalankan`CheckoutLicense`, lihat[Perpanjangan dan peningkatan lisensi](#container-LM-lic-renew-upgrade).
+ `ExtendLicenseConsumption`— Dalam hal dimensi mengambang, ketika perangkat lunak memeriksa lisensi, lisensi akan kembali ke kolam secara otomatis setelah 60 menit. Jika Anda ingin memperpanjang waktu lisensi tetap diperiksa, gunakan operasi `ExtendLicenseConsumption` API untuk memperpanjang lisensi selama 60 menit lagi.
+ `CheckInLicense`— Dalam kasus dimensi mengambang, ketika Anda ingin mengembalikan lisensi ke kumpulan hak, gunakan operasi `CheckInLicense` API.
+ `ListReceivedLicenses`API - Daftar lisensi yang dibeli oleh pembeli.

## Perpanjangan dan peningkatan lisensi
<a name="container-LM-lic-renew-upgrade"></a>

Pelanggan dapat memperbarui atau meningkatkan lisensi mereka di. Portal Manajemen AWS Marketplace Setelah mereka melakukan pembelian tambahan AWS Marketplace , buat versi baru dari lisensi yang mencerminkan hak baru. Perangkat lunak Anda membaca hak baru dengan menggunakan operasi API yang sama. Anda tidak perlu melakukan sesuatu yang berbeda dalam hal integrasi License Manager untuk menangani pembaruan dan peningkatan.

Karena perpanjangan lisensi, peningkatan, pembatalan, dan sebagainya, kami menyarankan agar produk Anda memanggil operasi `CheckoutLicense` API dengan irama reguler saat produk sedang digunakan. Dengan menggunakan operasi `CheckoutLicense` API pada irama reguler, produk dapat mendeteksi perubahan hak seperti upgrade dan kedaluwarsa.

Kami menyarankan Anda melakukan panggilan `CheckoutLicense` API setiap 15 menit. 

# Mengintegrasikan AWS Marketplace untuk Kontainer Di Mana Saja dengan License Manager
<a name="container-anywhere-license-manager-integration"></a>

Sebagai AWS Marketplace penjual, Anda dapat berintegrasi AWS License Manager dengan produk AWS Marketplace for Containers Anywhere untuk Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon EC2, atau infrastruktur lokal. Bagian berikut memberikan instruksi untuk integrasi ini.

Untuk informasi umum tentang integrasi License Manager dengan AWS Marketplace, termasuk model lisensi yang tersedia, lihat[Harga kontrak untuk produk kontainer dengan AWS License Manager](container-license-manager-integration.md). Untuk informasi selengkapnya AWS License Manager, lihat [Panduan AWS License Manager Pengguna](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) dan [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)bagian *Referensi AWS CLI Perintah*.

**Topics**
+ [Mengintegrasikan produk AWS Marketplace for Containers Anywhere dengan License Manager](#containers-anywhere-integrate-with-LM)
+ [Menguji integrasi License Manager secara lokal](#container-testing-LM-integration-locally)
+ [Menguji integrasi License Manager di Amazon EKS](#container-testing-LM-integration-EKS)
+ [Hak lisensi mengambang dengan License Manager](#container-LM-floating-license)
+ [Praktik terbaik untuk mengintegrasikan dengan License Manager untuk penerapan lokal](#container-LM-best-practices-on-prem)
+ [`LicenseManagerCredentialsProvider`- Implementasi Java](#container-license-manager-cred-provider-java)
+ [`LicenseManagerCredentialsProvider`- `Golang` implementasi](#container-license-manager-cred-provider-golang)

## Mengintegrasikan produk AWS Marketplace for Containers Anywhere dengan License Manager
<a name="containers-anywhere-integrate-with-LM"></a>

Gunakan petunjuk berikut untuk mengintegrasikan produk AWS Marketplace for Containers Anywhere Anda AWS License Manager.

**Untuk mengintegrasikan produk Containers Anywhere Anda AWS Marketplace dengan License Manager**

1. Buka browser web dan masuk ke file [Portal Manajemen AWS Marketplace](https://aws.amazon.com/marketplace/management/).

1. Buat ID produk untuk produk kontainer Anda dengan melakukan langkah-langkah berikut. Anda akan menggunakan ID ini dalam gambar kontainer Anda untuk pemeriksaan lisensi di langkah selanjutnya.

   1. Dari bilah menu, perluas **Aset**, dan pilih **Kontainer**.

   1. **Masukkan nama yang menghadap pelanggan untuk produk Anda, dan pilih Buat.** Anda dapat mengubah nama ini nanti.

   1. Catat **ID Produk**. Anda akan menggunakannya saat membuat atau memperbarui detail harga produk.
**Tip**  
Jika Anda kehilangan ID produk Anda, Anda dapat menemukannya di Portal Manajemen AWS Marketplace dengan memilih **Container** dari menu **Assets**. Halaman **Kontainer** menampilkan daftar produk Anda dengan produk terkait mereka IDs.

1. Unduh AWS SDK publik terbaru dan kemudian instal di aplikasi penampung Anda. Anda dapat menemukan petunjuk penginstalan untuk AWS SDK pilihan Anda di [Tools to Build on AWS](https://aws.amazon.com/tools/).
**catatan**  
Untuk memanggil operasi License Manager API dari Amazon EKS Anywhere atau klaster Kubernetes yang tidak disediakan oleh AWS, Anda harus menggunakan SDK yang didukung. AWS Untuk melihat daftar yang didukung AWS SDKs, lihat [Menggunakan AWS SDK yang didukung](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html).

1. Buat AWS License Manager klien dengan penyedia kredensi khusus sehingga dapat memberikan kredensil ke aplikasi kontainer yang digunakan di AWS maupun lokal. Untuk kode sumber lengkap untuk penyedia kredensi kustom`LicenseCredentialProvider`, lihat bagian berikut:
   + [`LicenseManagerCredentialsProvider`- Implementasi Java](#container-license-manager-cred-provider-java)
   + [`LicenseManagerCredentialsProvider`- `Golang` implementasi](#container-license-manager-cred-provider-golang)

    `LicenseCredentialsProvider`memperluas rantai penyedia kredensi default AWS SDK untuk penggunaan lokal dengan menambahkan. `LicenseManagerTokenCredentialsProvider` Ini memberikan kredensil dengan menggunakan License Manager OIDC mengeluarkan token identitas di lingkungan lokal. Anda harus menyertakan kode sumber untuk `LicenseCredentialsProvider` di classpath aplikasi Anda.
**catatan**  
Memperluas aplikasi kontainer `DefaultCredentialsProvider` memungkinkan aplikasi kontainer yang sama untuk mendapatkan kredensil saat berjalan AWS dan saat berjalan di lingkungan lokal. Jika aplikasi kontainer sudah menggunakan rantai penyedia kredensi kustom alih-alih default, itu juga dapat diperpanjang dengan menambahkan `LicenseManagerTokenCredentialsProvider` ke rantai kustom.

   Cuplikan kode berikut adalah contoh membuat AWS License Manager klien menggunakan Java.

   ```
   LicenseManagerClientBuilder clientBuilder = LicenseManagerClient.builder().credentialsProvider(LicenseCredentialsProvider.create());
   ```

1. Panggil operasi `CheckoutLicense` API dengan menggunakan `aws license-manager checkout-license` perintah dari setiap image container berbayar dalam penawaran produk Anda. Ini memeriksa bahwa pembeli berhak menggunakan lisensi untuk aplikasi Anda. Jika pembeli berhak atas aplikasi, `CheckoutLicense` berhasil dan mengembalikan hak yang diminta dan nilainya. Jika pembeli tidak berhak atas aplikasi, `CheckoutLicense` melempar pengecualian.

   Parameter berikut diperlukan saat memanggil operasi `CheckoutLicense` API:
   + `CheckoutType`— Nilai yang valid adalah `PROVISIONAL` atau`PERPETUAL`:
     + Gunakan `PERPETUAL` ketika jumlah hak yang diperiksa akan habis dari kolam.

       Contoh: Pembeli berhak memproses 500 GB data. Ketika mereka terus memproses data, kuantitas ditarik ke bawah dan habis dari kumpulan 500 GB.
     + Gunakan `PROVISIONAL` untuk hak lisensi mengambang di mana hak diperiksa keluar dari kumpulan dan dikembalikan setelah digunakan.

       Contoh: Pengguna berhak atas 500 pengguna simultan pada aplikasi. Saat pengguna masuk atau keluar, pengguna ditarik atau dikembalikan ke kumpulan 500 pengguna. Untuk mempelajari lebih lanjut tentang hak lisensi mengambang, lihat. [Hak lisensi mengambang dengan License Manager](#container-LM-floating-license)
   + `ClientToken`— Pengidentifikasi unik dan peka huruf besar/kecil. Sebaiknya gunakan UUID acak untuk setiap permintaan unik.
   + `Entitlements`— Daftar hak yang akan diperiksa.
     + Untuk hak fitur, berikan `Name` dan `Unit` properti sebagai berikut.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "None"
       }
       ```
     + Untuk hak yang dihitung, berikan, `Name``Unit`, dan `Count` properti sebagai berikut.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "<Entitlement_Unit>",
         "Value": <Desired_Count>
       }
       ```
   + `KeyFingerprint`— Sidik jari kunci untuk lisensi yang dikeluarkan oleh AWS Marketplace adalah`aws:294406891311:AWS/Marketplace:issuer-fingerprint`. Menggunakan sidik jari kunci ini memastikan bahwa lisensi dikeluarkan oleh AWS Marketplace dan bukan oleh entitas yang tidak dapat diandalkan.
   + `ProductSKU`— ID Produk yang dihasilkan Portal Manajemen AWS Marketplace pada langkah sebelumnya.

   Cuplikan berikut adalah contoh panggilan menggunakan operasi `CheckoutLicense` API menggunakan. AWS CLI

   ```
   aws license-manager checkout-license \
   --product-sku "2205b290-19e6-4c76-9eea-377d6bf71a47" \
   --checkout-type "PROVISIONAL" \
   --client-token "79464194dca9429698cc774587a603a1" \
   --entitlements "Name=AWS::Marketplace::Usage/Drawdown/DataConsumption, Value=10, Unit=Gigabytes" \
   --key-fingerprint "aws:294406891311:AWS/Marketplace:issuer-fingerprint"
   ```
**catatan**  
Untuk memeriksa lisensi, aplikasi kontainer memerlukan akses jaringan keluar untuk menggunakan License Manager. Aplikasi yang digunakan di lokasi mungkin mengalami akses jaringan keluar yang tidak dapat diandalkan atau lambat. Aplikasi ini harus menyertakan percobaan ulang yang memadai saat memanggil License Manager. Untuk informasi selengkapnya, lihat [Praktik terbaik untuk mengintegrasikan dengan License Manager untuk penerapan lokal](#container-LM-best-practices-on-prem).

1. Hubungi operasi `CheckoutLicense` API dengan irama reguler untuk mengidentifikasi perubahan apa pun pada lisensi pelanggan karena perpanjangan, peningkatan, atau pembatalan yang dilakukan. AWS Marketplace Irama tergantung pada aplikasi. Kami merekomendasikan untuk memeriksa lisensi sekali sehari untuk mengambil perubahan secara otomatis tanpa campur tangan pembeli.

   Aplikasi yang digunakan di lokasi mungkin memiliki akses jaringan keluar yang tidak dapat diandalkan untuk memeriksa lisensi pada irama reguler. Dalam kasus seperti itu, aplikasi harus menggunakan lisensi cache untuk ketahanan yang memadai. Untuk informasi selengkapnya, lihat [Praktik terbaik untuk mengintegrasikan dengan License Manager untuk penerapan lokal](#container-LM-best-practices-on-prem).

1. Setelah Anda mengintegrasikan `CheckoutLicense` panggilan dengan aplikasi container Anda, buat versi baru image container Docker Anda dengan perubahan.

1. Perbarui bagan Helm aplikasi Anda untuk menerima rahasia Kubernetes sebagai input opsional yang berisi konfigurasi untuk mengakses lisensi menggunakan License Manager. APIs Rahasia konfigurasi akan berisi token identitas yang dikeluarkan oleh License Manager dan AWS Identity and Access Management peran yang akan digunakan oleh penyedia kredensi kustom yang dijelaskan sebelumnya untuk mendapatkan AWS kredensil untuk memanggil License Manager APIs saat aplikasi kontainer di-deploy di lokasi. Juga, tambahkan Wilayah AWS sebagai input dengan nilai default`us-east-1`.

   Pembeli yang menerapkan aplikasi kontainer di tempat dapat membuat rahasia Kubernetes melalui pengalaman AWS Marketplace pembeli untuk produk kontainer. Berikan nama rahasia Kubernetes sebagai input ke perintah. `helm install` Rahasia konfigurasi dikonfigurasi dalam format berikut.

   ```
   apiVersion: v1
   kind: Secret
   metadata:
     name: aws-marketplace-license-config
   type: Opaque
   stringData:
     license_token: <token_value> // License Manager issued JWT token
     iam_role: <role_arn> // AWS Identity and Access Management role to assume with license token
   ```

1. Perbarui template penerapan aplikasi di bagan Helm untuk gambar kontainer yang terintegrasi dengan menyertakan AWS License Manager yang berikut:
   + Akun layanan untuk pod - Akun layanan diperlukan untuk penerapan Helm di Amazon EKS. Ini digunakan untuk mendapatkan izin untuk memanggil operasi License Manager API dengan menyiapkan peran IAM untuk akun layanan pada image container. Untuk informasi selengkapnya tentang peran IAM untuk akun layanan, lihat [peran IAM untuk akun layanan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).
   + Akses lisensi untuk penerapan lokal — Rahasia konfigurasi lisensi diperlukan untuk menyediakan kredensil dan izin yang sesuai untuk memanggil operasi License Manager API untuk penerapan Helm di lingkungan lokal. Pembeli akan menghasilkan dan memberikan rahasia lisensi kepada Helm dari pengalaman AWS Marketplace pembeli.

   Cuplikan kode berikut adalah spesifikasi penyebaran sampel dengan akun layanan, konfigurasi lisensi, dan rahasia tarik gambar.

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: example-app
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: example-app
     template:
       metadata:
         labels:
           app: example-app
   spec:
         // Service account for pod
         serviceAccountName: {{ .Values.serviceAccountName }}
         containers:
           - name: example-app
             image: example-app
             ports:
               - containerPort: 8001
   // Add the following conditional attributes
   {{ - if .Values.awsmp.licenseConfigSecretName }}
             //Mount the license volume to the container image
             volumeMounts:
               - name: awsmp-product-license
                 mountPath: "/var/run/secrets/product-license"
             //Add following environment variable to container for credential
   provider
             env:
               - name: AWS_WEB_IDENTITY_REFRESH_TOKEN_FILE
                 value: "/var/run/secrets/product-license/license_token"
               - name: AWS_ROLE_ARN
                   valueFrom:
                       secretKeyRef:
                       name: {{ .Values.aws.licenseConfigSecretName }}
                       key: iam_role
         //Mount the license secret as a volume to the pod
         volumes:
           - name: awsmp-product-license
             secret:
               secretName: {{ .Values.aws.licenseConfigSecretName }}
               optional: true
   {{ - end }}
   ```
**catatan**  
Rahasia konfigurasi lisensi adalah opsional. Pembeli hanya menggunakan nilai untuk penerapan lokal. Untuk AWS penerapan, spesifikasi penyebaran harus menyertakan akun layanan untuk gambar terintegrasi License Manager.

1. Uji integrasi License Manager secara lokal dan di Amazon EKS dengan melakukan langkah-langkah di bagian berikut:

   1. [Menguji integrasi License Manager secara lokal](#container-testing-LM-integration-locally)

   1. [Menguji integrasi License Manager di Amazon EKS](#container-testing-LM-integration-EKS)

1. Setelah berhasil memverifikasi integrasi License Manager baik di dalam AWS maupun lokal, Anda dapat membuat daftar produk container dengan mengikuti langkah-langkah di dalamnya[Ikhtisar: Buat produk kontainer](container-product-getting-started.md#create-container-product).

## Menguji integrasi License Manager secara lokal
<a name="container-testing-LM-integration-locally"></a>

Anda dapat menggunakan minikube atau penyiapan lainnya untuk menguji integrasi License Manager pada klaster Kubernetes mana pun secara lokal. Pastikan bahwa klaster Kubernetes memiliki akses internet keluar untuk memanggil operasi License Manager API.

**Untuk menguji integrasi License Manager secara lokal**

1. Buat lisensi pengujian di akun penjual uji dengan hak yang diinginkan. Untuk menyiapkan lisensi pengujian, lihat [CreateLicense](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html)di *Referensi AWS License Manager API*. Atau, gunakan skrip berikut untuk membuat lisensi pengujian dan kemudian buat hibah lisensi ke akun pembeli uji untuk menggunakan lisensi. Skrip berikut menggunakan kredensil akun penjual uji.

   ```
   read -p 'AWS Account for test buyer: ' TEST_BUYER_ACCOUNT_ID
   read -p 'License entitlements: ' ENTITLEMENTS
   
   # TEST_SELLER_ACCOUNT_ID="109876543210"
   # ENTITLEMENTS="{\"Name\": \"ByData\",\"MaxCount\": 1000,\"Overage\":true,\"Unit\": \"Gigabits\",\"AllowCheckIn\": true}"
   
   # Create License
   
   NOW=$(date +"%Y-%m-%dT00:00:00+00:00")
   
   PRODUCT_NAME="My awesome product"
   PRODUCT_SKU="c97b7825-44c4-4f42-b025-12baa4c171e0"
   
   LICENSE_BENEFICIARY=" arn:aws:iam::$TEST_BUYER_ACCOUNT_ID:root "
   LICENSE_ISSUER_NAME="test-seller"
   LICENSE_NAME="test-seller-license"
   
   CLIENT_TOKEN="b3920968-a94f-4547-af07-3dd232319367"
   CONSUMPTION_TTL=180
   CONSUMPTION_RENEW_TYPE="None"
   
   HOME_REGION="us-east-1"
   
   LICENSE_ARN=$(aws license-manager create-license --license-name "$LICENSE_NAME" --product-name "$PRODUCT_NAME" --product-sku "$PRODUCT_SKU" --issuer Name="$LICENSE_ISSUER_NAME" --home-region "$HOME_REGION" --validity Begin="$NOW" --entitlements "$ENTITLEMENTS" --beneficiary "$LICENSE_BENEFICIARY" --consumption-configuration RenewType="$CONSUMPTION_RENEW_TYPE",ProvisionalConfiguration={MaxTimeToLiveInMinutes=$CONSUMPTION_TTL} --client-token "$CLIENT_TOKEN" | jq -r ".LicenseArn" )
   
   echo "License arn: $LICENSE_ARN"
   
   # Create Grant
   
   GRANT_TOKEN="e9a14140-4fca-4219-8230-57511a6ea6"
   GRANT_NAME="test-grant"
   
   GRANT_ARN=$(aws license-manager create-grant --grant-name "$GRANT_NAME" --license-arn "$LICENSE_ARN" --principals "$LICENSE_BENEFICIARY" --home-region "$HOME_REGION" --client-token "$GRANT_TOKEN" --allowed-operations "CheckoutLicense" "CheckInLicense" "ExtendConsumptionLicense" "CreateToken" | jq -r ".GrantArn")
   
   echo "Grant arn: $GRANT_ARN"
   ```

1. Buat rahasia Kubernetes dengan token lisensi dan peran IAM menggunakan format rahasia yang ditentukan sebelumnya. Gunakan operasi License Manager `CreateToken` API untuk menghasilkan token lisensi. Kemudian, gunakan operasi IAM `CreateRole` API untuk membuat peran IAM dengan izin dan kebijakan kepercayaan. Lihat contoh dalam skrip berikut. Skrip berikut menggunakan kredensil akun pembeli uji.

   ```
   read -p 'AWS Account for test license: ' TEST_ACCOUNT_ID
   read -p 'License Arn' LICENSE_ARN
   # Create IAM Role
   ROLE_NAME="AWSLicenseManagerConsumptionTestRole"
   ROLE_DESCRIPTION="Role to test AWS License Manager integration on-prem"
   ROLE_POLICY_ARN="arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy"
   ROLE_TRUST_POLICY="{\"Version\": \"2012-10-17\",\"Statement\": [{ \"Effect\":\"Allow\", \"Principal\": { \"Federated\": \"openid-license-manager.amazonaws.com\" }, \"Action\": \"sts:AssumeRoleWithWebIdentity\",\"Condition\": { \"ForAnyValue:StringLike\": { \"openid-license-manager.amazonaws.com:amr\": \"aws:license-manager:token-issuer-account-id:${TEST_ACCOUNT_ID}\" }}}]}"
   ROLE_SESSION_DURATION=3600
   
   ROLE_ARN=$(aws iam create-role --role-name "$ROLE_NAME" --description "$ROLE_DESCRIPTION" --assume-role-policy-document "$ROLE_TRUST_POLICY" --max-session-duration $ROLE_SESSION_DURATION | jq ".Role" | jq -r ".Arn")
   
   aws iam attach-role-policy --role-name "$ROLE_NAME" --policy-arn "$ROLE_POLICY_ARN"
   
   echo "Role arn: $ROLE_ARN"
   
   # Create Token
   CLIENT_TOKEN="b3920968-a94f-4547-af07-3dd232319367"
   
   TOKEN=$(aws license-manager create-token --license-arn $LICENSE_ARN --role-arns $ROLE_ARN --client-token $CLIENT_TOKEN | jq '.Token')
   
   echo "License access token: $TOKEN"c
   ```

1. Siapkan klaster Kubernetes yang dihosting di luar. AWS Gunakan untuk menguji bahwa aplikasi kontainer dapat terhubung ke AWS License Manager API dari lingkungan selain AWS dan bahwa penyedia kredensi khusus terintegrasi dengan baik dalam aplikasi.

1. Menerapkan token lisensi dan peran IAM yang dihasilkan sebelumnya ke dalam klaster Kubernetes lokal.

   ```
   kubectl create secret generic "awsmp-license-access-config" \
   --from-literal=license_token=${TOKEN} \
   --from-literal=iam_role=${ROLE_ARN}
   ```

1. Terapkan aplikasi Anda melalui Helm dengan nama rahasia sebagai masukan dan verifikasi bahwa aplikasi dapat memanggil operasi License Manager API untuk melakukan pemeriksaan hak. Untuk perubahan spesifikasi Helm dan penerapan, lihat Langkah 9 di. [Mengintegrasikan produk AWS Marketplace for Containers Anywhere dengan License Manager](#containers-anywhere-integrate-with-LM)

## Menguji integrasi License Manager di Amazon EKS
<a name="container-testing-LM-integration-EKS"></a>

Anda juga dapat menguji integrasi License Manager di Amazon EKS. Uji untuk memastikan bahwa aplikasi dapat memanggil operasi License Manager API tanpa rahasia konfigurasi lisensi. Juga pastikan bahwa akun layanan dapat digunakan untuk mengatur Peran IAM untuk Akun Layanan (IRSA) dan memberikan kredensi yang relevan untuk aplikasi.

**Untuk menguji integrasi License Manager di Amazon EKS**

1. Buat lisensi pengujian di akun penjual uji dengan hak yang diinginkan. Lihat [referensi CreateLicense API](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html) untuk menyiapkan lisensi pengujian Anda atau gunakan skrip berikut untuk membuatnya dan membuat hibah lisensi ke akun pembeli pengujian untuk menggunakan lisensi. Skrip berikut menggunakan kredensil akun penjual uji.

   ```
   read -p 'AWS Account for test buyer: ' TEST_BUYER_ACCOUNT_ID
   read -p 'License entitlements: ' ENTITLEMENTS
   
   # TEST_SELLER_ACCOUNT_ID="109876543210"
   # ENTITLEMENTS="{\"Name\": \"ByData\",\"MaxCount\": 1000,\"Overage\": true,\"Unit\": \"Gigabits\",\"AllowCheckIn\": true}"
   
   # Create License
   
   NOW=$(date +"%Y-%m-%dT00:00:00+00:00")
   
   PRODUCT_NAME="My awesome product"
   PRODUCT_SKU="c97b7825-44c4-4f42-b025-12baa4c171e0"
   
   LICENSE_BENEFICIARY=" arn:aws:iam::$TEST_BUYER_ACCOUNT_ID:root "
   LICENSE_ISSUER_NAME="test-seller"
   LICENSE_NAME="test-seller-license"
   
   CLIENT_TOKEN="b3920968-a94f-4547-af07-3dd232319367"
   CONSUMPTION_TTL=180
   CONSUMPTION_RENEW_TYPE="None"
   
   HOME_REGION="us-east-1"
   
   LICENSE_ARN=$(aws license-manager create-license --license-name "$LICENSE_NAME" --product-name "$PRODUCT_NAME" --product-sku "$PRODUCT_SKU" --issuer Name="$LICENSE_ISSUER_NAME" --home-region "$HOME_REGION" --validity Begin="$NOW" --entitlements "$ENTITLEMENTS" --beneficiary "$LICENSE_BENEFICIARY" --consumption-configuration RenewType="$CONSUMPTION_RENEW_TYPE",ProvisionalConfiguration={MaxTimeToLiveInMinutes=$CONSUMPTION_TTL} --client-token "$CLIENT_TOKEN" | jq -r ".LicenseArn" )
   
   echo "License arn: $LICENSE_ARN"
   
   # Create Grant
   
   GRANT_TOKEN="e9a14140-4fca-4219-8230-57511a6ea6"
   GRANT_NAME="test-grant"
   
   GRANT_ARN=$(aws license-manager create-grant --grant-name "$GRANT_NAME" --license-arn "$LICENSE_ARN" --principals "$LICENSE_BENEFICIARY" --home-region "$HOME_REGION" --client-token "$GRANT_TOKEN" --allowed-operations "CheckoutLicense" "CheckInLicense" "ExtendConsumptionLicense" "CreateToken" | jq -r ".GrantArn")
   
   echo "Grant arn: $GRANT_ARN"
   ```

1. Buat cluster pengujian Amazon EKS dari konfigurasi yang diinginkan, atau jalankan perintah berikut untuk menggunakan konfigurasi default.

   ```
   aws ec2 create-key-pair --region us-west-2 --key-name eks-key-pair
   ```

   ```
   eksctl create cluster \
   --name awsmp-eks-test-example \
   --region us-west-2 \
   --with-oidc \
   --ssh-access \
   --ssh-public-key eks-key-pair
   ```

1. Buat akun layanan untuk klaster yang ada dan kaitkan dengan peran IAM. Perintah berikut menciptakan peran IAM dengan. `AWSLicenseManagerConsumptionPolicy` Kemudian, perintah melampirkannya ke akun `test_sa` layanan cluster Amazon EKS di mana gambar terintegrasi License Manager harus digunakan. Akibatnya, akun layanan bisa mendapatkan kredensi yang sesuai untuk memanggil operasi License Manager API.

   ```
   eksctl create iamserviceaccount \
   --name test_sa \
   --namespace test_namespace \
   --cluster awsmp-eks-test-example \
   --attach-policy-arn "arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy" \
   --approve \
   --override-existing-serviceaccounts
   ```

1. Terapkan aplikasi melalui Helm di akun layanan tempat peran IAM dikaitkan dari perintah sebelumnya. Verifikasi bahwa aplikasi dapat memanggil operasi License Manager API untuk melakukan pemeriksaan hak.

## Hak lisensi mengambang dengan License Manager
<a name="container-LM-floating-license"></a>

Dengan lisensi mengambang, saat pengguna masuk ke aplikasi, lisensi diambil dari kumpulan lisensi yang tersedia. Saat pengguna keluar, lisensi ditambahkan kembali ke kumpulan lisensi yang tersedia.

Untuk lisensi mengambang, aplikasi menggunakan operasi `CheckoutLicense` API untuk memeriksa hak dari kumpulan hak saat sumber daya digunakan. Respons operasi `CheckoutLicense` API mencakup token konsumsi lisensi yang merupakan pengidentifikasi unik untuk checkout. Token konsumsi lisensi dapat melakukan tindakan tambahan pada hak yang diperiksa, seperti memeriksanya kembali ke kumpulan lisensi atau memperpanjang checkout.

Ketika sumber daya tidak lagi digunakan, aplikasi menggunakan operasi `CheckInLicense` API untuk memeriksa hak kembali ke kumpulan.

```
aws license-manager check-in-license \
--license-consumption-token "f1603b3c1f574b7284db84a9e771ee12"
```

Jika memeriksa lisensi kembali ke pool gagal, misalnya, jika aplikasi mogok selama operasi, hak akan diperiksa kembali ke kolam secara otomatis setelah 60 menit. Karena itu, jika sumber daya digunakan lebih dari 60 menit, itu adalah praktik terbaik untuk menjaga hak diperiksa dari kolam. Untuk melakukan ini, gunakan operasi `ExtendLicenseConsumption` API selama sumber daya digunakan.

```
aws license-manager extend-license-consumption \
--license-consumption-token "f1603b3c1f574b7284db84a9e771ee12"
```

## Praktik terbaik untuk mengintegrasikan dengan License Manager untuk penerapan lokal
<a name="container-LM-best-practices-on-prem"></a>

Penerapan aplikasi kontainer di lingkungan lokal mungkin mengalami akses jaringan keluar yang tidak dapat diandalkan. Gunakan praktik terbaik berikut untuk menambah ketahanan guna menghindari gangguan layanan kepada pembeli karena potensi masalah yang disebabkan oleh konektivitas internet yang buruk:
+ **Coba lagi yang memadai** - Masalah jaringan sementara dapat membuat aplikasi Anda tidak terhubung. AWS License Manager Terapkan percobaan ulang hingga 30 menit, dengan mundur eksponensial. Ini dapat membantu menghindari pemadaman jangka pendek atau masalah jaringan.
+ **Hindari batas keras** — Aplikasi yang digunakan dalam cluster yang terhubung dapat secara teratur memeriksa lisensi untuk mengidentifikasi perubahan apa pun karena peningkatan atau pembaruan. Dengan akses keluar yang tidak dapat diandalkan, aplikasi mungkin tidak dapat mengidentifikasi perubahan tersebut. Bila memungkinkan, aplikasi harus menghindari gangguan layanan kepada pembeli karena ketidakmampuan untuk memeriksa lisensi melalui License Manager. Aplikasi dapat kembali pada pengalaman uji coba gratis atau sumber terbuka ketika lisensi kedaluwarsa dan mereka tidak dapat memeriksa apakah lisensi valid.
+ **Beri tahu pelanggan** — Saat menggunakan lisensi yang di-cache, setiap perubahan pada lisensi (termasuk pembaruan atau peningkatan) tidak secara otomatis tercermin pada beban kerja yang sedang berjalan. Beri tahu pelanggan Anda (bahwa mereka harus mengizinkan akses keluar ke aplikasi lagi sementara sehingga aplikasi dapat memperbarui lisensi yang di-cache. Misalnya, beri tahu pelanggan melalui aplikasi itu sendiri atau melalui dokumentasinya. Demikian pula, ketika kembali ke serangkaian fungsi yang lebih rendah, beri tahu pelanggan bahwa hak mereka habis atau lisensi kedaluwarsa. Kemudian, mereka dapat memilih untuk meningkatkan atau memperbarui.

## `LicenseManagerCredentialsProvider`- Implementasi Java
<a name="container-license-manager-cred-provider-java"></a>

`LicenseCredentialsProvider`memperluas rantai penyedia kredensi default AWS SDK untuk penggunaan lokal dengan menambahkan. `LicenseManagerTokenCredentialsProvider` 

**`LicenseCredentialsProvider`**

```
package com.amazon.awsmp.license;

import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.auth.credentials.internal.LazyAwsCredentialsProvider;
import software.amazon.awssdk.utils.SdkAutoCloseable;

public class LicenseCredentialsProvider implements AwsCredentialsProvider, SdkAutoCloseable {
    private static final LicenseCredentialsProvider CREDENTIALS_PROVIDER = new LicenseCredentialsProvider();
    private final LazyAwsCredentialsProvider providerChain;

    private LicenseCredentialsProvider() {
        this.providerChain = createChain();
    }

    public static LicenseCredentialsProvider create() {
        return CREDENTIALS_PROVIDER;
    }

    @Override
    public AwsCredentials resolveCredentials() {
        return this.providerChain.resolveCredentials();
    }

    @Override
    public void close() {
        this.providerChain.close();
    }

    private LazyAwsCredentialsProvider createChain() {
        return LazyAwsCredentialsProvider.create(() -> {
            AwsCredentialsProvider[] credentialsProviders = new AwsCredentialsProvider[]{
                    DefaultCredentialsProvider.create(),
                    LicenseManagerTokenCredentialsProvider.create()};

            return AwsCredentialsProviderChain.builder().reuseLastProviderEnabled(true)
                    .credentialsProviders(credentialsProviders).build();
        });
    }
}
```

**`LicenseManagerTokenCredentialsProvider`**

`LicenseManagerTokenCredentialsProvider`menyediakan kredensil dengan menggunakan License Manager OIDC mengeluarkan token identitas di lingkungan lokal. Anda harus menyertakan kode sumber untuk `LicenseCredentialsProvider` di classpath aplikasi Anda.

```
package com.amazon.awsmp.license;

import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.core.SdkSystemSetting;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.retry.RetryPolicyContext;
import software.amazon.awssdk.core.retry.conditions.OrRetryCondition;
import software.amazon.awssdk.core.retry.conditions.RetryCondition;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain;
import software.amazon.awssdk.services.licensemanager.LicenseManagerClient;
import software.amazon.awssdk.services.licensemanager.model.GetAccessTokenRequest;
import software.amazon.awssdk.services.licensemanager.model.GetAccessTokenResponse;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.auth.StsAssumeRoleWithWebIdentityCredentialsProvider;
import software.amazon.awssdk.services.sts.model.AssumeRoleWithWebIdentityRequest;
import software.amazon.awssdk.services.sts.model.IdpCommunicationErrorException;
import software.amazon.awssdk.utils.IoUtils;
import software.amazon.awssdk.utils.SdkAutoCloseable;
import software.amazon.awssdk.utils.StringUtils;
import software.amazon.awssdk.utils.SystemSetting;

import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.function.Supplier;

public class LicenseManagerTokenCredentialsProvider implements AwsCredentialsProvider, SdkAutoCloseable {

    private final StsAssumeRoleWithWebIdentityCredentialsProvider credentialsProvider;
    private final RuntimeException loadException;

    private Path licenseAccessTokenFile;
    private String roleArn;
    private String roleSessionName;
    private StsClient stsClient;
    private LicenseManagerClient lmClient;

    public static LicenseManagerTokenCredentialsProvider create() {
        return new Builder().build();
    }

    @Override
    public AwsCredentials resolveCredentials() {
        if (this.loadException != null) {
            throw this.loadException;
        }
        return this.credentialsProvider.resolveCredentials();
    }

    @Override
    public void close() {
        IoUtils.closeQuietly(this.credentialsProvider, null);
        IoUtils.closeQuietly(this.stsClient, null);
        IoUtils.closeIfCloseable(this.lmClient, null);
    }

    private LicenseManagerTokenCredentialsProvider(Builder builder) {
        StsAssumeRoleWithWebIdentityCredentialsProvider credentialsProvider = null;
        RuntimeException loadException = null;

        try {
            this.licenseAccessTokenFile = Paths.get(StringUtils.trim(LicenseSystemSetting.AWS_WEB_IDENTITY_REFRESH_TOKEN_FILE.getStringValueOrThrow()));
            this.roleArn = SdkSystemSetting.AWS_ROLE_ARN.getStringValueOrThrow();
            this.roleSessionName = SdkSystemSetting.AWS_ROLE_SESSION_NAME.getStringValue().orElse("aws-sdk-java-" + System.currentTimeMillis());
            this.stsClient = builder.stsClient != null ? builder.stsClient : StsClientFactory.create();
            this.lmClient = builder.lmClient != null ? builder.lmClient : LicenseManagerClientFactory.create();

            AssumeRoleWithWebIdentityRequest request = AssumeRoleWithWebIdentityRequest.builder()
                    .roleArn(this.roleArn).roleSessionName(this.roleSessionName).build();

            Supplier<AssumeRoleWithWebIdentityRequest> supplier = new AssumeRoleRequestSupplier(request,
                    this.licenseAccessTokenFile, this.lmClient);

            credentialsProvider = StsAssumeRoleWithWebIdentityCredentialsProvider.builder()
                    .stsClient(this.stsClient).refreshRequest(supplier).build();
        } catch (RuntimeException ex) {
            loadException = ex;
        }

        this.credentialsProvider = credentialsProvider;
        this.loadException = loadException;
    }

    public static final class Builder {
        private Path licenseAccessTokenFile;
        private String roleArn;
        private String roleSessionName;
        private StsClient stsClient;
        private LicenseManagerClient lmClient;

        public LicenseManagerTokenCredentialsProvider build() {
            return new LicenseManagerTokenCredentialsProvider(this);
        }

        public LicenseManagerTokenCredentialsProvider.Builder licenseAccessTokenFile(Path licenseAccessTokenFile) {
            this.licenseAccessTokenFile = licenseAccessTokenFile;
            return this;
        }

        public LicenseManagerTokenCredentialsProvider.Builder roleArn(String roleArn) {
            this.roleArn = roleArn;
            return this;
        }

        public LicenseManagerTokenCredentialsProvider.Builder roleSessionName(String roleSessionName) {
            this.roleSessionName = roleSessionName;
            return this;
        }

        public LicenseManagerTokenCredentialsProvider.Builder stsClient(StsClient stsClient) {
            this.stsClient = stsClient;
            return this;
        }

        public LicenseManagerTokenCredentialsProvider.Builder lmClient(LicenseManagerClient lmClient) {
            this.lmClient = lmClient;
            return this;
        }
    }

    private static final class AssumeRoleRequestSupplier implements Supplier {
        private final LicenseManagerClient lmClient;
        private final AssumeRoleWithWebIdentityRequest request;
        private final Path webIdentityRefreshTokenFile;

        AssumeRoleRequestSupplier(final AssumeRoleWithWebIdentityRequest request,
                                                 final Path webIdentityRefreshTokenFile,
                                                 final LicenseManagerClient lmClient) {
            this.lmClient = lmClient;
            this.request = request;
            this.webIdentityRefreshTokenFile = webIdentityRefreshTokenFile;
        }

        public AssumeRoleWithWebIdentityRequest get() {
            return this.request.toBuilder()
                    .webIdentityToken(getIdentityToken())
                    .build();
        }

        private String getIdentityToken() {
            return refreshIdToken(readRefreshToken(this.webIdentityRefreshTokenFile));
        }

        private String readRefreshToken(Path file) {
            try (InputStream webIdentityRefreshTokenStream = Files.newInputStream(file)) {
                return IoUtils.toUtf8String(webIdentityRefreshTokenStream);
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
        }

        private String refreshIdToken(String licenseRefreshToken) {
            final GetAccessTokenRequest request = GetAccessTokenRequest.builder()
                    .token(licenseRefreshToken)
                    .build();

            GetAccessTokenResponse response = this.lmClient.getAccessToken(request);
            return response.accessToken();
        }
    }

    private static final class LicenseManagerClientFactory {
        private static final Duration DEFAULT_API_TIMEOUT = Duration.ofSeconds(30);
        private static final Duration DEFAULT_API_ATTEMPT_TIMEOUT = Duration.ofSeconds(10);

        public static LicenseManagerClient create() {
            return getLicenseManagerClient();
        }

        private static LicenseManagerClient getLicenseManagerClient() {
            ClientOverrideConfiguration configuration = ClientOverrideConfiguration.builder()
                    .apiCallTimeout(DEFAULT_API_TIMEOUT)
                    .apiCallAttemptTimeout(DEFAULT_API_ATTEMPT_TIMEOUT)
                    .build();

            LicenseManagerClient client = LicenseManagerClient.builder()
                    .region(configureLicenseManagerRegion())
                    .credentialsProvider(AnonymousCredentialsProvider.create())
                    .overrideConfiguration(configuration).build();
            return client;
        }

        private static Region configureLicenseManagerRegion() {
            Region defaultRegion = Region.US_EAST_1;

            Region region;
            try {
                region = (new DefaultAwsRegionProviderChain()).getRegion();
            } catch (RuntimeException ex) {
                region = defaultRegion;
            }
            return region;
        }
    }

    private static final class StsClientFactory {
        private static final Duration DEFAULT_API_TIMEOUT = Duration.ofSeconds(30);
        private static final Duration DEFAULT_API_ATTEMPT_TIMEOUT = Duration.ofSeconds(10);

        public static StsClient create() {
            return getStsClient();
        }

        private static StsClient getStsClient() {
            OrRetryCondition retryCondition = OrRetryCondition.create(new StsRetryCondition(),
                    RetryCondition.defaultRetryCondition());

            ClientOverrideConfiguration configuration = ClientOverrideConfiguration.builder()
                    .apiCallTimeout(DEFAULT_API_TIMEOUT)
                    .apiCallAttemptTimeout(DEFAULT_API_ATTEMPT_TIMEOUT)
                    .retryPolicy(r -> r.retryCondition(retryCondition))
                    .build();

            return StsClient.builder()
                    .region(configureStsRegion())
                    .credentialsProvider(AnonymousCredentialsProvider.create())
                    .overrideConfiguration(configuration).build();
        }

        private static Region configureStsRegion() {
            Region defaultRegion = Region.US_EAST_1;
            Region stsRegion;
            try {
                stsRegion = (new DefaultAwsRegionProviderChain()).getRegion();
            } catch (RuntimeException ex) {
                stsRegion = defaultRegion;
            }
            return stsRegion;
        }

        private static final class StsRetryCondition implements RetryCondition {
            public boolean shouldRetry(RetryPolicyContext context) {
                return context.exception() instanceof IdpCommunicationErrorException;
            }
        }
    }

    private enum LicenseSystemSetting implements SystemSetting {
        AWS_WEB_IDENTITY_REFRESH_TOKEN_FILE("aws.webIdentityRefreshTokenFile");

        private String systemProperty;
        private String defaultValue = null;

        LicenseSystemSetting(String systemProperty) {
            this.systemProperty = systemProperty;
        }

        @Override
        public String property() {
            return this.systemProperty;
        }

        @Override
        public String environmentVariable() {
            return this.name();
        }

        @Override
        public String defaultValue() {
            return this.defaultValue;
        }
    }
}
```

## `LicenseManagerCredentialsProvider`- `Golang` implementasi
<a name="container-license-manager-cred-provider-golang"></a>

**`LicenseCredentialsProvider`**

`LicenseCredentialsProvider`memperluas rantai penyedia kredensi default AWS SDK untuk penggunaan lokal dengan menambahkan. `LicenseManagerTokenCredentialsProvider` 

```
package lib

import (
	"context"
	"fmt"
	"sync"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
)

// LicenseCredentialsProvider is the custom credential provider that can retrieve valid temporary aws credentials
type LicenseCredentialsProvider struct {
	fallBackProvider   aws.CredentialsProvider
	mux                sync.RWMutex
	licenseCredentials aws.Credentials
	err                error
}

// NewLicenseCredentialsProvider method will create a LicenseCredentialProvider Object which contains valid temporary aws credentials
func NewLicenseCredentialsProvider() (*LicenseCredentialsProvider, error) {
	licenseCredentialProvider := &LicenseCredentialsProvider{}
	fallBackProvider, err := createCredentialProvider()
	if err != nil {
		return licenseCredentialProvider, fmt.Errorf("failed to create LicenseCredentialsProvider, %w", err)
	}
	licenseCredentialProvider.fallBackProvider = fallBackProvider
	return licenseCredentialProvider, nil
}

// Retrieve method will retrieve temporary aws credentials from the credential provider
func (l *LicenseCredentialsProvider) Retrieve(ctx context.Context) (aws.Credentials, error) {
	l.mux.RLock()
	defer l.mux.RUnlock()
	l.licenseCredentials, l.err = l.fallBackProvider.Retrieve(ctx)
	return l.licenseCredentials, l.err
}

func createCredentialProvider() (aws.CredentialsProvider, error) {
	// LoadDefaultConfig will examine all "default" credential providers
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx)
	if err != nil {
		return nil, fmt.Errorf("failed to create FallBackProvider, %w", err)
	}

	var useFallbackProvider bool
	if cfg.Credentials != nil {
		if _, err := cfg.Credentials.Retrieve(ctx); err != nil {
			// If the "default" credentials provider cannot retrieve credentials, enable fallback to customCredentialsProvider.
			useFallbackProvider = true
		}
	} else {
		useFallbackProvider = true
	}

	if useFallbackProvider {
		customProvider, err := newLicenseManagerTokenCredentialsProvider()
		if err != nil {
			return cfg.Credentials, fmt.Errorf("failed to create fallBackProvider, %w", err)
		}
		// wrap up customProvider with CredentialsCache to enable caching
		cfg.Credentials = aws.NewCredentialsCache(customProvider)
	}
	return cfg.Credentials, nil
}
```

**`LicenseManagerTokenCredentialsProvider`**

`LicenseManagerTokenCredentialsProvider`menyediakan kredensil dengan menggunakan License Manager OIDC mengeluarkan token identitas di lingkungan lokal. Anda harus menyertakan kode sumber untuk `LicenseCredentialsProvider` di classpath aplikasi Anda.

```
package lib

import (
	"context"
	"fmt"
	"io/ioutil"
	"os"
	"sync"
	"time"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/sts"
)

const awsRefreshTokenFilePathEnvVar = "AWS_LICENSE_ACCESS_FILE"

// licenseManagerTokenCredentialsProvider defines and contains StsAssumeRoleWithWebIdentityProvider
type licenseManagerTokenCredentialsProvider struct {
	stsCredentialProvider *stsAssumeRoleWithWebIdentityProvider
	mux                   sync.RWMutex
	licenseCredentials    aws.Credentials
	err                   error
}

// Retrieve method will retrieve credentials from credential provider.
// Make this method public to make this provider satisfies CredentialProvider interface
func (a *licenseManagerTokenCredentialsProvider) Retrieve(ctx context.Context) (aws.Credentials, error) {
	a.mux.RLock()
	defer a.mux.RUnlock()
	a.licenseCredentials, a.err = a.stsCredentialProvider.Retrieve(ctx)
	return a.licenseCredentials, a.err
}

// newLicenseManagerTokenCredentialsProvider will create and return a LicenseManagerTokenCredentialsProvider Object which wraps up stsAssumeRoleWithWebIdentityProvider
func newLicenseManagerTokenCredentialsProvider() (*licenseManagerTokenCredentialsProvider, error) {
	// 1. Retrieve variables From yaml environment
	envConfig, err := config.NewEnvConfig()
	if err != nil {
		return &licenseManagerTokenCredentialsProvider{}, fmt.Errorf("failed to create LicenseManagerTokenCredentialsProvider, %w", err)
	}
	roleArn := envConfig.RoleARN
	var roleSessionName string
	if envConfig.RoleSessionName == "" {
		roleSessionName = fmt.Sprintf("aws-sdk-go-v2-%v", time.Now().UnixNano())
	} else {
		roleSessionName = envConfig.RoleSessionName
	}
	tokenFilePath := os.Getenv(awsRefreshTokenFilePathEnvVar)
	b, err := ioutil.ReadFile(tokenFilePath)
	if err != nil {
		return &licenseManagerTokenCredentialsProvider{}, fmt.Errorf("failed to create LicenseManagerTokenCredentialsProvider, %w", err)
	}
	refreshToken := aws.String(string(b))

	// 2. Create stsClient
	cfg, err := config.LoadDefaultConfig(context.TODO())
	if err != nil {
		return &licenseManagerTokenCredentialsProvider{}, fmt.Errorf("failed to create LicenseManagerTokenCredentialsProvider, %w", err)
	}
	stsClient := sts.NewFromConfig(cfg, func(o *sts.Options) {
		o.Region = configureStsClientRegion(cfg.Region)
		o.Credentials = aws.AnonymousCredentials{}
	})

	// 3. Configure StsAssumeRoleWithWebIdentityProvider
	stsCredentialProvider := newStsAssumeRoleWithWebIdentityProvider(stsClient, roleArn, roleSessionName, refreshToken)

	// 4. Build and return
	return &licenseManagerTokenCredentialsProvider{
		stsCredentialProvider: stsCredentialProvider,
	}, nil
}

func configureStsClientRegion(configRegion string) string {
	defaultRegion := "us-east-1"
	if configRegion == "" {
		return defaultRegion
	} else {
		return configRegion
	}
}
```

# Pemberitahuan Amazon SNS untuk produk kontainer
<a name="container-notification"></a>

Untuk menerima pemberitahuan, Anda dapat berlangganan topik Amazon Simple Notification Service (Amazon SNS) AWS Marketplace untuk diberikan kepada Anda selama pembuatan produk. Topik memberikan pemberitahuan tentang perubahan langganan pelanggan untuk produk Anda. Misalnya, Anda dapat menggunakan notifikasi ini untuk mengetahui kapan pelanggan menerima penawaran pribadi. 

**catatan**  
Selama proses pembuatan produk, topik Amazon SNS dibuat untuk produk Anda. Untuk berlangganan notifikasi, Anda memerlukan Nama Sumber Daya Amazon (ARN) dari topik Amazon SNS (misalnya,). `arn:aws:sns:us-east-1:123456789012:aws-mp-subscription-notification-PRODUCTCODE` ARN tidak tersedia di portal penjual untuk produk server. Hubungi [tim AWS Marketplace operasi](https://aws.amazon.com/marketplace/management/contact-us) untuk meminta ARN.

Topik Amazon SNS berikut tersedia untuk produk kontainer:
+ [Topik Amazon SNS: `aws-mp-subscription-notification`](#container-sns-subscription-message-body)Topik ini memberi tahu Anda ketika pembeli berlangganan atau berhenti berlangganan suatu produk. Ini tersedia untuk model harga per jam, termasuk per jam dan per jam dengan jangka panjang.

## Topik Amazon SNS: `aws-mp-subscription-notification`
<a name="container-sns-subscription-message-body"></a>

Setiap pesan dalam `aws-mp-subscription-notification` topik memiliki format berikut.

```
{
    "action": "<action-name>",
    "customer-identifier": " X01EXAMPLEX",
    "product-code": "n0123EXAMPLEXXXXXXXXXXXX",
    "offer-identifier": "offer-abcexample123"
}
```

*<action-name>*Akan bervariasi tergantung pada notifikasi. Tindakan yang mungkin adalah:
+ `subscribe-success`
+ `subscribe-fail`
+ `unsubscribe-pending`
+ `unsubscribe-success`

`offer-identifier`Ini termasuk dalam pemberitahuan hanya ketika tindakan `subscribe-success` atau`subscribe-fail`. Itu tidak termasuk dalam notifikasi saat tindakan `unsubscribe-pending` atau`unsubscribe-success`. Untuk penawaran yang dibuat sebelum Januari 2024, pengenal ini disertakan dalam pemberitahuan hanya untuk penawaran pribadi. Untuk penawaran yang dibuat pada Januari 2024 dan yang lebih baru, pengenal ini disertakan dalam pemberitahuan untuk semua penawaran, termasuk penawaran pribadi dan penawaran publik.

Untuk informasi tentang jenis penawaran, lihat tanggapan dari [DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity) atau visibilitas penawaran perjanjian di dasbor [perpanjangan Perjanjian](https://docs.aws.amazon.com//marketplace/latest/userguide/agreements-renewals-dashboard.html).

**catatan**  
 Untuk [DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity), jika Anda menemukan aspek penargetan Akun AWS dalam akun dari aturan penargetan untuk penawaran itu, itu adalah penawaran pribadi. Jika tidak ada aspek penargetan Akun AWS dalam akun dari aturan penargetan untuk penawaran itu, itu adalah penawaran umum.

## Berlangganan antrian Amazon SQS ke topik Amazon SNS
<a name="subscribing-sqs-queue-to-sns-topic"></a>

Sebaiknya berlangganan antrian Amazon SQS ke topik SNS yang disediakan. *Untuk petunjuk mendetail tentang cara membuat antrean SQS dan berlangganan antrian ke topik, lihat Berlangganan [antrian Amazon SQS ke topik Amazon SNS di Panduan Pengembang Layanan Pemberitahuan Sederhana Amazon](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html).*

**catatan**  
Anda hanya dapat berlangganan topik AWS Marketplace SNS dari yang Akun AWS digunakan untuk menjual produk. Namun, Anda dapat meneruskan pesan ke akun lain. Untuk informasi selengkapnya, lihat [Mengirim pesan Amazon SNS ke antrean Amazon SQS di akun lain di Panduan Pengembang](https://docs.aws.amazon.com/sns/latest/dg/sns-send-message-to-sqs-cross-account.html) Layanan Pemberitahuan *Sederhana Amazon*.

### Polling antrian SQS untuk pemberitahuan
<a name="polling-the-sqs-for-notifications"></a>

Setelah Anda berlangganan antrian SQS Anda ke topik SNS, pesan disimpan dalam SQS. Anda harus menentukan layanan yang terus-menerus melakukan polling antrian, mencari pesan, dan menanganinya sesuai dengan itu.