

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Prodotti basati su container su Marketplace AWS
<a name="container-based-products"></a>

**Importante**  
Il 1° marzo 2026, Marketplace AWS interromperà le implementazioni di grafici Quick Launch for Helm su Amazon EKS. Le distribuzioni esistenti continueranno a funzionare normalmente. Puoi comunque eseguire la distribuzione utilizzando comandi Helm standard o immagini di container su Amazon ECS.

Marketplace AWS supporta prodotti software che utilizzano contenitori Docker. I prodotti container sono costituiti da opzioni di distribuzione che consistono in un insieme di immagini di container e modelli di distribuzione combinati. Devi indicare almeno un'opzione di consegna per il tuo prodotto, fino a un massimo di quattro. Per ogni opzione di consegna, fornisci un set di immagini dei container, istruzioni per l'uso e collegamenti ai modelli di distribuzione per consentire ai clienti di lanciare tale opzione di consegna. Questo argomento fornisce informazioni sui prodotti basati su container su. Marketplace AWS

Marketplace AWS gli acquirenti visualizzano le opzioni di spedizione disponibili nelle pagine di dettaglio dei prodotti pubblicate a loro disposizione. Dopo aver sottoscritto il prodotto e scelto l'opzione di spedizione preferita, gli acquirenti visualizzano le informazioni e le istruzioni per il lancio e l'utilizzo del prodotto. Per le opzioni di consegna delle immagini del contenitore, gli acquirenti visualizzano i link ai modelli di distribuzione e all'immagine URLs del contenitore disponibili. Ricevono inoltre istruzioni su come estrarre le immagini dei singoli contenitori. Per quanto riguarda le opzioni di consegna delle carte Helm, gli acquirenti vedranno step-by-step le istruzioni per il lancio con Helm.

Per una panoramica dell'esperienza di acquisto, puoi fare riferimento a questo video: [Deploying Containers Marketplace AWS on Amazon ECS Clusters](https://www.youtube.com/watch?v=XaiUAiQQJtk) (3:34).

Puoi trovare, abbonarti e distribuire applicazioni Kubernetes di terze parti da qualsiasi cluster Kubernetes in qualsiasi ambiente. Marketplace AWS Puoi distribuire applicazioni Kubernetes di terze parti su Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) e in locale utilizzando Amazon EKS Anywhere (EKS AWS Fargate Anywhere). Puoi anche distribuirli su cluster Kubernetes autogestiti in locale o in Amazon Elastic Compute Cloud (Amazon). EC2

Puoi eseguire prodotti container Free and Bring Your Own License model (BYOL) su qualsiasi runtime compatibile con Docker.

**Topics**
+ [

## Utilizzo della guida
](#container-help)
+ [

# Guida introduttiva ai prodotti in container
](container-product-getting-started.md)
+ [

# Requisiti di prodotto basati su container per Marketplace AWS
](container-product-policies.md)
+ [

# Prezzi dei prodotti container per Marketplace AWS
](pricing-container-products.md)
+ [

# Integrazioni di fatturazione, misurazione e licenza dei prodotti container
](container-products-billing-integration.md)
+ [

# Notifiche Amazon SNS per prodotti container
](container-notification.md)

## Utilizzo della guida
<a name="container-help"></a>

[Per assistenza con i tuoi prodotti container, contatta il tuo partner di sviluppo aziendale Marketplace AWS o il team Seller Operations.Marketplace AWS](https://aws.amazon.com/marketplace/management/contact-us/)

# Guida introduttiva ai prodotti in container
<a name="container-product-getting-started"></a>

In qualità di Marketplace AWS venditore, puoi creare prodotti software basati su container. I prodotti container sono costituiti da opzioni di consegna che consistono in un insieme di immagini di container e modelli di distribuzione combinati. L'argomento seguente mostra come iniziare a utilizzare i prodotti container.
+ [Ciclo di vita del prodotto](#container-product-lifecycle)
+ [Prerequisiti](#container-prereq)
+  [Fase 1: Crea l'ID e il codice prodotto per il prodotto in contenitore](#create-initial-container-product) 
+ [Passaggio 2: crea un'inserzione iniziale](#container-initial-listing)
+ [Passaggio 3: aggiungi una versione iniziale del prodotto](#container-add-version-gs)
+ [Fase 4: (Solo per i prodotti a pagamento) Integra la misurazione o la determinazione dei prezzi contrattuali](#getting-started-integrate-metering)
+ [Fasi successive](#getting-started-integrate-metering)
+ [Il prodotto container esegue la scansione per rilevare eventuali problemi di sicurezza](#container-security)

## Ciclo di vita del prodotto
<a name="container-product-lifecycle"></a>

Quando crei un prodotto in Marketplace AWS, questo viene inizialmente pubblicato con una visibilità limitata in modo che gli account nell'elenco dei prodotti consentiti possano vederlo, incluso l'account che ha creato il prodotto. Quando sei pronto, puoi pubblicarlo nel Marketplace AWS catalogo per consentire agli acquirenti di abbonarsi e acquistare il tuo prodotto.

Nella pagina [del prodotto Server](https://aws.amazon.com/marketplace/management/products/server), puoi visualizzare l'elenco dei tuoi prodotti. A seconda della fase in cui si trova, il prodotto avrà uno dei seguenti stati.
+ **Staging**: un prodotto incompleto per il quale stai ancora aggiungendo informazioni. Al primo **salvataggio e uscita** dall'esperienza self-service, la richiesta di modifica andata a buon fine crea un prodotto non pubblicato con le informazioni relative ai passaggi completati che hai inviato. Da questo stato, puoi continuare ad aggiungere informazioni al prodotto o modificare i dettagli già inviati tramite le richieste di modifica.
+ **Limitato**: un prodotto è completo dopo essere stato inviato al sistema e dopo aver superato tutte le convalide previste dal sistema. Quindi il prodotto viene rilasciato allo stato **Limitato**. A questo punto, il prodotto ha una pagina prodotto accessibile solo al tuo account e alle persone che hai inserito nell'elenco. Puoi testare il prodotto tramite la pagina dei dettagli. Per ulteriori informazioni o assistenza, contatta il team [Operativo Marketplace AWS del venditore](https://aws.amazon.com/marketplace/management/contact-us/).
+ **Pubblico**: quando sei pronto a pubblicare il prodotto in modo che gli acquirenti possano visualizzarlo e abbonarsi al prodotto, utilizzi la richiesta di modifica della **visibilità dell'aggiornamento**. Questa richiesta avvia un flusso di lavoro per il team Operativo del Marketplace AWS venditore per esaminare e verificare il prodotto rispetto alle AWS politiche. Dopo l'approvazione del prodotto e l'elaborazione della richiesta di modifica, il prodotto viene spostato dallo stato **Limitato** a **Pubblico**. Per informazioni sulle AWS linee guida, consulta[Requisiti di prodotto basati su container per Marketplace AWS](container-product-policies.md).
+ **Limitato**: se desideri impedire ai nuovi utenti di abbonarsi al tuo prodotto, puoi limitare il prodotto utilizzando la richiesta di modifica della **visibilità dell'aggiornamento**. Lo stato **con restrizioni** significa che gli utenti esistenti nella lista consentita possono continuare a utilizzare il prodotto. Tuttavia, il prodotto non sarà più visibile al pubblico né sarà disponibile per i nuovi utenti. 

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

Prima di iniziare, è necessario completare i seguenti prerequisiti:

1. Accedere e utilizzare il. [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/) Questo è lo strumento che utilizzi per registrarti come venditore e gestire i prodotti su cui vendi Marketplace AWS. Per ulteriori informazioni, consulta [Portale di gestione Marketplace AWS](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html#management-portal).

1. Registrati come venditore e invia i tuoi dati fiscali e bancari. Per ulteriori informazioni, consulta [Procedura di registrazione](registration-process.md).

1. Crea almeno un contenitore in Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) o. AWS Fargate Assicurati di disporre dei link per le immagini associate.

1. Pianifica come creerai e integrerai il tuo prodotto contenitore Marketplace AWS.

   Ti consigliamo di pianificare la tua strategia in materia di prezzi, diritti e contatori con largo anticipo rispetto alla pubblicazione pubblica del prodotto.
   + Per informazioni sui requisiti per i prodotti basati su contenitori, consulta. [Requisiti di prodotto basati su container per Marketplace AWS](container-product-policies.md)
   + Per informazioni sull'impostazione dei prezzi del prodotto, consulta. [Prezzi dei prodotti container per Marketplace AWS](pricing-container-products.md)
   + Per informazioni sulla misurazione personalizzata per il prodotto a pagamento basato su container, consulta. [Misurazione oraria e personalizzata con AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products)

## Panoramica: crea un prodotto contenitore
<a name="create-container-product"></a>

La creazione di un prodotto contenitore prevede i seguenti passaggi:

1. [Fase 1: Crea l'ID e il codice prodotto per il prodotto in contenitore](#create-initial-container-product)

1. [Passaggio 2: crea un'inserzione iniziale](#container-initial-listing)

1. [Passaggio 3: aggiungi una versione iniziale del prodotto](#container-add-version-gs)

1. [Fase 4: (Solo per i prodotti a pagamento) Integra la misurazione o la determinazione dei prezzi contrattuali](#getting-started-integrate-metering)

1. [Aggiorna la visibilità del prodotto](#container-product-visibility)

Per informazioni sul ciclo di vita del prodotto, consulta. [Ciclo di vita del prodotto](#container-product-lifecycle)

## Fase 1: Crea l'ID e il codice prodotto per il prodotto in contenitore
<a name="create-initial-container-product"></a>

Per iniziare con un prodotto contenitore, devi creare un ID prodotto e un record di codice del prodotto in Marketplace AWS. L'ID del prodotto viene utilizzato per tracciare il prodotto durante tutto il suo ciclo di vita.

Utilizza la seguente procedura per creare un nuovo prodotto contenitore in e generare Portale di gestione Marketplace AWS l'ID del prodotto.

**Nota**  
Questo processo crea anche una chiave pubblica per il contenitore da abbinare al prodotto.

**Per creare l'ID del prodotto del contenitore**

1. Apri un browser Web e accedi a [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Dalla barra dei menu, seleziona **Prodotto** e scegli **Server**.

1. Scegli **Crea prodotto server**, quindi scegli **Contenitore**.

1. Genera un ID e un codice del prodotto del contenitore.
**Nota**  
(Facoltativo) Puoi etichettare il prodotto per l'autorizzazione basata su tag. Per ulteriori informazioni, consulta [Tagging delle risorse AWS](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html).

1. Scegli **Continua** per continuare a creare il tuo prodotto.

## Passaggio 2: crea un'inserzione iniziale
<a name="container-initial-listing"></a>

Dopo aver generato l'ID del prodotto, il codice del prodotto e la chiave pubblica, utilizzerai una procedura guidata per creare un'offerta iniziale.

1. Fornisci informazioni sul prodotto per l'elenco dei prodotti.

1. Determina il modello di prezzo per il tuo prodotto.
**Nota**  
Per ulteriori informazioni, consulta i [prezzi dei prodotti Container](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html).
**Nota**  
Per i prodotti a pagamento, il prezzo del prodotto partirà da 0,01 USD per consentire a te e al team operativo Marketplace AWS del venditore di testare il prodotto senza incorrere in costi elevati. Fornirai il prezzo effettivo quando lo renderai pubblico.

1. Fornisci ulteriori informazioni sull'offerta, tra cui una politica di rimborso, l'EULA e la disponibilità dell'offerta.

1. Aggiungi un repository iniziale per il tuo prodotto contenitore.

1. Scegli **Invia** nell'ultimo passaggio per spostare il prodotto in Visibilità limitata.
**Nota**  
Il prodotto contenitore viene inizialmente creato con una versione segnaposto. Aggiungerai la versione finale quando il prodotto avrà una visibilità limitata. 

## Passaggio 3: aggiungi una versione iniziale del prodotto
<a name="container-add-version-gs"></a>

Il prodotto potrebbe avere diverse versioni nel corso del suo ciclo di vita. Ogni versione ha un set di immagini del contenitore specifiche per quella versione. Per aggiungere una versione iniziale del prodotto, consulta[Aggiungere una nuova versione del prodotto in contenitore su Marketplace AWS](container-add-version.md). 

## Fase 4: (Solo per i prodotti a pagamento) Integra la misurazione o la determinazione dei prezzi contrattuali
<a name="getting-started-integrate-metering"></a>

Per i prodotti basati su container con prezzi di utilizzo, puoi utilizzare sia [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)per verificare il diritto all'uso del prodotto sia per misurare l'utilizzo per la fatturazione. È necessario misurare il modello di prezzo creato al momento dell'impostazione delle informazioni sui prezzi. Per ulteriori informazioni, consulta [Misurazione oraria e personalizzata con AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products).

### Contract pricing
<a name="container-integrate-LM"></a>

Per i prodotti basati su container con prezzi contrattuali, è possibile utilizzare il AWS License Manager per associare le licenze al prodotto. 

Per ulteriori informazioni sull'integrazione con, consulta. AWS License Manager[Prezzi contrattuali per prodotti in container con AWS License Manager](container-license-manager-integration.md)

## Fase 5: Aggiornare la visibilità del prodotto
<a name="container-product-visibility-allowlist"></a>

Quando crei un prodotto in Marketplace AWS, questo viene inizialmente pubblicato con visibilità limitata in modo che gli account inclusi nell'elenco dei prodotti consentiti possano vederlo, incluso l'account che ha creato il prodotto. Puoi aggiornare la visibilità del prodotto per consentire agli acquirenti di abbonarsi e acquistare il prodotto. In alternativa, puoi aggiornare l'elenco dei prodotti consentiti da aggiungere Account AWS. Questo argomento mostra come gestire gli acquirenti in cui possono visualizzare il tuo prodotto. Marketplace AWS

Per ulteriori informazioni sulla visibilità e sul ciclo di vita del prodotto, consulta. [Ciclo di vita del prodotto](#container-product-lifecycle)

**Topics**
+ [

### Aggiorna la visibilità del prodotto
](#container-product-visibility)
+ [

### Aggiornamento della lista consentita di Account AWS IDs
](#container-update-allowlist)

### Aggiorna la visibilità del prodotto
<a name="container-product-visibility"></a>

**Per aggiornare la visibilità**

1. Apri l' Portale di gestione Marketplace AWS indirizzo[https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/), quindi accedi al tuo Account venditore.

1. Vai alla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), nella scheda **Prodotto server corrente**, seleziona il prodotto basato su container che desideri modificare.

1. **Dal menu a discesa **Richiedi modifiche**, scegli Aggiorna visibilità.**
**Nota**  
Puoi richiedere che il prodotto venga spostato dallo stato **Limitato** allo stato **Pubblico** utilizzando questa richiesta di modifica. Tuttavia, la richiesta di modifica deve essere sottoposta a una procedura di approvazione del team di Marketplace AWS Seller Operations per essere spostata in **Pubblica**.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. Quando la richiesta viene completata, lo stato diventa **Riuscito**.

### Aggiornamento della lista consentita di Account AWS IDs
<a name="container-update-allowlist"></a>

Puoi modificare l'elenco di utenti Account AWS IDs che possono visualizzare il prodotto in uno stato limitato. Gli account autorizzati mostrano il badge Limited accanto alla versione del prodotto nella pagina dei dettagli del prodotto.

1. Apri l' Portale di gestione Marketplace AWS indirizzo [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna elenco consentito**. Viene visualizzato l'elenco corrente degli account consentiti.

1. Nel Account AWS campo **Allowlist**, inserisci Account AWS IDs e separali usando una virgola.

1. Scegli **Invia** per inviare la tua richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.**

## Fasi successive
<a name="container-next-steps"></a>

Dopo aver creato un prodotto contenitore, puoi utilizzare le informazioni contenute nei seguenti argomenti per configurarlo e gestirlo:
+ [Aggiornamento delle informazioni sul prodotto per il prodotto in contenitore su Marketplace AWS](update-container-product-info.md)
+ [Aggiungere una nuova versione del prodotto in contenitore su Marketplace AWS](container-add-version.md)
+ [Gestione dei prezzi dei prodotti container su Marketplace AWS](container-pricing.md)
+ [Aggiornamento della disponibilità dei prodotti container per paese in Marketplace AWS](container-update-offer-avail-country.md)
+ [Aggiornamento del contratto di licenza con l'utente finale (EULA) per i prodotti container su Marketplace AWS](container-update-eula.md)
+ [Test e rilascio del prodotto in container su Marketplace AWS](test-release-product.md)

## Il prodotto container esegue la scansione per rilevare eventuali problemi di sicurezza
<a name="container-security"></a>

Quando crei una richiesta di modifica per aggiungere una nuova versione al tuo prodotto contenitore, eseguiamo la scansione delle immagini del contenitore incluse in quella nuova versione e verifichiamo la presenza di vulnerabilità di sicurezza. A tale scopo, eseguiamo una scansione layer-by-layer statica dell'immagine. Se rileviamo vulnerabilità critiche con vettori di rischio sfruttabili da remoto, ti forniamo un elenco dei problemi rilevati. Ti consigliamo vivamente di eseguire la tua analisi di sicurezza utilizzando uno scanner di immagini per container comeClair,, TwistlockAqua Security, o Trend Micro per evitare ritardi nel processo di acquisizione e pubblicazione. 

La scelta dell'immagine di base per la creazione delle immagini del contenitore può avere un'influenza significativa sul profilo di sicurezza dell'immagine finale. Se scegliete un'immagine di base che presenta già vulnerabilità critiche note, queste verranno contrassegnate a causa del livello base, anche se i livelli del software applicativo sono puliti. Ti consigliamo di verificare di iniziare con un contenitore di base privo di vulnerabilità prima di creare le immagini e inviarle. Marketplace AWS

# Aggiornamento delle informazioni sul prodotto per il prodotto in contenitore su Marketplace AWS
<a name="update-container-product-info"></a>

Dopo aver creato l'ID del prodotto e impostato il prezzo, puoi modificare le informazioni sul prodotto, incluso ciò che i clienti vedranno sul prodotto in confezione nel Marketplace AWS. Ad esempio, se una nuova versione modifica la descrizione o i punti salienti del prodotto, puoi modificare le informazioni sul prodotto con i nuovi dati. Puoi anche aggiornare altre informazioni sul prodotto, tra cui il titolo del prodotto, la descrizione dello SKU, le categorie, le parole chiave e altro. La procedura seguente descrive la creazione dei dettagli del prodotto.

**Per creare o aggiornare i dettagli del prodotto in contenitore**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Seleziona **Server** dal menu **Prodotti**. 

1. Nella scheda **Prodotti server**, seleziona il prodotto che desideri modificare.

1. Dal menu a discesa **Richiedi modifiche**, scegli **Aggiorna le informazioni sul prodotto**.

1. Aggiorna uno dei seguenti campi che desideri modificare:
   + **Titolo del prodotto**
   + **SKU**
   + **Breve descrizione**
   + **Descrizione lunga**
   + **URL dell'immagine del logo del prodotto**
   + **Caratteristiche salienti**
   + **Categorie di prodotti**
   + **Parole chiave**
   + **URL del video del prodotto**
   + **Risorse**
   + **Informazioni di supporto**
**Nota**  
L'immagine URLs deve trovarsi in un bucket Amazon S3 accessibile al pubblico. Per ulteriori dettagli sul formato del logo, consulta. [Requisiti relativi al logo dell'azienda e del prodotto](product-submission.md#seller-and-product-logos)

1. Seleziona **Invia**.

1. Verifica che la richiesta venga visualizzata nella scheda **Richieste** con lo stato **In corso di revisione**. Potrebbe essere necessario aggiornare la pagina per visualizzare la richiesta nell'elenco.

Puoi controllare lo stato della tua richiesta in qualsiasi momento dalla scheda **Richieste** della pagina [Prodotti server](https://aws.amazon.com/marketplace/management/products/server).

# Aggiungere una nuova versione del prodotto in contenitore su Marketplace AWS
<a name="container-add-version"></a>

In qualità di Marketplace AWS venditore, puoi aggiungere nuove versioni del tuo prodotto container, gestire le versioni e aggiornare le informazioni sulla versione. Il prodotto potrebbe avere diverse versioni nel corso del suo ciclo di vita. Ogni versione ha un set di immagini del contenitore specifiche per quella versione. I seguenti argomenti mostrano come gestire le versioni del prodotto per i prodotti in contenitore.

**Nota**  
Non puoi aggiungere una versione al prodotto finché non hai creato l'ID del prodotto e il prezzo del prodotto. Per ulteriori informazioni su questi passaggi, consulta[Fase 1: Crea l'ID e il codice prodotto per il prodotto in contenitore](container-product-getting-started.md#create-initial-container-product). 

**Topics**
+ [

## Fase 1: Aggiungere i repository
](#add-repositories)
+ [

## Passaggio 2: carica le immagini e gli artefatti dei contenitori nei repository
](#upload-resources)
+ [

## Passaggio 3: aggiungi una nuova versione al tuo prodotto contenitore
](#add-new-version)
+ [

## Passaggio 4: Aggiorna le informazioni sulla versione
](#container-product-updating-version)
+ [

## Limita una versione del tuo componente aggiuntivo Amazon EKS
](#restriciting-version-eks-addon)

## Fase 1: Aggiungere i repository
<a name="add-repositories"></a>

Le immagini dei contenitori e altri elementi del prodotto sono archiviati nei repository di. Marketplace AWS In genere, si crea un repository per ogni elemento necessario, ma il repository può archiviare più versioni dell'artefatto (con tag diversi). 

**Nota**  
Tutte le immagini nella distribuzione del prodotto devono utilizzare immagini provenienti dai repository. Marketplace AWS 

La procedura seguente descrive come aggiungere gli eventuali repository necessari. Marketplace AWS

**Per aggiungere repository**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Seleziona **Server** dal menu **Prodotti**.

1. Nella scheda **Prodotti server**, seleziona il prodotto che desideri modificare, quindi scegli **Aggiungi repository** dal menu a discesa **Richiedi modifiche**.

1. Inserisci il nome del repository che desideri creare. Se desideri creare più di un nuovo repository:
   + Scegli **Aggiungi nuovo repository** per ogni repository aggiuntivo.
   + Assegnagli un nome univoco. Il nome univoco che scegli deve essere presente in tutti i prodotti del tuo Account venditore.
**Nota**  
Il repository avrà questa struttura:`<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>`. Quando aggiungi elementi al repository (nella procedura seguente), riceveranno un tag e avranno questa struttura:. `<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>:<tag>`   
`repositoryID`È un ID interno per Marketplace AWS.
`sellerName`Si basa sul nome che hai creato per il tuo Account venditore. Quando il nome visualizzato del venditore genera un prefisso non valido `sellerName` per il repository, AWS Marketplace sostituisce automaticamente un UUID (Universally Unique Identifier) al posto del nome del venditore. Per modificare il prefisso UUID nel nome del tuo repository, contatta il team operativo di AWS Marketplace.
Il `respositoryName` è definito in questo passaggio.
`tag`Viene impostato quando si carica un artefatto nel repository.

1. Selezionare **Invia**.

**Nota**  
Puoi avere fino a 70 repository per prodotto.

Una nuova richiesta viene creata e mostrata nella scheda **Richieste**. Una volta completata, in pochi minuti, puoi iniziare ad aggiungere immagini dei contenitori e altri artefatti ai repository che hai creato.

## Passaggio 2: carica le immagini e gli artefatti dei contenitori nei repository
<a name="upload-resources"></a>

**Per caricare immagini e artefatti dei contenitori nei repository**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. **Dal menu **Prodotti**, scegli Server.**

1. Nella scheda **Prodotti server**, seleziona il prodotto che desideri modificare.

1. Scegli **Aggiungi repository** dal menu a discesa **Richiedi modifiche**.

1. Scegli **Visualizza i repository esistenti**.

1. Seleziona il repository in cui desideri caricare.

1. Seleziona **Visualizza comandi push** per aprire un elenco di istruzioni, inclusi i comandi che puoi usare per inviare immagini e Helm grafici dei Docker contenitori a quel repository. 

   Per informazioni generali su come inviare immagini di container e altri elementi ai repository, consulta [Pushing an image in](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html) *Amazon Elastic Container* Registry User Guide.
**Nota**  
Puoi utilizzare le seguenti operazioni API Amazon Elastic Container Registry (Amazon ECR) quando chiami oppure: `docker pull` `docker push`  
`DescribeImages`— Utilizzalo per esaminare i metadati relativi alle immagini in un repository.
`GetAuthorizationToken`— Utilizzalo per autenticarti prima di caricare gli artefatti nel repository, quindi usa i comandi or. `docker pull` `docker push`
`ListImages`— Utilizzatelo per visualizzare un elenco di immagini inserite.

1. Utilizzate i comandi elencati per inviare gli elementi necessari dal repository locale al repository del prodotto Marketplace AWS .
**Nota**  
I **tag** dati forniti nei `push` comandi vengono utilizzati per differenziare la versione dell'elemento che state caricando nel repository. Utilizzate un tag che abbia senso per la versione di cui fanno parte gli artefatti.

1. Ripeti l'operazione per ogni immagine o elemento del contenitore di cui hai bisogno nella tua versione.
**Nota**  
La tua versione può includere fino a 50 immagini o artefatti del contenitore in ciascuna opzione di consegna. Per ulteriori informazioni sulle opzioni di consegna, fare riferimento alla procedura seguente.

Dopo aver caricato gli artefatti, sei pronto per creare la versione del prodotto. 

**Nota**  
Le immagini dei contenitori vengono scansionate automaticamente per verificare se soddisfano i requisiti. [Requisiti di prodotto basati su container per Marketplace AWS](container-product-policies.md) Per ulteriori informazioni, consulta [Il prodotto container esegue la scansione per rilevare eventuali problemi di sicurezza](container-product-getting-started.md#container-security).

### Aggiungere una nuova opzione di consegna
<a name="add-delivery-option"></a>

Ogni versione del prodotto in contenitore richiederebbe un'opzione di consegna. L'opzione di consegna specifica le opzioni di distribuzione disponibili per l'acquirente. A seconda di una delle opzioni di consegna riportate di seguito, dovrai caricare gli artefatti appropriati nei repository.
+ Per un'opzione **Container image** delivery, carica tutte le immagini del contenitore necessarie per l'installazione del prodotto nel repository Amazon Elastic Container Registry (Amazon ECR) creato nella console. Marketplace AWS 
+ Per un'opzione di consegna tramite **Helmgrafico**, carica le immagini del Helm grafico e del contenitore nel repository Amazon ECR creato nella Marketplace AWS console.
+ Per un'opzione di distribuzione **aggiuntiva per la console Amazon EKS**, carica il Helm grafico e le immagini del contenitore nel repository Amazon ECR creato nella console. Marketplace AWS 

## Passaggio 3: aggiungi una nuova versione al tuo prodotto contenitore
<a name="add-new-version"></a>

**Nota**  
*Se ricevi errori durante l'aggiunta di una nuova versione al contenitore, consulta la [tabella Errori asincroni per l'aggiunta di una nuova versione](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version) nel documento di riferimento.AWS Marketplace Catalog API *

**Per aggiungere una nuova versione al prodotto contenitore**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Scegli **Server** dal menu **Prodotti**.

1. Nella scheda **Prodotti server**, seleziona il prodotto a cui desideri aggiungere una versione. Quindi scegli **Aggiungi nuova versione** dal menu a discesa **Richiedi modifiche**.

1. Nella pagina **Aggiungi nuova versione**, inserisci il **titolo della versione** e le **note di rilascio relative** alla tua versione.

1. Dopo aver inserito i dettagli della versione, il passaggio successivo consiste nell'aggiungere le opzioni di consegna. Le opzioni di consegna sono set di istruzioni e informazioni che gli acquirenti possono utilizzare per avviare il software dalla versione del prodotto in uso. Le opzioni di spedizione sono note *agli acquirenti come opzioni di evasione degli ordini*.
**Nota**  
Il prodotto può supportare più piattaforme con immagini di container diverse (ad esempio Kubernetes e Ubuntu distribuzioni). Puoi creare un'opzione di consegna per ogni modo in cui i clienti possono configurare il prodotto, fino a quattro opzioni di consegna per versione del prodotto.

   1. Se il prodotto dispone già di opzioni di spedizione in altre versioni, puoi utilizzare l'opzione esistente come modello per aggiungere un'opzione di spedizione alla nuova versione. In **Opzioni di spedizione**, scegli l'opzione di spedizione che desideri aggiungere dall'elenco. Puoi modificare l'opzione seguendo le istruzioni riportate nei passaggi seguenti.

   1. Per aggiungere una nuova opzione di spedizione, scegli **Nuova opzione di spedizione**. Dopo aver aggiunto un'opzione, segui le istruzioni riportate nei passaggi seguenti per configurarla.

1. Scegli un metodo di consegna per l'opzione di consegna. Il metodo di spedizione determina in che modo gli acquirenti lanceranno il tuo software.
   + Per un'opzione di consegna di **immagini Container**, fornisci i percorsi delle immagini dei container in un repository Amazon Elastic Container Registry (Amazon ECR) creato nella console. Marketplace AWS Gli acquirenti utilizzano i percorsi delle immagini del contenitore per avviare il software inserendo le immagini direttamente nei loro ambienti.
   + Per un'opzione di consegna **Helmdei grafici**, fornisci i percorsi dei Helm grafici in un repository Amazon ECR creato nella Marketplace AWS console. Gli acquirenti installano i Helm grafici nel loro ambiente di distribuzione per avviare il software.
   + Per un'opzione di distribuzione di **componenti aggiuntivi per la console Amazon EKS**, fornisci i percorsi dei Helm grafici in un repository Amazon ECR creato nella console. Marketplace AWS Gli acquirenti installano il contenitore utilizzando la console Amazon EKS o il componente aggiuntivo Amazon EKS nativo APIs per avviare il software. Per ulteriori informazioni, consulta [Componenti aggiuntivi Amazon EKS disponibili da Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html#workloads-add-ons-available-eks).

   1. Per aggiungere un'opzione di consegna di **immagini Container**, procedi nel seguente modo:

      1. In **Container images**, aggiungi l'URL Amazon ECR alle immagini del contenitore che contengono la versione software del prodotto.

      1. In **Titolo dell'opzione di consegna** e **Descrizione dell'opzione di distribuzione**, inserisci un titolo e una descrizione per questa opzione di consegna.

      1. In **Istruzioni per l'uso**, inserisci informazioni dettagliate per aiutare gli acquirenti a utilizzare il software dopo il lancio.

      1. In **Servizi supportati**, seleziona gli ambienti in cui gli acquirenti possono avviare il software.

      1. Nei **modelli di distribuzione**, aggiungi le risorse che gli acquirenti possono utilizzare per avviare il software. Inserisci un titolo e un URL della risorsa per ogni modello.

   1. Per aggiungere un'opzione di consegna basata su un **Helmgrafico**, procedi nel seguente modo:

      1. Nel **Helmgrafico**, aggiungi l'URL di Amazon ECR al Helm grafico che gli acquirenti installeranno nel loro ambiente di distribuzione per avviare il software.

      1. In **Container images**, aggiungi l'URL Amazon ECR alle immagini del contenitore che contengono la versione software del prodotto.

      1. In **Titolo dell'opzione di consegna** e **Descrizione dell'opzione di distribuzione**, inserisci un titolo e una descrizione per questa opzione di consegna.

      1. In **Istruzioni per l'uso**, inserisci informazioni dettagliate per aiutare gli acquirenti a utilizzare il software dopo il lancio.

      1. In **Servizi supportati**, seleziona gli ambienti in cui gli acquirenti possono avviare il software.

      1. *Facoltativo:* nel **nome della Helm release**, inserisci il nome dello spazio dei Kubernetes nomi in cui verrà Helm installato il grafico.

      1. *Facoltativo:* nello spazio **dei nomi di Helm installazione**, inserisci il nome della Helm versione che verrà utilizzata dal comando. `helm install`

      1. *Facoltativo:* nel **nome dell'account di Kubernetes servizio**, inserisci il nome dell'account di Kubernetes servizio a cui verrà utilizzato per la connessione a AWS Identity and Access Management (IAM). L'account Kubernetes di servizio chiama AWS servizi come le licenze o la misurazione.

      1. In **Override parameters**, immettete i parametri che verranno utilizzati nei comandi Helm CLI che avviano il software. Questi parametri consentono agli acquirenti di sostituire i valori predefiniti forniti. È previsto un limite di 15 parametri quando si utilizza la console di Marketplace AWS gestione, ma non vi è alcun limite quando si utilizza la AWS Marketplace Catalog API. Per ulteriori informazioni, consulta [Aggiungere una nuova versione a un prodotto basato su contenitori](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version).
**Nota**  
Alcuni **parametri Override** sono obbligatori. I prodotti Amazon EKS Anywhere richiedono un **parametro Override** per la licenza segreta con un `DefaultValue` di`"${AWSMP_LICENSE_SECRET}"`. Per i prodotti a pagamento, devi fornire un **parametro Override** per la configurazione dell'account di servizio con il `DefaultValue` comando of. `"${AWSMP_SERVICE_ACCOUNT}"`

      1. Scegli **Nascondi password e segreti** per mascherare le informazioni sensibili nelle console, negli strumenti da riga di comando e. APIs Per ulteriori informazioni, consultate la documentazione relativa ai `NoEcho` parametri in [Parametri](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) nella Guida per l'*AWS CloudFormation utente*.

   1. Per aggiungere un'opzione di distribuzione **aggiuntiva per la console Amazon EKS**, assicurati che gli artefatti siano conformi a[Requisiti per i prodotti aggiuntivi Amazon EKS](container-product-policies.md#publishing-eks-add-on), quindi esegui i seguenti passaggi:
**Nota**  
È supportata una sola opzione di distribuzione del componente aggiuntivo Amazon EKS per versione. Non puoi aggiungere una nuova versione finché la versione corrente con cui stai lavorando non viene pubblicata sulla console Amazon EKS.

      1. Nel **Helmgrafico**, aggiungi l'URL di Amazon ECR al Helm grafico che gli acquirenti installeranno nel loro ambiente di distribuzione per avviare il software.

      1. In **Container images**, aggiungi l'URL Amazon ECR alle immagini del contenitore che contengono la versione software del prodotto. Assicurati che tutte le immagini all'interno del Helm grafico siano elencate.

      1. In **Titolo dell'opzione di consegna** e **Descrizione dell'opzione di distribuzione**, inserisci un titolo e una descrizione per questa opzione di consegna.

      1. In **Visibilità**, mantieni **selezionato il valore predefinito Limitato**.

      1. In **Nome del componente aggiuntivo**, inserisci un nome univoco per questo componente aggiuntivo. Il nome del componente aggiuntivo che inserisci verrà aggiunto al nome del venditore mentre verrà visualizzato nella console Amazon EKS.

      1. In Versione **aggiuntiva, inserisci la versione** del componente aggiuntivo che sarà visibile durante l'installazione o l'aggiornamento di questo componente aggiuntivo. Segui il formato. `major.minor.patch`

      1. In **Tipo di componente aggiuntivo**, seleziona una categoria per il tuo componente aggiuntivo dall'elenco a discesa.

      1. In **KubernetesVersione**, seleziona tutte le Kubernetes versioni supportate dal componente aggiuntivo.

      1. In **Architettura**, seleziona le architetture di piattaforma supportate dal componente aggiuntivo. Le opzioni sono **AMD64** e **ARM64**. Ti consigliamo di supportare entrambe le architetture per massimizzare la compatibilità. Se il componente aggiuntivo non supporta ARM64 i dispositivi, è necessario specificare una data prevista per l'aggiunta del supporto prima che il prodotto possa essere pubblicato in tutti gli spot pubblicitari. Regioni AWS

      1. In **Namespace**, inserisci uno spazio dei Kubernetes nomi univoco in cui verrà installato il componente aggiuntivo. I `kube-public` namespace `default``kube-system`, e non sono supportati per l'installazione di componenti aggiuntivi di terze parti.

      1. In **Environment Override parameters**, puoi selezionare fino a 2 parametri di ambiente dal framework aggiuntivo Amazon EKS. Puoi mappare i nomi dei parametri dai tuoi values.yaml a queste variabili di ambiente, che sono e. `${AWS_REGION}` `${AWS_EKS_CLUSTER_NAME}`

1. Per aggiungere opzioni di consegna aggiuntive, scegli **Nuova opzione di consegna** e ripeti le istruzioni nei passaggi precedenti per configurarle.

1. Seleziona **Invia**.

## Passaggio 4: Aggiorna le informazioni sulla versione
<a name="container-product-updating-version"></a>

Dopo aver creato una versione, può essere utile fornire informazioni aggiornate agli acquirenti modificando le informazioni associate alla versione. Ad esempio, se prevedi di limitare la versione 1.0 dopo il rilascio della versione 1.1, puoi aggiornare la descrizione della versione 1.0 per indirizzare gli acquirenti alla versione 1.1. Fornisci la data in cui la versione 1.0 sarà soggetta a restrizioni. Le informazioni sulla versione vengono aggiornate da Portale di gestione Marketplace AWS.

**Per aggiornare le informazioni sulla versione**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Seleziona **Server** dal menu **Prodotti**. 

1. Nella scheda **Prodotti server**, seleziona il prodotto che desideri modificare.

1. Dal menu a discesa **Richiedi modifiche**, scegli **Aggiorna le informazioni sulla versione**.

1. Nella pagina **Aggiorna versione**, seleziona la versione che desideri aggiornare.

1. Effettua aggiornamenti alla versione selezionata. I campi disponibili per l'aggiornamento dipendono dallo stato della versione del prodotto o dell'opzione di consegna.

   1. Per tutte le versioni, puoi aggiornare le **note di rilascio**.

   1. Per le versioni che non sono ancora disponibili pubblicamente, puoi aggiornare il **titolo della versione**.

   1. Per le opzioni di consegna che non sono state limitate, puoi aggiornare i seguenti campi:
      + **Descrizione**
      + **Istruzioni per l'uso**
      + **Servizi supportati**

   1. Per le opzioni di consegna nelle versioni che non sono ancora disponibili pubblicamente, puoi aggiornare i seguenti campi:
      + **Titoli delle opzioni di consegna**
      + **Helmtabella** (solo per le opzioni di consegna della **Helmcarta**)
      + **Immagini di container**
      + **Risorse per l'implementazione**
      + **AddOn Nome**
      + **AddOn Versione**
      + **AddOn Tipo**
      + **HelmGrafico URI**
      + **CompatibleKubernetesVersions**
      + **SupportedArchitectures**
      + **Spazio dei nomi**
      + **EnvironmentOverrideParameters**

   1. Per le opzioni di consegna nelle versioni disponibili pubblicamente, puoi effettuare l'aggiornamento **SupportedArchitectures**.

1. Seleziona **Invia**.

1. Verifica che la richiesta venga visualizzata nella scheda **Richieste** con lo stato **In corso di revisione**.

Puoi controllare lo stato della tua richiesta in qualsiasi momento dalla scheda **Richieste** della pagina [Prodotti server](https://aws.amazon.com/marketplace/management/products/server).

## Limita una versione del tuo componente aggiuntivo Amazon EKS
<a name="restriciting-version-eks-addon"></a>

Per limitare una versione del tuo prodotto container pubblicata come componente aggiuntivo, contatta il team Marketplace AWS operativo utilizzando il modulo di contatto in fondo alla pagina. [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/)

# Gestione dei prezzi dei prodotti container su Marketplace AWS
<a name="container-pricing"></a>

In qualità di Marketplace AWS venditore, puoi gestire e aggiornare i prezzi dei prodotti container. Per i prodotti container, puoi pubblicare prodotti gratuiti, prodotti Bring Your Own License model (BYOL) e prodotti a pagamento per Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) e. AWS Fargate Puoi impostare un solo prezzo per prodotto. Puoi aggiungere o aggiornare le dimensioni dei prezzi. A seconda del modello di prezzo, puoi aggiungere dimensioni contrattuali e di utilizzo. Puoi anche aggiornare i termini di prezzo o la politica di rimborso. Per ulteriori informazioni, consultare le sezioni indicate di seguito.

 Per ulteriori informazioni sui modelli di prezzo dei prodotti container Marketplace AWS, consulta[Prezzi dei prodotti container per Marketplace AWS](pricing-container-products.md).

**Topics**
+ [

## Aggiungere una dimensione di prezzo
](#container-add-pricing-dimensions)
+ [

## Aggiornamento delle informazioni sulla dimensione
](#container-update-dimensions-information)
+ [

## Aggiornamento delle condizioni di prezzo
](#container-update-pricing-terms)
+ [

## Aggiornamento della politica di rimborso di un prodotto
](#container-update-refund-policy)

## Aggiungere una dimensione di prezzo
<a name="container-add-pricing-dimensions"></a>

Puoi aggiungere una dimensione di prezzo al modello di prezzo utilizzato per la fatturazione del prodotto. Per ulteriori informazioni sui modelli di prezzo, consulta[Modelli di determinazione dei prezzi dei container](pricing-container-products.md#pricing-models-for-server-products).

**Nota**  
L'aggiunta di una dimensione tariffaria per un contratto con prezzi al consumo (ad esempio, pay-as-you-go prezzi per un utilizzo aggiuntivo) non è disponibile in Portale di gestione Marketplace AWS.  
Non è possibile modificare il modello di prezzo tra contratto, utilizzo e contratto con prezzi al consumo. Contatta il team [Operativo Marketplace AWS del venditore](https://aws.amazon.com/marketplace/management/contact-us/) per ricevere assistenza.

1. Apri Portale di gestione Marketplace AWS at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna le dimensioni dei prezzi**, quindi seleziona **Aggiungi dimensioni di prezzo**.

1. **A seconda del modello di prezzo, puoi aggiungere dimensioni del contratto o dimensioni di utilizzo fornendo informazioni per l'**identificatore dell'API**, **il nome visualizzato** e la descrizione.**

1. Scegli **Avanti** e inserisci i prezzi relativi alla dimensione del contratto.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.** 

## Aggiornamento delle informazioni sulla dimensione
<a name="container-update-dimensions-information"></a>

Puoi modificare le informazioni sulle dimensioni del prodotto. Per ulteriori informazioni sui modelli di prezzo, consulta[Modelli di determinazione dei prezzi dei container](pricing-container-products.md#pricing-models-for-server-products).

1. Apri Portale di gestione Marketplace AWS at [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna le dimensioni dei prezzi**, quindi seleziona **Aggiorna le informazioni sulla dimensione**.

1. Puoi aggiungere informazioni sulla dimensione fornendo le informazioni relative al **nome visualizzato** e alla **descrizione** della dimensione che desideri aggiornare.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.** 

## Aggiornamento delle condizioni di prezzo
<a name="container-update-pricing-terms"></a>

Puoi modificare i termini di prezzo del tuo prodotto. Le condizioni di prezzo potrebbero dover essere aggiornate se cambi i paesi in cui viene offerto il prodotto.

1. Apri l' Portale di gestione Marketplace AWS indirizzo [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco **Richiedi modifiche**, seleziona **Aggiorna offerta pubblica**, quindi seleziona **Aggiorna i termini di prezzo**.

1. I prezzi correnti sono precompilati e possono essere modificati. Puoi eliminare i prezzi correnti e aggiungere il nuovo prezzo. Ti consigliamo di controllare i prezzi richiesti prima di inviare la richiesta di revisione.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.**

**Nota**  
Se aumenti il prezzo di una dimensione utilizzando **Aggiorna i termini di prezzo**, non potrai aggiornare i prezzi per 90 giorni. Un aumento di prezzo blocca il prezzo per 90 giorni dal giorno in cui avvii la modifica. Questo blocco del prezzo è valido solo per un aumento di prezzo, non per una diminuzione del prezzo.

## Aggiornamento della politica di rimborso di un prodotto
<a name="container-update-refund-policy"></a>

Puoi aggiornare la politica di rimborso del tuo prodotto. Gli aggiornamenti alla politica di rimborso hanno effetto per tutti gli utenti. Per ulteriori informazioni, consulta [Rimborsi e cancellazioni in Marketplace AWS](refunds.md). 

1. Apri l' Portale di gestione Marketplace AWS indirizzo [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna offerta pubblica**, quindi seleziona **Aggiorna politica di rimborso**.

1. La politica di rimborso attuale è precompilata e può essere modificata. Puoi eliminare l'attuale politica di rimborso e aggiungere una nuova politica di rimborso. Ti consigliamo di esaminare la politica di rimborso che stai richiedendo prima di inviare la richiesta di revisione. L'invio della richiesta sovrascrive l'attuale politica di rimborso.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.** 

# Aggiornamento della disponibilità dei prodotti container per paese in Marketplace AWS
<a name="container-update-offer-avail-country"></a>

In qualità di Marketplace AWS venditore, puoi modificare i paesi in cui il tuo prodotto in contenitore può essere offerto e sottoscritto. Per ulteriori informazioni, consulta [Countries (Paesi)](regions-and-countries.md#product-countries). La procedura seguente mostra come aggiornare la disponibilità dei prodotti in container per paese.

1. Apri l' Portale di gestione Marketplace AWS indirizzo [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna offerta pubblica**, quindi seleziona **Aggiorna disponibilità per paese**.

1. Seleziona una delle seguenti opzioni: 
   + **Tutti i paesi**: disponibile in tutti i paesi supportati.
   + **Tutti i paesi con esclusioni**: disponibile in tutti i paesi supportati tranne in alcuni paesi.
   + **Solo Paesi consentiti nell'elenco**: gli acquirenti possono acquistare solo nei paesi specificati.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.** 

# Aggiornamento del contratto di licenza con l'utente finale (EULA) per i prodotti container su Marketplace AWS
<a name="container-update-eula"></a>

In qualità di Marketplace AWS venditore, puoi aggiornare il contratto di licenza con l'utente finale (EULA) per utilizzare l'EULA o un EULA personalizzato. [Contratto standard per Marketplace AWS](standardized-license-terms.md#standard-contracts) Gli aggiornamenti apportati all'EULA hanno effetto per i nuovi utenti che si abbonano al tuo prodotto e per i rinnovi dei prodotti. Per aggiornare l'EULA, utilizza la seguente procedura.

1. Apri l' Portale di gestione Marketplace AWS indirizzo [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) e accedi al tuo Account venditore.

1. Dalla pagina [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server), seleziona il prodotto contenitore che desideri modificare.

1. Dall'elenco a discesa **Richiedi modifiche**, seleziona **Aggiorna offerta pubblica**, quindi seleziona **Aggiorna l'EULA**.

1. Seleziona **Contratto standard Marketplace AWS o invia il** tuo EULA personalizzato. Per un EULA personalizzato, devi fornire il contratto da un bucket Amazon S3.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. **Una volta completata la richiesta, lo stato verrà aggiornato su Riuscito o **Non riuscito**.** 

# Aggiornamento della politica di rimborso per il prodotto basato su container il Marketplace AWS
<a name="update-container-refund-policy"></a>

In qualità di Marketplace AWS venditore, puoi impostare la politica di rimborso per il tuo prodotto basato su container. Se desideri modificare la politica di rimborso del tuo prodotto, puoi utilizzare **Aggiorna la politica di rimborso**. La procedura seguente mostra come aggiornare la politica di rimborso.

**Per aggiornare la politica di rimborso**

1. Apri l' Portale di gestione Marketplace AWS indirizzo[https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/), quindi accedi al tuo Account venditore.

1. Vai alla pagina [dei prodotti Server](https://aws.amazon.com/marketplace/management/products/server), quindi seleziona il prodotto che desideri modificare.

1. Dal menu a discesa **Richiedi modifiche**, scegli **Aggiorna l'offerta pubblica**, quindi **Aggiorna la politica di rimborso**.

1. I dettagli della politica di rimborso corrente sono forniti nella casella di testo e puoi modificarli. L'invio della richiesta sovrascrive l'attuale politica di rimborso.

1. Scegli **Invia** per inviare la richiesta di revisione.

1. Verifica che la scheda **Richieste** mostri lo **stato della richiesta** come **In corso di revisione**. Quando la richiesta viene completata, lo stato diventa **Riuscito**.

# Test e rilascio del prodotto in container su Marketplace AWS
<a name="test-release-product"></a>

Dopo aver aggiunto una nuova versione del prodotto in contenitore Marketplace AWS, puoi testarlo e poi rilasciarlo al pubblico. Questo argomento descrive i passaggi e i processi specifici necessari per testare e rilasciare il prodotto al pubblico.

**Topics**
+ [

## Opzioni di consegna relative all'immagine e al Helm grafico del contenitore
](#container-helm-delivery)
+ [

## Opzione di distribuzione aggiuntiva Amazon EKS
](#eks-addon-delivery)

## Opzioni di consegna relative all'immagine e al Helm grafico del contenitore
<a name="container-helm-delivery"></a>

Questa sezione fornisce indicazioni su come rilasciare l'immagine e il Helm grafico del contenitore.

La tua richiesta per una nuova versione viene creata e dovrebbe essere completata in pochi minuti. Puoi tenere traccia della richiesta dalla scheda **Richieste** della pagina dei **prodotti Server**. *Se ricevi errori durante il test o il rilascio del componente aggiuntivo, consulta la tabella Errori sincroni in [Aggiungere una nuova](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version) versione nella pagina di riferimento.AWS Marketplace Catalog API *

**Nota**  
Se il prodotto è attualmente impostato su una disponibilità limitata, solo gli acquirenti per cui il prodotto è disponibile possono accedere alla versione del prodotto. Se il prodotto è attualmente impostato sulla disponibilità pubblica, tutti Marketplace AWS gli acquirenti possono accedere alla versione del prodotto.

Se questa era la tua prima versione impostata, il prodotto è ora pronto per essere pubblicato.

## Opzione di distribuzione aggiuntiva Amazon EKS
<a name="eks-addon-delivery"></a>

Questa sezione fornisce indicazioni su come testare e rilasciare il componente aggiuntivo Amazon EKS.

**Testa il tuo componente aggiuntivo**
+ Dopo aver inviato il componente aggiuntivo, Marketplace AWS elabora la richiesta e lo pubblica in uno stato limitato per consentirne la convalida nel catalogo dei componenti aggiuntivi Amazon EKS. Puoi tenere traccia della richiesta dalla scheda **Richieste** della pagina dei prodotti **Server** nel. Portale di gestione Marketplace AWS I tempi di inserimento variano da 5 a 10 giorni lavorativi a seconda del volume di richieste che stiamo gestendo.

  Quando lo stato della tua richiesta è **In corso di revisione**, il componente aggiuntivo viene ancora pubblicato dal AWS team dal Marketplace AWS catalogo dei componenti aggiuntivi di Amazon EKS. **Richiedi la modifica dello stato in **Success** una volta che il componente aggiuntivo è stato pubblicato su Limited state.** Dopodiché puoi iniziare il test del tuo componente aggiuntivo.
+ Una volta che il componente aggiuntivo sarà disponibile, potrai trovarlo nella regione Asia Pacifico (Seoul) a scopo di test. Marketplace AWS si affida alla tua esperienza per verificare la funzionalità del tuo software. Per testare il tuo componente aggiuntivo, devi creare un cluster Amazon EKS nella regione Asia Pacifico (Seoul) nel tuo Account venditore in cui il componente aggiuntivo è nella lista consentita. [Per testare il componente aggiuntivo, segui queste istruzioni dettagliate.](https://aws.amazon.com/blogs/awsmarketplace/deploy-third-party-software-add-ons-aws-marketplace-amazon-eks-clusters/) Assicurati di eseguire il test su ogni Kubernetes versione supportata dal tuo software.
+ Se offri un prodotto a pagamento, crea un'offerta privata al seguente indirizzo interno Account AWS. Questi account aiutano a integrare il tuo software nella console Amazon EKS in tutte le pubblicità Regioni AWS.

  ```
  288092140294, 288092140294, 408202761791
  ```
+ Mantieni attivo il cluster di test con il componente aggiuntivo fino all' Marketplace AWS approvazione e alla pubblicazione della versione del componente aggiuntivo.
**Nota**  
Marketplace AWS non sosterrà i costi di AWS infrastruttura sostenuti durante il test del prodotto container sui cluster Amazon EKS. Puoi seguire i giusti meccanismi di dimensionamento per ridurre i nodi a un costo operativo minimo mentre verifichiamo i risultati dei test.

**Pubblica il tuo componente aggiuntivo**

Dopo aver convalidato il software tramite il cluster Amazon EKS come componente aggiuntivo, puoi inviare una richiesta per rilasciare la versione del tuo componente aggiuntivo Amazon EKS al pubblico utilizzando o. [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/) AWS Marketplace Catalog API

 Per ulteriori informazioni, consulta [Aggiornare la visibilità per un componente aggiuntivo Amazon EKS nel](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#update-delivery-option-visibility) documento *AWS Marketplace Catalog API di riferimento*.

Puoi tenere traccia della richiesta dalla scheda **Richieste** della pagina dei **prodotti Server** nel Portale di gestione Marketplace AWS. I tempi di ingestione possono variare.

# Requisiti di prodotto basati su container per Marketplace AWS
<a name="container-product-policies"></a>

Marketplace AWS mantiene i seguenti requisiti per tutti i prodotti e le offerte basati su container. Marketplace AWS Questi requisiti aiutano a promuovere un catalogo sicuro e affidabile per i nostri clienti. Incoraggiamo inoltre i venditori a verificare l'implementazione di controlli e protocolli aggiuntivi, se applicabili, per soddisfare le esigenze dei loro prodotti specifici.

Tutti i prodotti e i relativi metadati vengono esaminati una volta inviati per garantire che soddisfino o superino le politiche attuali Marketplace AWS . Queste politiche vengono aggiornate regolarmente per allinearsi alle linee guida sulla sicurezza in evoluzione. Marketplace AWS analizza continuamente i prodotti per verificare che le offerte esistenti continuino a soddisfare eventuali modifiche a questi requisiti. Se un prodotto non è conforme, Marketplace AWS contatterà il venditore per aggiornare il prodotto in modo che soddisfi i nuovi standard. In alcuni casi, i prodotti potrebbero essere temporaneamente resi non disponibili per i nuovi abbonati fino alla risoluzione dei problemi. Questo processo aiuta a mantenere la sicurezza e l'affidabilità della Marketplace AWS piattaforma per tutti gli utenti.

**Topics**
+ [

## Policy di sicurezza
](#container-security-requirements)
+ [

## Requisiti in materia di informazioni
](#container-customer-info-requirements)
+ [

## Requisiti di utilizzo del prodotto
](#container-usage-requirements)
+ [

## Requisiti di architettura
](#container-architecture-requirements)
+ [

## Requisiti della struttura del grafico di Helm
](#helm-chart-structure-requirements)
+ [

## Istruzioni per l'uso del prodotto in contenitore
](#container-product-usage-instructions)
+ [

## Requisiti per i prodotti aggiuntivi Amazon EKS
](#publishing-eks-add-on)

## Policy di sicurezza
<a name="container-security-requirements"></a>

 Tutti i prodotti basati su container devono rispettare i seguenti requisiti di sicurezza:
+ Le immagini dei container non devono contenere vulnerabilità note, malware o pacchetti software End-of-Life (EoL) e sistemi operativi.
+ I contenitori non devono richiedere AWS credenziali per accedere ai servizi. AWS Quando il prodotto deve accedere ai AWS servizi, è necessario utilizzare uno dei seguenti strumenti:
  + Ruoli IAM per gli account di servizio, per i carichi di lavoro di Amazon Elastic Kubernetes Service (Amazon EKS).
  + Ruoli IAM per le attività, per i carichi di lavoro di Amazon Elastic Container Service (Amazon ECS).
+ I prodotti basati su container devono richiedere solo i privilegi minimi per essere eseguiti. Per ulteriori informazioni, consulta [Sicurezza in Amazon Elastic Container Service](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/security.html) e [Sicurezza in Amazon EKS](https://docs.aws.amazon.com//eks/latest/userguide/security.html).
+ Per impostazione predefinita, le immagini dei contenitori devono essere configurate per l'esecuzione con privilegi non root.
+ I contenitori non devono contenere segreti codificati come password (anche con hash) per utenti e servizi di sistema, chiavi private, credenziali, ecc.
+ L'autenticazione in tutti i servizi in esecuzione all'interno del contenitore non deve utilizzare l'autenticazione basata su password, anche se la password viene generata, reimpostata o definita dall'utente all'avvio. Inoltre, non sono consentite password nulle e vuote.
+ Le immagini dei contenitori non devono includere livelli con architetture non supportate (ad esempio, metadati in-toto Attestation Framework).

## Requisiti in materia di informazioni
<a name="container-customer-info-requirements"></a>

 Tutti i prodotti basati su contenitori devono rispettare i seguenti requisiti in materia di informazioni per i clienti: 
+ Il software non deve raccogliere o esportare i dati dei clienti a insaputa del cliente e senza il suo consenso esplicito, ad eccezione di quanto richiesto da BYOL (Bring Your Own License). Le applicazioni che raccolgono o esportano i dati dei clienti devono seguire queste linee guida: 
  + La raccolta dei dati dei clienti deve essere self-service, automatizzata e sicura. Gli acquirenti non devono attendere che i venditori approvino l'implementazione del software. 
  + La raccolta dei dati dei clienti deve essere conforme ai tuoi accordi con AWS, a titolo esemplificativo ma non esaustivo, i [Termini e condizioni del AWS Marketplace, i Termini](https://aws.amazon.com/legal/seller-terms/) di [AWS servizio](https://aws.amazon.com/service-terms/), l'[Informativa AWS sulla privacy](https://aws.amazon.com/privacy/) e il [Contratto con il AWS cliente](https://aws.amazon.com/agreement/).
  + Le informazioni di pagamento non devono essere raccolte.

## Requisiti di utilizzo del prodotto
<a name="container-usage-requirements"></a>

 Tutti i prodotti basati su contenitori devono rispettare i seguenti requisiti di utilizzo del prodotto: 
+ I venditori possono pubblicare solo prodotti perfettamente funzionanti. Non sono consentiti prodotti beta o in versione provvisoria a scopo di prova o valutazione. Le edizioni Developer, Community e BYOL del software commerciale sono supportate se il venditore fornisce una versione equivalente a pagamento Marketplace AWS entro 90 giorni dalla fornitura dell'edizione gratuita.
+ Tutte le istruzioni per l'uso di un prodotto basato su container devono includere tutti i passaggi per la distribuzione di prodotti basati su contenitori. Le istruzioni di utilizzo devono fornire comandi e risorse di distribuzione che puntino alle immagini del contenitore corrispondenti su. Marketplace AWS
+ I prodotti basati su container devono includere tutte le immagini dei container di cui un abbonato ha bisogno per utilizzare il software. Inoltre, i prodotti basati su container non devono richiedere all'utente di avviare il prodotto utilizzando immagini esterne Marketplace AWS (ad esempio, immagini di contenitori provenienti da repository di terze parti).
+ I container e il relativo software devono essere implementabili in modalità self-service e non devono richiedere metodi o costi di pagamento aggiuntivi. Le applicazioni che richiedono dipendenze esterne per la distribuzione devono seguire queste linee guida:
  + Il requisito deve essere indicato nella descrizione o nelle istruzioni d'uso dell'elenco. Ad esempio, *questo prodotto richiede una connessione Internet per essere distribuito correttamente. I seguenti pacchetti vengono scaricati durante la distribuzione:.* <list of package> 
  + I venditori sono responsabili dell'uso e della garanzia della disponibilità e della sicurezza di tutte le dipendenze esterne. 
  + Se le dipendenze esterne non sono più disponibili, è necessario rimuovere anche il prodotto da Marketplace AWS . 
  + Le dipendenze esterne non devono richiedere metodi o costi di pagamento aggiuntivi.
+ I contenitori che richiedono una connessione continua a risorse esterne non sotto il controllo diretto dell'acquirente, ad esempio esterne APIs o Servizi AWS gestite dal venditore o da una terza parte, devono seguire queste linee guida:
  + Il requisito deve essere indicato nella descrizione o nelle istruzioni d'uso dell'inserzione. Ad esempio, *questo prodotto richiede una connessione Internet continua. I seguenti servizi esterni continui sono necessari per funzionare correttamente:.* <list of resources> 
  + I venditori sono responsabili dell'uso e della garanzia della disponibilità e della sicurezza di tutte le risorse esterne.
  + Se le risorse esterne non sono più disponibili, è necessario rimuovere anche Marketplace AWS il prodotto.
  + Le risorse esterne non devono richiedere metodi o costi di pagamento aggiuntivi e la configurazione della connessione deve essere automatizzata.
+ Il software e i metadati del prodotto non devono contenere un linguaggio che reindirizza gli utenti ad altre piattaforme cloud, prodotti aggiuntivi o servizi di upselling non disponibili su. Marketplace AWS
+ Se il prodotto è un componente aggiuntivo di un altro prodotto o di un altro prodotto ISV, la descrizione del prodotto deve indicare che estende le funzionalità dell'altro prodotto e che senza di essa l'utilità del prodotto è molto limitata. Ad esempio, *questo prodotto estende le funzionalità di e senza di esso, ha un'utilità molto limitata<product name>. Tieni presente che potrebbe essere necessaria una licenza propria per la piena funzionalità di questo elenco.* <product name>

## Requisiti di architettura
<a name="container-architecture-requirements"></a>

 Tutti i prodotti basati su container devono rispettare i seguenti requisiti di architettura: 
+ Le immagini del contenitore di origine per Marketplace AWS devono essere inviate al repository Amazon Elastic Container Registry (Amazon ECR) di proprietà di. Marketplace AWS Puoi creare questi repository nei prodotti Portale di gestione Marketplace AWS sotto server per ciascuno dei tuoi elenchi di prodotti in container.
+ Le immagini dei container devono essere basate su Linux.
+ I prodotti a pagamento basati su container devono poter essere distribuiti su Amazon [ECS, [Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) o. [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)
+ I prodotti a pagamento basati su container con prezzi contrattuali e un'integrazione con AWS License Manager devono essere distribuiti su Amazon EKS, Amazon ECS, Amazon EKS AWS Fargate Anywhere, Amazon ECS Anywhere, OpenShift Red Hat Service AWS on (ROSA), cluster Kubernetes autogestiti in locale o su Amazon Elastic Compute Cloud.
+ Per i prodotti cartografici Helm, i riferimenti alle immagini dei contenitori devono essere strutturati in base al supporto della distribuzione interregionale. [Requisiti della struttura del grafico di Helm](#helm-chart-structure-requirements)
+ Se il tuo prodotto basato su container richiede all'acquirente di distribuire un'Amazon Machine Image (AMI), deve essere un' AWS AMI gestita o un'AMI separata pubblicata in. Marketplace AWS Se pubblichi la tua AMI in Marketplace AWS, questa deve essere conforme a [Requisiti di prodotto basati su AMI per Marketplace AWS](product-and-ami-policies.md) e devi indicare che si tratta di un prodotto aggiuntivo, come richiesto nel[Politiche di utilizzo del prodotto](product-and-ami-policies.md#product-usage). Puoi valutare il tuo prodotto basato su AMI come BYOL perché è un'estensione della tua offerta basata su container. Marketplace AWS analizza i prodotti basati su AMI alla ricerca di vulnerabilità ed esposizioni comuni prive di patch () e requisiti di sicurezza. CVEs I tuoi acquirenti devono inoltre abbonarsi al tuo prodotto basato su AMI prima di implementarlo.

## Requisiti della struttura del grafico di Helm
<a name="helm-chart-structure-requirements"></a>

Tutti i prodotti cartografici Helm presentati Marketplace AWS devono rispettare i seguenti requisiti di struttura per garantire la regionalizzazione e l'implementazione corrette in tutte le regioni: AWS 
+ I riferimenti alle immagini dei contenitori devono essere definiti esclusivamente nel `values.yaml` file e non codificati in nessun altro file all'interno del diagramma Helm. Ciò consente di Marketplace AWS sostituire automaticamente questi riferimenti durante la replica del prodotto in diverse regioni.
+ Il `values.yaml` file deve utilizzare variabili per tutti i riferimenti alle immagini del contenitore.
+ Facoltativamente, puoi suddividerli `registry` e suddividerli `tag` in campi separati sullo stesso livello del repository per creare il riferimento dell'immagine.
+ I modelli Helm devono fare riferimento a queste variabili utilizzando la sintassi standard dei modelli Helm (ad esempio,). `{{ .Values.image.repository }}:{{ .Values.image.tag }}`
+ Evita di usare la logica condizionale nei modelli che aggirerebbe i riferimenti alle immagini definiti in. `values.yaml`
+ Quando testate il diagramma di Helm con AWS regioni diverse, assicuratevi che la modifica `values.yaml` corretta della regione aggiorni tutti i riferimenti alle immagini nelle risorse distribuite.

Marketplace AWS verifica che tutti i riferimenti alle immagini del contenitore siano definiti correttamente nel `values.yaml` file durante il processo di invio del prodotto. I prodotti che non soddisfano questi requisiti verranno rifiutati.

### Requisiti per i riferimenti alle immagini dei contenitori nei grafici Helm
<a name="helm-chart-best-practices"></a>

Di seguito vengono illustrati gli approcci per strutturare i riferimenti alle immagini dei contenitori nei grafici Helm:

**`values.yaml`(formato consigliato):**

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

**Nota**  
Consigliamo l'approccio sopra riportato per la struttura del vostro`values.yaml`, ma sono validi anche i metodi alternativi riportati di seguito.

**`values.yaml`(formato alternativo):**

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

**`values.yaml`(formato alternativo):**

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

**Nota**  
Per il modello di distribuzione, il formato seguente è l'unico formato valido disponibile.

**Modello di distribuzione:**

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

**Approccio errato (non utilizzare):**

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

### Possibili errori di convalida del grafico Helm
<a name="helm-chart-validation-errors"></a>

Durante il processo di invio del prodotto, Marketplace AWS esegue controlli di convalida sui prodotti cartografici Helm per garantire la conformità ai requisiti di riferimento delle immagini dei contenitori. Se la tua carta Helm non soddisfa questi requisiti, potresti riscontrare i seguenti errori di convalida:


| Errore | Spiegazione | 
| --- | --- | 
| INCOMPATIBLE\$1HELM\$1OBJECTS | Gli oggetti Helm specificati non sono supportati per i componenti aggiuntivi EKS. Per informazioni, consulta [Requisiti per i prodotti aggiuntivi Amazon EKS](#publishing-eks-add-on). | 
| INVALID\$1DEPENDENT\$1HELM\$1CHARTS | I grafici Helm dipendenti devono essere contenuti nella directory dei grafici principale e non devono provenire da fonti esterne. | 
| INVALID\$1HELM\$1SENSITIVE\$1CONFIG | Lo schema di configurazione non può contenere campi che raccolgono informazioni riservate. Gli schemi di configurazione non devono accettare password, chiavi API, certificati o segreti. Fornisci invece i campi per i nomi segreti di Kubernetes che i clienti creeranno separatamente. | 
| INVALID\$1HELM\$1CHART\$1IMAGES | [Tutte le immagini, incluse le dipendenze open source, devono essere inviate ai repository Marketplace AWS Amazon ECR creati tramite la richiesta Add Repository.](container-add-version.md#add-repositories) | 
| INVALID\$1HELM\$1UNDECLARED\$1IMAGES | [Tutti i riferimenti alle immagini del contenitore devono essere elencati esplicitamente nella richiesta Add Version.](container-add-version.md#add-new-version) | 
| INVALID\$1HELM\$1LINT | La convalida del grafico Helm non è riuscitahelm lint. Esegui helm lint localmente per identificare e risolvere problemi strutturali o sintattici. Usa la versione 3.19.0 Helm o successiva. | 
| INVALID\$1HELM\$1TEMPLATE | La convalida del grafico Helm non è riuscitahelm template. Il grafico non può essere reso in manifesti Kubernetes validi. Esegui il test localmente con helm template per identificare la sintassi o gli errori logici del modello. Usa la versione Helm 3.19.0 o successiva. | 
| MISSING\$1HELM\$1DEPLOYMENT\$1CONFIG | Il grafico Helm per un componente aggiuntivo Amazon EKS deve contenere una distribuzione o DaemonSet una risorsa. Amazon EKS richiede almeno uno di questi tipi di carico di lavoro per la gestione aggiuntiva del ciclo di vita. Per informazioni, consulta [Requisiti per i prodotti aggiuntivi Amazon EKS](#publishing-eks-add-on). | 
| INCOMPATIBLE\$1CONFIGURATION\$1SCHEMA\$1VERSION | La versione dello schema JSON in non è supportata. aws\$1mp\$1configuration\$1schema.json Vedi [Requisiti dello schema](#schema-requirements) per le versioni dello schema supportate. | 
| INVALID\$1IMAGE\$1REFERENCE | Tutte le immagini devono essere definite come variabili values.yaml e referenziate utilizzando la sintassi del modello Helm, come descritto in. [Requisiti della struttura del grafico di Helm](#helm-chart-structure-requirements) | 
| MISSING\$1VALUES\$1IMAGE\$1REFERENCE | Ogni riferimento all'immagine del contenitore deve avere una voce corrispondente in. values.yaml | 
| MISSING\$1IMAGE\$1TAG | I riferimenti alle immagini del contenitore values.yaml devono includere valori di tag espliciti o utilizzare di default la versione del grafico daChart.yaml. | 

## Istruzioni per l'uso del prodotto in contenitore
<a name="container-product-usage-instructions"></a>

Quando crei le istruzioni per l'uso del tuo prodotto in contenitore, segui i passaggi e le istruzioni riportate in[Creazione di AMI e istruzioni per l'uso dei prodotti in container per Marketplace AWS](ami-container-product-usage-instructions.md). 

### Istruzioni per l'uso di Helm chart
<a name="helm-chart-usage-instructions"></a>

Quando si creano istruzioni d'uso per i prodotti Helm chart:
+ Documenta in modo chiaro tutti i parametri configurabili `values.yaml` del file, inclusi i parametri del repository di immagini, dei tag e del registro.
+ Fornisci esempi su come sovrascrivere questi parametri durante l'installazione del grafico Helm.
+ Non chiedete agli utenti di modificare file diversi `values.yaml` o di utilizzare `--set` parametri durante l'installazione del grafico.
+ Includi informazioni su come il prodotto gestisce la regionalizzazione delle immagini dei contenitori.

## Requisiti per i prodotti aggiuntivi Amazon EKS
<a name="publishing-eks-add-on"></a>

Un componente aggiuntivo Amazon EKS è un software che fornisce funzionalità operative alle Kubernetes applicazioni ma non è specifico per l'applicazione. Ad esempio, un componente aggiuntivo Amazon EKS include agenti o Kubernetes driver di osservabilità che consentono al cluster di interagire con AWS le risorse sottostanti per il networking, l'elaborazione e lo storage.

In qualità di venditore di prodotti container, puoi scegliere tra diverse opzioni di implementazione, tra cui Amazon EKS. Puoi pubblicare una versione del tuo prodotto come Marketplace AWS componente aggiuntivo nel catalogo dei componenti aggiuntivi Amazon EKS. Il componente aggiuntivo viene visualizzato nella console Amazon EKS accanto ai componenti aggiuntivi gestiti da AWS e da altri fornitori. I tuoi acquirenti possono implementare il tuo software come componente aggiuntivo con la stessa facilità con cui utilizzano gli altri componenti aggiuntivi.

Per ulteriori informazioni, consulta [Componenti aggiuntivi di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html) nella *Guida per l'utente di Amazon EKS*.

### Preparazione del prodotto in contenitore come componente aggiuntivo Marketplace AWS
<a name="preparing-eks-addon"></a>

Per pubblicare il prodotto contenitore come Marketplace AWS componente aggiuntivo, deve soddisfare i seguenti requisiti:
+ Il prodotto in contenitore deve essere pubblicato in Marketplace AWS.
+ Il prodotto contenitore deve essere costruito in modo compatibile con entrambe AMD64 le ARM64 architetture.
+ [Il prodotto contenitore non deve utilizzare il modello di prezzo Bring Your Own License (BYOL).](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html)
**Nota**  
BYOL non è supportato per la distribuzione di componenti aggiuntivi Amazon EKS.
+ È necessario rispettare tutti i [requisiti dei prodotti basati su container](https://docs.aws.amazon.com/marketplace/latest/userguide/container-product-policies.html), incluso l'inserimento di tutte le immagini e i grafici dei container Helm in repository Marketplace AWS Amazon ECR gestiti. Questo requisito include immagini open source, ad esempio. `nginx` Le immagini e i grafici non possono essere ospitati in altri repository esterni tra cui, a titolo esemplificativo, [Amazon ECR Public Gallery](https://docs.aws.amazon.com/AmazonECR/latest/public/public-repositories.html) e. Docker Hub Quay
+ **Helmgrafici** - Prepara e impacchetta il software sotto forma di Helm grafico. Il framework aggiuntivo Amazon EKS converte un Helm grafico in un manifesto Kubernetes. Alcune Helm funzionalità non sono supportate nei sistemi Amazon EKS. L'elenco seguente descrive i requisiti che devono essere soddisfatti prima di effettuare l'onboarding del software come componente aggiuntivo Amazon EKS. In questo elenco, tutti i Helm comandi utilizzano Helm la versione 3.19.0:
  + Tutti `Capabilities` gli oggetti sono supportati, ad eccezione di. `.APIVersions` `.APIVersions`non è supportato per la non-built-in personalizzazione Kubernetes APIs.
  + Sono supportati solo `Release.Namespace` gli oggetti `` `Release.Name` e.
  + Helmi ganci e la `lookup` funzione non sono supportati.
  + Tutti i grafici dipendenti devono trovarsi all'interno del Helm grafico principale (specificato con il file di percorso del repository://...).
  + Il Helm grafico deve superare con successo Helm Lint e Helm Template senza errori. I comandi sono i seguenti:
    + HelmFlanugine — `helm lint helm-chart`

      I problemi più comuni includono i grafici non dichiarati nei metadati del grafico principale. Ad esempio, `chart metadata is missing these dependencies: chart-base Error: 1 chart(s) linted, 1 chart(s) failed`
    + HelmModello: `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`

      Passa tutte le configurazioni sostituite con il flag. `-f`
  + Archivia tutti i file binari dei container nei Marketplace AWS repository Amazon ECR. Per creare un manifesto, usa il comando Helm template mostrato in precedenza. Cerca nel manifesto eventuali riferimenti a immagini esterne come `busybox` o `gcr` immagini. Carica tutte le immagini dei container insieme alle dipendenze nei **repository Marketplace AWS Amazon ECR creati utilizzando l'opzione Add Repository nel menu a discesa** delle richieste.
+ **Configurazione personalizzata**: puoi aggiungere variabili personalizzate durante la distribuzione. Per informazioni su come identificare l'esperienza dell'utente finale, assegnare un nome al software e `aws_mp_configuration_schema.json` inserirlo in un wrapper con il Helm grafico, consulta [Amazon EKS Add-ons:](https://aws.amazon.com/blogs/containers/amazon-eks-add-ons-advanced-configuration/) Advanced configuration.

  Secondo [la parola chiave «\$1schema»](https://json-schema.org/draft/2020-12/json-schema-core#name-the-schema-keyword), `$schema` deve essere un URI che punta a una risorsa valida. `application/schema+json`

  Questo file non deve accettare informazioni sensibili come password, chiavi di licenza e certificati.

  Per gestire le installazioni segrete e di certificati, puoi fornire agli utenti finali le fasi successive all' pre-Add-oninstallazione o successive all'installazione. Il prodotto non deve fare affidamento su licenze esterne. Il prodotto deve funzionare in base alle Marketplace AWS autorizzazioni.

  Per ulteriori informazioni sulle limitazioni di`aws_mp_configuration_schema.json`, consulta. [Requisiti di configurazione dei componenti aggiuntivi e procedure consigliate per i fornitori di componenti aggiuntivi](#eks-addon-configuration)
+ **Identifica e crea lo spazio dei nomi in cui verrà distribuito il software: nella** prima versione del prodotto, devi identificare lo spazio dei nomi in cui verrà distribuito il software aggiungendo uno spazio dei nomi basato su modelli.
+ **Definizioni di risorse personalizzate (CRDs)**: il framework addon di Amazon EKS non supporta l'installazione CRDs e le dichiarazioni di risorse personalizzate basate sull' CRDs applicazione dello stesso componente aggiuntivo. Se il tuo componente aggiuntivo dispone di risorse personalizzate e si affida a, puoi: CRDs 
  + **Pubblica due componenti aggiuntivi:** suddividi la definizione CRD in un componente aggiuntivo separato (grafico di comando separato) e l'installazione effettiva [delle risorse personalizzate](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) in un componente aggiuntivo separato.
  + **Pubblica un singolo componente aggiuntivo con istruzioni manuali aggiuntive:** pubblica un singolo componente aggiuntivo che installa il cluster on. CRDs Fornisci istruzioni d'uso insieme ai file manifest di Kubernetes agli utenti finali per configurare risorse personalizzate che dipendono da queste. CRDs
+ **Crea l'`serviceAccount`opzione se applicabile**: se il software è un software a pagamento Marketplace AWS o deve connettersi con altri Servizi AWS, assicurati che il Helm grafico venga creato `serviceAccount` per impostazione predefinita. Se la `serviceAccount` creazione è gestita da un parametro in un `values.yaml` file, imposta il valore del parametro su`true`. Ad esempio, `serviceAccount.create = true`. Ciò è necessario perché il cliente potrebbe scegliere di installare il componente aggiuntivo ereditando le autorizzazioni dall'istanza del nodo sottostante che dispone già delle autorizzazioni richieste. Se il grafico Helm non crea il`serviceAccount`, le autorizzazioni non possono essere collegate a. `serviceAccount`
+ **Distribuzioni o set di demoni tracciabili: assicurati che il tuo diagramma Helm abbia un demonset** o una distribuzione. Il framework addon di Amazon EKS monitora la distribuzione delle risorse Amazon EKS che le utilizzano. Senza una distribuzione o un daemset tracciabili, il tuo addon potrebbe riscontrare un errore di distribuzione. Se il tuo addon non dispone di una distribuzione o di un daemset, ad esempio, se distribuisce una serie di risorse personalizzate o un job Kubernetes che non sono tracciabili, aggiungi un oggetto fittizio di distribuzione o daemonset.
+ **Support per architetture AMD e ARM: molti** clienti Amazon EKS utilizzano ARM64 oggi le istanze AWS Graviton. Il software di terze parti deve supportare entrambe le architetture.
+ **Integrazione con licenze o sistemi di misurazione Marketplace AWS: Marketplace AWS supporta più modelli APIs di** fatturazione. Per ulteriori informazioni, consulta [Integrazioni di fatturazione, misurazione e licenza dei prodotti container](container-products-billing-integration.md). Se desideri vendere il tuo prodotto tramite i meccanismi PAYG, consulta. [Configurazione di contatori personalizzati per prodotti container con AWS Marketplace Metering Service](container-metering-meterusage.md) Se desideri vendere il tuo prodotto tramite un modello iniziale o contrattuale, consulta. [Prezzi contrattuali per prodotti in container con AWS License Manager](container-license-manager-integration.md) 
+ **Carica il software e tutti gli artefatti e le dipendenze**: il grafico Helm deve essere autonomo e non deve richiedere dipendenze da fonti esterne, ad esempio. GitHub Se il software richiede dipendenze esterne, le dipendenze devono essere trasferite in repository Marketplace AWS Amazon ECR privati dello stesso elenco. Marketplace AWS 
+ **Fornisci istruzioni per l'implementazione sul tuo sito Web**[: ti chiediamo di pubblicare una guida all'implementazione per i clienti per identificare come distribuire il tuo software tramite il comando create-addon.](https://docs.aws.amazon.com/cli/latest/reference/eks/create-addon.html)
+ ** permissions/IAM Ruoli aggiuntivi**: se il componente aggiuntivo pubblicato da Marketplace AWS richiede l'accesso a un AWS servizio, il software deve avere un account di servizio Kubernetes annotato con le politiche IAM per l'accesso ai servizi. AWS Puoi scegliere tra due opzioni per il tuo account di servizio per effettuare richieste API ai servizi: AWS 
  + Credenziali tramite IRSA: questa opzione consente al software di ottenere credenziali presunte dall'Identity and Access Management (IAM) Role Service (IRSA). Per ulteriori informazioni, consulta i [ruoli IAM](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) per gli account di servizio. 
  + Identità del pod Amazon EKS: questa opzione consente al software di utilizzare l'identità del pod Amazon EKS per effettuare richieste API ai AWS servizi. Per ulteriori informazioni, consulta [Scopri come EKS Pod Identity concede ai pod l'accesso ai servizi AWS](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)

  Il componente aggiuntivo deve avere un file di configurazione aggiuntivo denominato `aws_mp_addon_parameters.json` nel livello superiore del grafico di Helm, nella stessa directory dello schema di configurazione personalizzato corrente (). `aws_mp_configuration_schema.json` Attualmente, questo file gestisce solo le autorizzazioni compatibili con l'identità del pod. Il formato del file è il seguente: 

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

  **Nome del file: `aws_mp_addon_parameters.json`**
**Nota**  
Il `aws_mp_addon_parameters.json` file abilita la sezione **Accesso ai componenti aggiuntivi** nella pagina delle **impostazioni di configurazione dei componenti aggiuntivi** della console Amazon EKS.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/marketplace/latest/userguide/container-product-policies.html)
**Nota**  
Pay-as-you-go I prodotti aggiuntivi (PAYG) di non Marketplace AWS possono utilizzare Amazon EKS Pod Identity e devono utilizzare IAM Roles for Service Accounts (IRSA) per il controllo degli accessi.
+ **Aggiornamenti delle versioni**: Amazon EKS rilascia nuove versioni di Kubernetes poche settimane dopo la versione upstream. Man mano che le nuove versioni dei cluster Amazon EKS diventano disponibili a livello generale, i fornitori hanno 45 giorni per certificare o aggiornare il proprio software in modo che sia compatibile con la nuova versione del cluster Amazon EKS. Se la tua attuale versione del componente aggiuntivo supporta la nuova versione di Kubernetes, convalida e certifica la stessa in modo da poter aggiornare la matrice di compatibilità delle versioni. Se è necessaria una nuova versione aggiuntiva per supportare la nuova versione di Kubernetes, invia la nuova versione per l'onboarding.
+ Il software del partner deve rientrare in uno dei seguenti tipi o essere un software operativo che migliorerà Kubernetes o 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 etcd-backup \$1 \$1 load-balancer \$1 local-registry\$1 networking \$1 Security \$1 backup \$1 ingress-controller \$1 observation abilità ingress-service-type
+ Il software non può essere [Container Network Interface (CNI)](https://github.com/containernetworking/cni).
+ Il software deve essere venduto Marketplace AWS e integrato con Licenze e contabilizzazione dei prodotti a APIs pagamento. I prodotti BYOL non sono accettati.

### Requisiti di configurazione dei componenti aggiuntivi e procedure consigliate per i fornitori di componenti aggiuntivi
<a name="eks-addon-configuration"></a>

Amazon EKS richiede la configurazione come stringa di [schema Helm JSON](https://helm.sh/docs/topics/charts/#schema-files) da fornitori di componenti aggiuntivi. I componenti aggiuntivi che richiedono le configurazioni richieste o che consentono configurazioni opzionali devono includere un `aws_mp_configuration_schema.json` file con la Helm Chart inviata. Marketplace AWS Amazon EKS utilizzerà questo schema per convalidare l'input di configurazione dei clienti e rifiutare le chiamate API con valori di input non conformi allo schema. Le configurazioni aggiuntive rientrano in genere in due categorie:
+ Configurazione per proprietà generali di Kubernetes come etichette, tolleranze, NodeSelector, ecc.
+ Configurazioni specifiche dei componenti aggiuntivi come chiave di licenza, abilitazione delle funzionalità, ecc. URLs

Questa sezione è incentrata sulla prima categoria relativa alle proprietà generali di Kubernetes.

Amazon EKS consiglia di seguire le best practice relative alla configurazione dei componenti aggiuntivi Amazon EKS.
+ [Requisiti dello schema](#schema-requirements)
+ [Parametri comuni consentiti per la configurazione](#parameters-allowed)
+ [Parametri comuni che non sono consentiti per la configurazione](#parameters-not-available)

#### Requisiti dello schema
<a name="schema-requirements"></a>

Quando definisci lo schema json, assicurati di utilizzare una versione di jsonschema supportata dai componenti aggiuntivi di Amazon EKS. 

L'elenco degli schemi supportati:
+ 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

L'utilizzo di qualsiasi altra versione dello schema json è incompatibile con i componenti aggiuntivi Amazon EKS e impedirà il rilascio del componente aggiuntivo fino a quando il problema non verrà risolto.

**Esempio di file di schema 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**  
I parametri di configurazione devono essere CamelCase e verranno rifiutati se non aderiscono a questo formato.

**Le descrizioni sono obbligatorie**  
Includi sempre descrizioni significative per le proprietà dello schema. Questa descrizione verrà utilizzata per visualizzare i nomi delle etichette nella console Amazon EKS per ogni parametro di configurazione.

**Definizione RBAC**  
I fornitori di componenti aggiuntivi devono definire e fornire le autorizzazioni RBAC necessarie per installare correttamente il componente aggiuntivo utilizzando il principio del privilegio minimo. Se è necessario modificare le autorizzazioni RBAC per le versioni più recenti del componente aggiuntivo o per eventuali correzioni per risolvere un CVE, i fornitori di componenti aggiuntivi dovranno informare il team di Amazon EKS in merito a questa modifica. Le autorizzazioni richieste per ogni risorsa Kubernetes devono essere limitate al nome della risorsa dell'oggetto.   

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

**Gestione dei segreti**  
Questa sezione si applica solo ai componenti aggiuntivi che richiedono ai clienti di configurare informazioni segrete come chiave dell'applicazione, chiave API, password, ecc. Attualmente, Amazon EKS APIs non supporta la trasmissione di informazioni segrete in testo semplice a causa delle implicazioni di sicurezza. Tuttavia, i clienti possono utilizzare la configurazione per trasmettere il nome del Kubernetes Secret che contiene le chiavi necessarie al componente aggiuntivo. I clienti dovranno creare oggetti Kubernetes Secret contenenti le chiavi con lo stesso namespace come passaggio preliminare e quindi inserire il nome del Secret utilizzando il blob di configurazione durante la creazione del componente aggiuntivo. Consigliamo ai provider di componenti aggiuntivi di denominare le proprietà dello schema in modo che i clienti non lo confondano accidentalmente con la chiave effettiva. Ad esempio: appSecretName, ecc. connectionSecretName   
In sintesi, i fornitori di componenti aggiuntivi possono sfruttare lo schema per consentire ai clienti di fornire il nome del segreto ma non le chiavi che effettivamente conterranno il segreto stesso. 

**Valori di configurazione di esempio**  
Puoi includere esempi di configurazione nel tuo schema per aiutare i clienti nella configurazione dei componenti aggiuntivi. L'esempio seguente è tratto dallo schema di AWS Distro for 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": []
      }
    ]
```

#### Parametri comuni consentiti per la configurazione
<a name="parameters-allowed"></a>

Di seguito sono riportati i parametri consigliati in un file di schema Helm rivolto ai clienti.


| Parametro | Description | Dovrebbe avere un valore predefinito? | 
| --- | --- | --- | 
| Etichette aggiuntive | Aggiungi etichette Kubernetes a tutti gli oggetti Kubernetes gestiti dal componente aggiuntivo. | No | 
| Annotazioni aggiuntive | Aggiungi annotazioni Kubernetes a tutti gli oggetti Kubernetes gestiti dal componente aggiuntivo. | No | 
| Etichette POD | Aggiungi etichette Kubernetes ai pod gestiti dal componente aggiuntivo. | No | 
| Notazioni POD | Aggiungi annotazioni Kubernetes ai pod gestiti dal componente aggiuntivo. | No | 
| logLevel | Livello di registro per i componenti gestiti dal componente aggiuntivo. | Sì | 
| nodeSelector | La forma più semplice consigliata di vincolo di selezione dei nodi. Puoi aggiungere il campo NodeSelector alle specifiche del tuo Pod e specificare le etichette dei nodi che desideri che abbia il nodo di destinazione. | Potenzialmente, ad esempio solo nodi Linux | 
| tolleranze | Le tolleranze vengono applicate ai pod. Le tolleranze consentono allo scheduler di programmare i pod con macchie corrispondenti. Le tolleranze consentono la pianificazione ma non garantiscono la pianificazione. | Forse è più comune con i daemonset | 
| affinità | La funzionalità di affinità è costituita da due tipi di affinità: l'affinità dei nodi funziona come il campo NodeSelector ma è più espressiva e consente di specificare regole flessibili, mentre l'affinità/antiaffinità tra POD consente di vincolare i Pod alle etichette di altri Pod. | Probabile | 
| topologySpreadConstraints | È possibile utilizzare i vincoli di diffusione della topologia per controllare la distribuzione dei Pod nel cluster tra domini di errore come regioni, zone, nodi e altri domini di topologia definiti dall'utente. Ciò può contribuire a ottenere un'elevata disponibilità e un utilizzo efficiente delle risorse. | Probabile | 
| richiesta/limiti di risorse | Specificare la quantità di cui ha cpu/memory bisogno ogni contenitore. Si consiglia vivamente di impostare le richieste. I limiti sono facoltativi. | Sì | 
| replicas | Numero di repliche dei pod gestiti dal componente aggiuntivo. Non applicabile ai daemonset. | Sì | 

**Nota**  
Per i parametri di configurazione della pianificazione del carico di lavoro, potrebbe essere necessario separare i componenti di primo livello nello schema, se necessario. Ad esempio, il driver CSI di Amazon EBS contiene due componenti principali, controller e node agent: i clienti richiedono un nodo diverso selectors/tolerations per ogni componente. 

**Nota**  
I valori predefiniti nello schema JSON servono esclusivamente a scopi di documentazione per l'utente e non sostituiscono la necessità di avere i valori predefiniti legittimi nel file. `values.yaml` Se utilizzi la proprietà predefinita, assicurati che quella predefinita `values.yaml` corrisponda a quella nello schema e nei due artefatti (`values.schema.json`e`values.yaml`) rimanga sincronizzata ogni volta che vengono apportate modifiche all'Helm Chart.

```
"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"
            ]
          }
```

### Parametri comuni che non sono consentiti per la configurazione
<a name="parameters-not-available"></a>

I parametri dei metadati del cluster come `clusterName``region`,`vpcId`,`accountId`, e altri possono essere richiesti da vari componenti aggiuntivi (ad esempio, Elastic Load Balancing Controller). Qualsiasi parametro simile a questi conosciuto dal servizio Amazon EKS verrà inserito automaticamente dai componenti aggiuntivi di Amazon EKS e non sarà l'utente a doverlo specificare come opzione di configurazione. Questi parametri includono:
+ AWS regione
+ Nome del cluster Amazon EKS
+ ID VPC del cluster
+ Registro dei container, specifico per gli account build-prod, utilizzato dai componenti aggiuntivi di rete
+ IP del cluster DNS, in particolare per il componente aggiuntivo coredns
+ Endpoint API del cluster Amazon EKS
+ IPv4 abilitato sul cluster
+ IPv6 abilitato sul cluster
+ Delega con prefisso IPv6 enabled on cluster

I fornitori di componenti aggiuntivi devono assicurarsi che il modello sia definito per tali parametri applicabili. Ciascuno dei parametri precedenti avrà un `parameterType` attributo predefinito definito da Amazon EKS. I metadati di rilascio specificheranno la mappatura tra il `parameterType` e il name/path parametro nel modello. In questo modo, i valori possono essere trasmessi dinamicamente da Amazon EKS senza richiedere ai clienti di specificarli tramite configurazioni e offre inoltre la flessibilità ai fornitori di componenti aggiuntivi per definire il proprio nome/percorso del modello. I parametri come quelli sopra indicati che Amazon EKS deve iniettare dinamicamente devono essere esclusi dal file di schema.

**Esempio di mappatura dai metadati di rilascio**

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

Di seguito sono riportati i parametri che non sono configurabili in un file di schema Helm destinato ai clienti. I parametri devono avere impostazioni predefinite non modificabili o non essere inclusi affatto nel modello aggiuntivo.


| Parametro | Description | Dovrebbe avere un valore predefinito? | 
| --- | --- | --- | 
| image | Immagine del contenitore che verrà distribuita nel cluster Kubernetes. | No, gestito tramite una definizione aggiuntiva | 
| imagePullSecrets | Configurazione di un pod per utilizzare un segreto da estrarre da un registro privato. | N/D | 
| Sonda LivenessProbe | Il processo Kubelet utilizza sonde liveness per sapere quando riavviare un contenitore. Ad esempio, le sonde liveness potrebbero catturare un deadlock, in cui un'applicazione è in esecuzione ma non è in grado di fare progressi. Il riavvio di un contenitore in tale stato può contribuire a rendere l'applicazione più disponibile nonostante i bug. | Sì | 
| Sonda di prontezza | È importante disporre di una sonda di prontezza per i contenitori. In questo modo il processo Kubelet in esecuzione sul piano dati saprà quando il contenitore è pronto per servire il traffico. Un Pod è considerato pronto quando tutti i suoi contenitori sono pronti. Un uso di questo segnale è controllare quali Pod vengono utilizzati come backend per i Servizi. Quando un Pod non è pronto, viene rimosso dai Service Load Balancer. | Sì | 
| StartupProbe | Il kubelet utilizza le sonde di avvio per sapere quando è stata avviata un'applicazione contenitore. Se una sonda di questo tipo è configurata, disabilita i controlli di vivacità e prontezza finché non ha esito positivo, assicurandosi che tali sonde non interferiscano con l'avvio dell'applicazione. Questo può essere usato per adottare controlli di vivacità sui container ad avvio lento, evitando che vengano uccisi dal kubelet prima che siano operativi. | Facoltativo | 
| podDisruptionBudget | Definisci un Pod Discruption Budget (PDB) per garantire che un numero minimo di POD continui a funzionare durante le interruzioni volontarie. Un PDB limita il numero di Pod di un'applicazione replicata che non funzionano contemporaneamente a causa di interruzioni volontarie. Ad esempio, un'applicazione basata sul quorum vorrebbe garantire che il numero di repliche in esecuzione non scenda mai al di sotto del numero necessario per il quorum. Un front-end web potrebbe voler garantire che il numero di repliche che servono il carico non scenda mai al di sotto di una certa percentuale del totale. | Sì, se l'impostazione predefinita è più di due repliche | 
| ServiceAccount (nome) | Nome dell'account di servizio con cui verranno eseguiti i pod. | Sì | 
| ServiceAccount (annotazioni) | Annotazioni applicate all'account del servizio. Utilizzato in genere per la funzionalità IAM Roles for Service Accounts | No, il ruolo ARN dell'account di servizio IAM è impostato nell'API dei componenti aggiuntivi Amazon EKS di primo livello. Un'eccezione a questa regola è se il componente aggiuntivo ne ha più di uno deployments/controllers (come Flux) e richiede un ruolo IRSA separato. ARNs | 
| priorityClassName | La priorità indica l'importanza di un Pod rispetto agli altri Pod. Se un Pod non può essere programmato, lo scheduler cerca di anticipare (espellere) i Pod con priorità inferiore per rendere possibile la pianificazione dei Pod in sospeso. | Sì. La maggior parte dei componenti aggiuntivi è fondamentale per la funzionalità del cluster e dovrebbe avere una classe di priorità impostata di default. | 
| podSecurityContext | Un contesto di sicurezza definisce i privilegi e le impostazioni di controllo degli accessi per un Pod o un Container. In genere utilizzato per impostare FSGroup, richiesto per IRSA nella versione 1.19 e nei cluster precedenti. | Improbabile, dato che Amazon EKS non supporta più Kubernetes v1.19 | 
| Contesto di sicurezza | Un contesto di sicurezza definisce i privilegi e le impostazioni di controllo degli accessi per un Pod o un Container. | Sì | 
| Strategia di aggiornamento | Speciifica la strategia utilizzata per sostituire i vecchi Pod con altri nuovi. | Sì | 
| NameOverride | Sostituisci il nome dei pod. | No | 
| podSecurityPolicy |  Applica le restrizioni sui parametri.  | No, PSPs sono obsoleti | 
| extraVolumeMounts/ExtraVolumes |  Utilizzato per IRSA in cluster non Amazon EKS.   | No | 

# Prezzi dei prodotti container per Marketplace AWS
<a name="pricing-container-products"></a>

Su Marketplace AWS, puoi pubblicare prodotti gratuiti, prodotti Bring Your Own License model (BYOL) e prodotti a pagamento per Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) e. AWS Fargate Puoi impostare un solo prezzo per prodotto. Questo argomento descrive i modelli di prezzo disponibili per i prodotti in container. 

**Nota**  
Utilizzi il [servizio di Marketplace AWS misurazione](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) per far valere i diritti e l'utilizzo dei contatori per i prodotti a pagamento. Per quanto riguarda i prezzi per attività o per pod, l'utilizzo viene misurato automaticamente in base a. AWS

Il prezzo che hai impostato per un prodotto in container si applica a tutti Regioni AWS. Ogni volta che riduci il prezzo di un prodotto in container, il nuovo prezzo viene applicato immediatamente ai tuoi acquirenti. In caso di aumenti di prezzo, gli acquirenti esistenti ricevono una notifica della modifica 90 giorni prima che influisca sulla fatturazione. Ai nuovi acquirenti viene fatturato il nuovo importo.

**Nota**  
Per i nuovi abbonati, la modifica del prezzo ha effetto immediato. Per gli abbonati esistenti, la modifica del prezzo entra in vigore il primo giorno del mese successivo a un periodo di 90 giorni che decorre dalla data di invio della notifica di modifica del prezzo. Ad esempio, supponiamo che tu invii una notifica di modifica del prezzo il 16 marzo. Il 16 giugno sono trascorsi circa 90 giorni dal 16 marzo. Poiché la modifica del prezzo avviene il primo giorno del mese successivo al periodo di 90 giorni, la data di entrata in vigore della modifica è il 1° luglio.

**Topics**
+ [

## Modelli di determinazione dei prezzi dei container
](#pricing-models-for-server-products)

## Modelli di determinazione dei prezzi dei container
<a name="pricing-models-for-server-products"></a>

Marketplace AWS dispone di diversi modelli di prezzo per i prodotti in container. 

La tabella seguente fornisce informazioni generali sui modelli di prezzo per i prodotti basati su container.


**Modelli di prezzo per i prodotti in container**  

| Modello tariffario | Description | 
| --- | --- | 
| Modello di licenza Bring Your Own License (BYOL) | Il BYOL viene gestito esternamente Marketplace AWS tramite un rapporto di fatturazione esterno che intrattieni con l'acquirente. Il tuo software nel contenitore non si integra con Marketplace AWS la fatturazione. | 
| Mensile | **Prezzo mensile fisso**Un prezzo mensile fisso che offre agli utenti un utilizzo illimitato del prodotto durante il mese successivo.Esempio: imposti il prezzo del prodotto a 99 USD al mese. Il prodotto include tre diverse immagini di container che vengono distribuite utilizzando una definizione di attività Amazon ECS.Dopo che un acquirente si è abbonato al tuo prodotto, gli vengono addebitati immediatamente 99 USD, operazione che si ripete ogni mese fino all'annullamento dell'abbonamento. L'acquirente ottiene inoltre un utilizzo illimitato del prodotto. L'acquirente paga inoltre separatamente per qualsiasi infrastruttura su cui vengono eseguite le attività. Una volta abbonati, possono accedere alle immagini del contenitore. Possono avviare ed eseguire un numero qualsiasi di contenitori da quelle immagini su Amazon ECS o Amazon EKS in qualsiasi configurazione.Se l'acquirente annulla l'abbonamento entro la metà di un mese, perde l'accesso all'archivio Amazon ECR in cui sono Marketplace AWS archiviate le immagini dei container. L'acquirente potrebbe aver recuperato e archiviato le immagini originali. Tuttavia, non possono più recuperare le nuove versioni delle immagini del contenitore che rendi disponibili tramite Marketplace AWS te. L'acquirente viene rimborsato per la parte non utilizzata dell'ultimo mese. Il pagamento viene calcolato in base all'utilizzo da parte dell'acquirente meno la commissione concordata. Marketplace AWS  | 
| Dimensioni personalizzate dei prezzi misurati |  Prezzi misurati personalizzati in base alle dimensioni definite dall'utente (ad esempio utenti, nodi, repository o GB), fino a 24 dimensioni per prodotto.  Esempio: i costi del prodotto da parte degli utenti. Hai utenti amministratori e utenti regolari e definisci il prezzo come 2 USD per gli utenti amministratori e 1 USD per gli utenti regolari. Puoi impostarle come dimensioni separate quando offri il tuo prodotto. Gli addebiti vengono effettuati ogni giorno in base agli utenti che hanno effettuato l'accesso e si contabilizza l'utilizzo al giorno. Per ulteriori informazioni sulla misurazione personalizzata dei prezzi basati sull'utilizzo, consulta. [Configurazione di contatori personalizzati per prodotti container con AWS Marketplace Metering Service](container-metering-meterusage.md)  | 
| Prezzo orario per attività o per pod |  **Attività Amazon ECS o pod Amazon EKS** I prezzi vengono calcolati per attività Amazon ECS o per pod Amazon EKS, calcolati al secondo con il prezzo impostato all'ora. Esempio: il prodotto include tre diverse immagini di container: un nodo controller, un nodo di lavoro e un nodo di analisi. Poiché il prodotto non è funzionale o utile senza il nodo controller, decidi tu che si tratta dell'immagine per cui addebitare l'utilizzo. Hai fissato un prezzo di 6 USD all'ora. Si modifica il software nell'immagine del contenitore per consentire l'integrazione del nodo controller con il funzionamento dell'[AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)`RegisterUsage`API. Ciò garantisce che solo gli acquirenti con un abbonamento attivo possano lanciare ed eseguire l'immagine del contenitore e che il suo utilizzo venga misurato in base alla sua durata. All'acquirente vengono addebitati 6 USD per ora di utilizzo per ogni controller pod Amazon EKS in esecuzione. Se l'acquirente lancia cinque controller pod Amazon EKS che includono il contenitore del nodo controller, gli vengono addebitati 30 USD all'ora (6 USD per pod). L'acquirente paga inoltre separatamente per qualsiasi infrastruttura su cui funzionano i pod. Per quanto riguarda le tariffe orarie, la fatturazione è al secondo con un minimo di 1 minuto. Se il cliente utilizza questo contenitore di controller per 20 minuti e 30 secondi, viene addebitato l'importo. `20 x ($6/60) + 30 x ($6/60/60) = $2 + $0.05 = $2.05` Il pagamento viene calcolato in base all'utilizzo da parte dell'acquirente meno la commissione concordata Marketplace AWS . Per ulteriori informazioni sulla tariffa oraria per attività o per pod, consulta. [Configurazione della misurazione oraria con AWS Marketplace Metering Service](container-metering-registerusage.md)  | 
| Tariffe orarie o tariffe di misurazione personalizzate con contratto a lungo termine |  Un contratto a lungo termine, a un prezzo ridotto, pagato in anticipo o in rate regolari. Un contratto a lungo termine può essere aggiunto a un prodotto esistente con prezzi misurati personalizzati o per attività e per pod. Gli acquirenti pagano i prezzi misurati quando consumano più di quanto acquistato nel contratto a lungo termine. Esempio: per i modelli di prezzo misurati, puoi aggiungere un prezzo contrattuale a lungo termine per consentire agli acquirenti di ottenere uno sconto se si impegnano in anticipo. Supponiamo che in genere addebiti 1 USD per ogni unità consumata. Un acquirente che utilizza 1 unità all'ora pagherebbe 8760 USD all'anno (). `365 days x 24 hours x $1 per hour` Potresti abilitare un contratto che consenta all'acquirente di utilizzare 1 unità all'ora per quei 365 giorni a metà prezzo (4380 USD). In questo caso, l'acquirente si impegna a pagare in anticipo il contratto di un anno e il prezzo scende da 1 USD per unità a 0,5 USD per unità. Puoi anche consentire all'acquirente di acquistare più di questi contratti. Se dalla quantità misurata risulta che l'acquirente ha consumato 10 unità in un'ora e aveva due contratti, nei 2 contratti verranno incluse 2 unità. Le 8 unità aggiuntive verrebbero fatturate alla normale tariffa di 1 USD all'ora, per un totale di 8 USD in quell'ora. Ad esempio, per attività o per pod, puoi anche aggiungere un prezzo contrattuale a lungo termine per consentire agli acquirenti di ottenere uno sconto se si impegnano in anticipo. Se normalmente addebiti 6\$1 per pod, puoi impostare un contratto a lungo termine della durata di 365 giorni al prezzo di 13.140\$1 (). `365 days x 24 hours x $3 per pod per hour` Un contratto darebbe quindi diritto al cliente a 1 pod all'ora per quei 365 giorni. I clienti possono scegliere di acquistare più contratti. Ad esempio, un cliente può acquistare due contratti che danno diritto a 2 pod all'ora. Se il cliente utilizza più pod all'ora rispetto ai contratti aventi diritto, i pod in eccesso verranno fatturati alla normale tariffa oraria. In entrambi i casi, gli acquirenti che acquistano contratti a lungo termine verranno fatturati anticipatamente, come pagamento una tantum o pagamenti futuri regolarmente programmati. Agli acquirenti verrà inoltre fatturato l'eventuale utilizzo aggiuntivo rispetto al contratto alla tariffa misurata.   | 
| Prezzi del contratto per i container |  **Contenitore con prezzo contrattuale**: prodotto basato su container per il quale l'acquirente paga una commissione anticipata. Per ulteriori informazioni sui prezzi contrattuali, consulta. [Prezzi contrattuali per prodotti in container con AWS License Manager](container-license-manager-integration.md)  | 

# Integrazioni di fatturazione, misurazione e licenza dei prodotti container
<a name="container-products-billing-integration"></a>

Marketplace AWS si integra con altri prodotti Servizi AWS per fornire prezzi basati sulla misurazione e su contratto per il prodotto in container. Per i prodotti basati su container con prezzi di utilizzo, puoi utilizzare il sia per verificare l'autorizzazione all'uso del prodotto sia [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)per misurare l'utilizzo per la fatturazione. Per i prodotti basati su container con prezzi contrattuali, puoi utilizzarli per associare le licenze al tuo prodotto. AWS License Manager Le sezioni seguenti forniscono ulteriori informazioni sulla misurazione oraria e personalizzata e sui prezzi contrattuali con AWS Marketplace Metering Service . AWS License Manager

**Topics**
+ [

## Misurazione oraria e personalizzata con AWS Marketplace Metering Service
](#entitlement-and-metering-for-paid-products)
+ [

## Prezzi contrattuali con AWS License Manager
](#container-products-contracts-license-manager)
+ [

# Configurazione della misurazione oraria con AWS Marketplace Metering Service
](container-metering-registerusage.md)
+ [

# Configurazione di contatori personalizzati per prodotti container con AWS Marketplace Metering Service
](container-metering-meterusage.md)
+ [

# Prezzi contrattuali per prodotti in container con AWS License Manager
](container-license-manager-integration.md)

## Misurazione oraria e personalizzata con AWS Marketplace Metering Service
<a name="entitlement-and-metering-for-paid-products"></a>

[Per verificare il diritto all'uso del prodotto e per misurare l'utilizzo per la fatturazione, utilizza il servizio di misurazione.Marketplace AWS](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) Se desideri definire le tue unità di prezzo e contabilizzarci l'utilizzo per la fatturazione, esegui l'integrazione utilizzando l'operazione API. [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html) Se desideri stabilire il prezzo del tuo prodotto in base al numero di attività o di pod utilizzati e calcolare automaticamente AWS tale utilizzo, esegui l'integrazione utilizzando l'operazione [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API. Per entrambi i tipi di prezzi, puoi aggiungere un prezzo contrattuale a lungo termine senza modificare la AWS Marketplace Metering Service modalità di integrazione con.

Quando crei un nuovo prodotto contenitore in Portale di gestione Marketplace AWS, forniamo una serie di identificatori del prodotto (il codice del prodotto e la chiave pubblica) che vengono utilizzati per integrare il prodotto con. AWS Marketplace Metering Service

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

L'integrazione con ti AWS Marketplace Metering Service consente di verificare che il cliente che utilizza il tuo software a pagamento sia abbonato al tuo prodotto Marketplace AWS, proteggendoti dall'uso non autorizzato all'avvio del contenitore. Per verificare l'autorizzazione, utilizza le operazioni [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)o le [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API, a seconda del modello di prezzo in uso. Per i modelli di prezzi mensili orari e fissi, utilizza il funzionamento dell'`RegisterUsage`API. Per i modelli di misurazione dei prezzi personalizzati, utilizza l'operazione `MeterUsage` API.

Se un acquirente non ha diritto al tuo prodotto, queste operazioni API restituiscono l'`CustomerNotEntitledException`eccezione.

**Nota**  
Se un acquirente annulla l'iscrizione al tuo prodotto mentre lo utilizza, ha il diritto di continuare a utilizzarlo. Tuttavia, non possono avviare contenitori aggiuntivi per il tuo prodotto.

### Linee guida di integrazione
<a name="integration-guidelines"></a>

Quando crei e pubblichi i tuoi prodotti container e utilizzi le `MeterUsage` nostre operazioni `RegisterUsage` API per l'autorizzazione e la misurazione, tieni a mente le seguenti linee guida:
+ Non configurare AWS le credenziali all'interno del software o nell'immagine del contenitore Docker. AWS le credenziali per l'acquirente vengono ottenute automaticamente in fase di esecuzione quando l'immagine del contenitore è in esecuzione all'interno di un'attività Amazon ECS o di un pod Amazon EKS.
+  Per chiamare le operazioni `MeterUsage` o `RegisterUsage` API da Amazon EKS, devi [utilizzare un AWS SDK supportato](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html). Per testare `MeterUsage` o `RegisterUsage` integrare Amazon EKS, devi eseguire un cluster Amazon EKS con Kubernetes 1.13.x o versione successiva. Kubernetes 1.13 è richiesto per i ruoli (IAM) per il supporto dei pod. AWS Identity and Access Management I ruoli IAM sono necessari affinché il pod in esecuzione ottenga le AWS credenziali necessarie per richiamare queste azioni su Amazon EKS. 
+ Puoi occuparti dello sviluppo locale, ma otterrai un'`PlatformNotSupportedException`eccezione. Questa eccezione non si verifica quando avvii il contenitore su servizi AWS container (Amazon ECS, Amazon EKS e Fargate).

### Supportato Regioni AWS
<a name="supported-regions-metering"></a>

Per un elenco di tutte le aree Marketplace AWS supportate Regioni AWS, consulta la [Tabella delle regioni](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) sul sito Web di Global Infrastructure.

#### Ottenere la misura Regione AWS per la misurazione
<a name="metering-aws-region-configuration"></a>

Quando integri il contenitore per la misurazione con il funzionamento `MeterUsage` o l'`RegisterUsage`API, non configurate l' AWS SDK per utilizzarne uno specifico. Regione AWS La regione deve essere ottenuta dinamicamente in fase di esecuzione. 

**Example**  
Ad esempio, un cliente avvia un'attività Amazon ECS o un pod Amazon EKS. L'operazione `RegisterUsage` API viene chiamata in una regione diversa dalla regione in cui è stato lanciato il task Amazon ECS o il pod Amazon EKS. Pertanto, l'operazione `RegisterUsage` API genera un errore. `InvalidRegionException`



AWS I linguaggi SDK non li determinano `AWS_REGION` in modo coerente. Se il tuo SDK non rileva automaticamente il file`AWS_REGION`, il software deve essere scritto manualmente per determinare il. `AWS_Region` Ad esempio, utilizza AWS SDK per Java automaticamente i [metadati delle istanze Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) (in particolare`ec2InstanceMetadata`) per ottenere la regione quando non sono presenti variabili di ambiente o altre configurazioni. In questo caso, chiama solo `ec2InstanceMetadata` se la variabile di `AWS_REGION` ambiente non è presente.

Per informazioni su come ottenere dinamicamente un file Regione AWS in fase di esecuzione, consultate la [AWS SDK Developer Guide](https://aws.amazon.com/tools) per il linguaggio di programmazione in uso.

### Impedire la modifica dei contatori
<a name="prevent-metering-modification"></a>

L'introduzione di modi per consentire agli acquirenti di modificare o annullare le chiamate `RegisterUsage` o `MeterUsage` potrebbe comportare problemi indesiderati di fatturazione e pagamento. Ti consigliamo vivamente di integrare la logica di misurazione e di autorizzazione.

Quando progettate il vostro prodotto per evitare modifiche alla misurazione, tenete presente quanto segue:
+ Se gli acquirenti possono inserire nuovi livelli di immagine che contengono `CMD` o `ENTRYPOINT` istruzioni, `RegisterUsage` integrali direttamente `MeterUsage` nel software che l'acquirente sta eseguendo tramite l'immagine del contenitore. In caso contrario, le chiamate verso `RegisterUsage` `CMD` o `MeterUsage` eseguite tramite o `ENTRYPOINT` dall'immagine di base verranno probabilmente sostituite dall'acquirente.
+ Ti consigliamo di gestire i codici di Marketplace AWS prodotto utilizzati dal software come input `RegisterUsage` o `MeterUsage` in modo che gli acquirenti non possano modificarli. *Tuttavia, se il tuo prodotto gestisce i codici di prodotto in un modo che i clienti possono ignorare AWS CloudFormation, ad esempio Helm chart o Kubernetes manifest, devi mantenere un elenco di codici di prodotto affidabili.* Marketplace AWS Questo serve a garantire che il codice prodotto a cui il software trasmette come input o sia valido. `RegisterUsage` `MeterUsage`
+  Se uno dei tuoi codici prodotto affidabili riguarda prodotti gratuiti, assicurati che non possa essere utilizzato al posto di un codice prodotto a pagamento.

## Prezzi contrattuali con AWS License Manager
<a name="container-products-contracts-license-manager"></a>

Per i prodotti basati su container con prezzi contrattuali, è possibile associare le licenze AWS License Manager al prodotto. 

AWS License Manager è uno strumento di gestione delle licenze che consente all'applicazione di tenere traccia e aggiornare le licenze (note anche come autorizzazioni) acquistate da un cliente. Questa sezione fornisce informazioni su come integrare il prodotto con. AWS License Manager Una volta completata l'integrazione, puoi pubblicare la tua scheda di prodotto su Marketplace AWS.

Per ulteriori informazioni in merito AWS License Manager, consulta la [Guida per AWS License Manager l'utente](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) e la [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)sezione *AWS CLI Command Reference*.

**Nota**  
I clienti non possono lanciare nuove istanze del contenitore dopo il periodo di scadenza del contratto. Tuttavia, durante la durata del contratto, possono avviare un numero qualsiasi di istanze. Queste licenze non sono legate a un nodo o a un'istanza specifici. Qualsiasi software in esecuzione su qualsiasi contenitore su qualsiasi nodo può effettuare il checkout della licenza purché disponga delle credenziali AWS assegnate.
**Creazione di offerte private**: i venditori possono generare offerte private per i prodotti utilizzando lo strumento di creazione di offerte private disponibile in. Portale di gestione Marketplace AWS
**Reporting**: puoi configurare i feed di dati configurando un bucket Amazon S3 nella sezione Report **del**. Portale di gestione Marketplace AWS Per ulteriori informazioni, consulta [Report, feed di dati e dashboard per i venditori in Marketplace AWS](reports-and-data-feed.md).

### Workflow di integrazione
<a name="container-LM-LM-workflow"></a>

I passaggi seguenti mostrano il flusso di lavoro per l'integrazione del prodotto contenitore con AWS License Manager:

1. Il venditore crea un prodotto con AWS License Manager integrazione.

1. Il venditore mette in vendita il prodotto su Marketplace AWS.

1. L'acquirente trova il prodotto Marketplace AWS e lo acquista.

1. Una licenza viene inviata all'acquirente nel suo Account AWS.

1. L'acquirente utilizza il software avviando l'istanza Amazon EC2, il task Amazon ECS o il software pod Amazon EKS. Il cliente esegue la distribuzione utilizzando un ruolo IAM.

1. Il software legge la licenza nell' AWS License Manager account dell'acquirente, scopre i diritti acquistati e fornisce le funzionalità di conseguenza. 
**Nota**  
License Manager non effettua alcun tracciamento o aggiornamento; questo viene fatto dall'applicazione del venditore.

# Configurazione della misurazione oraria con AWS Marketplace Metering Service
<a name="container-metering-registerusage"></a>

**Nota**  
 Per le implementazioni di Amazon EKS, il tuo software deve utilizzare [IAM roles for service accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) per firmare la chiamata API per il funzionamento dell'[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)API. L'utilizzo di [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html), il ruolo del nodo o le chiavi di accesso a lungo termine non sono supportati.  
Per le distribuzioni di Amazon ECS, il tuo software deve utilizzare il ruolo [IAM dell'attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) per firmare la chiamata API per l'operazione 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) L'utilizzo del ruolo del nodo o delle chiavi di accesso a lungo termine non è supportato.

Se il prodotto in container utilizza prezzi orari per attività o per pod anziché dimensioni di prezzo personalizzate basate su misuratori, non è necessario definire dimensioni di misurazione personalizzate. Puoi utilizzare AWS Marketplace Metering Service per la misurazione oraria con prodotti container all'interno. Marketplace AWS Le seguenti sezioni mostrano come configurare la misurazione oraria con AWS Marketplace Metering Service.

Il funzionamento dell'`RegisterUsage`API misura l'utilizzo del software per attività Amazon Elastic Container Service (Amazon ECS) o per pod Amazon Elastic Kubernetes Service (Amazon EKS), all'ora, con un utilizzo proporzionale al secondo. Un minimo di 1 minuto di utilizzo si applica alle attività o ai pod di breve durata. La misurazione continua dell'uso del software viene gestita automaticamente da. Marketplace AWS Metering Control Plane Il software non è tenuto a eseguire alcuna azione specifica di misurazione, ad eccezione di `RegisterUsage` una chiamata una sola volta per iniziare la misurazione dell'utilizzo del software.

`RegisterUsage`deve essere chiamato immediatamente al momento del lancio di un container. Se non registri il container nelle prime 6 ore dal lancio del container, AWS Marketplace Metering Service non fornisce alcuna garanzia di misurazione per i mesi precedenti. Tuttavia, la misurazione continuerà per il mese in corso fino alla scadenza del container.

 Marketplace AWS Metering Control PlaneContinua a fatturare ai clienti l'esecuzione delle attività di Amazon ECS e dei pod Amazon EKS, indipendentemente dallo stato dell'abbonamento del cliente. In questo modo non è più necessario che il software esegua controlli di autorizzazione dopo l'avvio iniziale con successo dell'operazione o del pod. 

*Per ulteriori informazioni sull'integrazione dell' AWS Marketplace Metering Service API con i prodotti container con prezzi orari, consulta il laboratorio [Integrazione con misurazione oraria](https://catalog.workshops.aws/mpseller/en-US/container/integrate-hourly) del workshop dedicato ai venditori.Marketplace AWS * 

**Topics**
+ [

## Prerequisiti per la misurazione oraria
](#hourly-metering-prereqs)
+ [

## Test dell'integrazione per `RegisterUsage`
](#testing-integration-for-registerusage)
+ [

## Gestione degli errori per `RegisterUsage`
](#hourly-metering-entitlement-error-handling)
+ [

# Integrazione del prodotto container con AWS Marketplace Metering Service utilizzando AWS SDK per Java
](java-integration-example-registerusage.md)

## Prerequisiti per la misurazione oraria
<a name="hourly-metering-prereqs"></a>

Prima di pubblicare il prodotto, devi fare quanto segue:

1. Crea un nuovo prodotto contenitore in e prendi nota del relativo codice prodotto. Portale di gestione Marketplace AWS

   Per ulteriori informazioni, consulta [Panoramica: crea un prodotto contenitore](container-product-getting-started.md#create-container-product).

1. Utilizza un ruolo AWS Identity and Access Management (IAM) per l'attività o il pod che esegue l'applicazione con le autorizzazioni IAM necessarie per la chiamata`RegisterUsage`. La policy gestita da IAM `AWSMarketplaceMeteringRegisterUsage` dispone di queste autorizzazioni. Per ulteriori informazioni sulla policy, consulta [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)il *AWS Managed Policy Reference.*

1. (Facoltativo) Se desideri visualizzare la registrazione, ti consigliamo di abilitare la AWS CloudTrail registrazione nella definizione dell'attività o del pod.

1. Effettua una chiamata di prova all'operazione `RegisterUsage` API con un record per tutte le dimensioni di prezzo che definisci.

## Test dell'integrazione per `RegisterUsage`
<a name="testing-integration-for-registerusage"></a>

Utilizza l'operazione `RegisterUsage` API per testare l'integrazione prima di inviare l'immagine Marketplace AWS per la pubblicazione.

Chiama `RegisterUsage` dall'immagine del contenitore eseguendo il prodotto su Amazon ECS o Amazon EKS. Usa l' AWS account che stai utilizzando per pubblicare l'offerta del prodotto. Marketplace AWS La tua integrazione di misurazione deve impostare dinamicamente il file Regione AWS, anziché codificarlo. Tuttavia, durante il test, avvia almeno un'attività Amazon ECS o un pod Amazon EKS contenente il container a pagamento nella regione Stati Uniti orientali (Virginia settentrionale). In questo modo, il team Marketplace AWS operativo può verificare il tuo lavoro con i log di quella regione.

**Nota**  
Se il tuo prodotto supporta sia Amazon ECS che Amazon EKS, devi solo avviarlo in Amazon EKS per consentirci di convalidare la tua integrazione.

Non puoi testare completamente l'integrazione finché il prodotto non viene pubblicato con tutti i metadati e le informazioni sui prezzi richiesti. Se richiesto, il team operativo del Marketplace AWS catalogo può verificare la ricezione dei dati di misurazione.

## Gestione degli errori per `RegisterUsage`
<a name="hourly-metering-entitlement-error-handling"></a>

Se l'immagine del contenitore si integra con AWS Marketplace Metering Service e riceve un'eccezione diversa `ThrottlingException` dall'avvio del contenitore, è necessario terminare il contenitore per impedirne l'uso non autorizzato.

Le eccezioni diverse da `ThrottlingException` vengono generate solo durante la chiamata iniziale all'operazione API. `RegisterUsage` Le chiamate successive dalla stessa attività Amazon ECS o dallo stesso pod Amazon EKS non vengono generate `CustomerNotSubscribedException` anche se il cliente annulla l'iscrizione mentre l'attività o il pod è ancora in esecuzione. A questi clienti viene comunque addebitato il costo per l'utilizzo dei container dopo l'annullamento dell'iscrizione e il loro utilizzo viene monitorato.

La tabella seguente descrive gli errori che l'operazione `RegisterUsage` API potrebbe generare. Ogni linguaggio di programmazione AWS SDK dispone di una serie di linee guida per la gestione degli errori a cui puoi fare riferimento per ulteriori informazioni. 


|  **Errore**  |  **Descrizione**  | 
| --- | --- | 
|  InternalServiceErrorException  |  RegisterUsagenon è disponibile.  | 
|  CustomerNotEntitledException  |  Il cliente non dispone di un abbonamento valido per il prodotto.  | 
|  InvalidProductCodeException  |  Il ProductCode valore passato come parte della richiesta non esiste.  | 
|  InvalidPublicKeyException  |  Il PublicKeyVersion valore passato come parte della richiesta non esiste.  | 
|  PlatformNotSupportedException  |  Marketplace AWS non supporta la misurazione dell'utilizzo dalla piattaforma sottostante. Sono supportati solo Amazon ECS, Amazon EKS e AWS Fargate .  | 
|  ThrottlingException  |  Le chiamate a RegisterUsage sono limitate.  | 
|  InvalidRegionException  |  RegisterUsagedeve essere chiamato nello stesso modo in Regione AWS cui è stato lanciato il task Amazon ECS o il pod Amazon EKS. Ciò impedisce a un contenitore di scegliere una regione (ad esempiowithRegion(“us-east-1”)) durante la chiamataRegisterUsage.  | 

# Integrazione del prodotto container con AWS Marketplace Metering Service utilizzando AWS SDK per Java
<a name="java-integration-example-registerusage"></a>

Puoi utilizzarlo AWS SDK per Java per l'integrazione con l'AWS Marketplace Metering Service. La misurazione continua dell'uso del software viene gestita automaticamente da. Marketplace AWS Metering Control Plane Il software non è tenuto a eseguire alcuna azione specifica di misurazione, ad eccezione di `RegisterUsage` una chiamata una sola volta per iniziare la misurazione dell'utilizzo del software. Questo argomento fornisce un esempio di implementazione che utilizza l'azione del servizio di [Marketplace AWS misurazione AWS SDK per Java](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) per l'integrazione con l'azione. `RegisterUsage` 

`RegisterUsage`deve essere chiamato immediatamente al momento del lancio di un contenitore. Se non registri il container nelle prime 6 ore dal lancio del container, AWS Marketplace Metering Service non fornisce alcuna garanzia di misurazione per i mesi precedenti. Tuttavia, la misurazione continuerà per il mese in corso fino alla scadenza del container.

Per il codice sorgente completo, vedi[RegisterUsage Esempio di Java](#registerusage-java-example). Molti di questi passaggi si applicano indipendentemente dal linguaggio AWS SDK. 



**Esempi di passaggi per l'integrazione con AWS Marketplace Metering Service**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/tour).

1. Da **Assets** scegli **Containers** per iniziare a creare un nuovo prodotto container. La creazione del prodotto genera il codice prodotto per il prodotto da integrare con l'immagine del contenitore. Per informazioni sull'impostazione delle autorizzazioni IAM, consulta[Marketplace AWS autorizzazioni API di misurazione e autorizzazione](iam-user-policy-for-aws-marketplace-actions.md).

1.  Scarica l'[SDK AWS Java](https://aws.amazon.com/sdk-for-java/) pubblico. 
**Importante**  
 Per richiamare la misurazione APIs da Amazon EKS, devi [utilizzare un AWS SDK supportato ed eseguirlo su un](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) cluster Amazon EKS che esegue Kubernetes 1.13 o versione successiva. 

1.  (Facoltativo) Se ti stai integrando con l'`RegisterUsage`azione e desideri eseguire la verifica della firma digitale, devi configurare la libreria di verifica delle firme nel classpath dell'applicazione [BouncyCastle](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on).

   Se desideri utilizzare JSON Web Token (JWT), devi includere anche le librerie [JWT Java](https://jwt.io/) nel classpath dell'applicazione. L'utilizzo di JWT offre un approccio più semplice alla verifica della firma, ma non è obbligatorio ed è possibile utilizzare invece la modalità standalone. BouncyCastle Sia che utilizzi JWT o BouncyCastle che sia necessario utilizzare un sistema di compilazione come Maven per includere dipendenze transitive di o JWT nel classpath dell'applicazione. 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.  Chiama `RegisterUsage` da ogni immagine di container a pagamento presente nella tua offerta di prodotti. `ProductCode`e `PublicKeyVersion` sono parametri obbligatori e tutti gli altri input sono opzionali. Di seguito è riportato un esempio di payload per. `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
   }
   ```
**Nota**  
È possibile riscontrare problemi transitori nella connessione all'AWS Marketplace Metering Service. Marketplace AWS consiglia vivamente di implementare nuovi tentativi per un massimo di 30 minuti, con interruzione esponenziale, per evitare interruzioni a breve termine o problemi di rete.

1.  `RegisterUsage`genera una firma digitale RSA-PSS utilizzando SHA-256 che è possibile utilizzare per verificare l'autenticità della richiesta. La firma include i seguenti campi:, e. `ProductCode` `PublicKeyVersion` `Nonce` Per verificare la firma digitale, è necessario conservare questi campi della richiesta. Il codice seguente è un esempio di risposta a una `RegisterUsage` chiamata. 

   ```
   {
   "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. Ricostruisci una nuova versione dell'immagine del contenitore che includa la `RegisterUsage` chiamata, tagga il contenitore e inviala a qualsiasi registro di container compatibile con Amazon ECS o Amazon EKS, come Amazon ECR o Amazon ECR Public. Se utilizzi Amazon ECR, assicurati che l'account che avvia l'attività Amazon ECS o il pod Amazon EKS disponga delle autorizzazioni per l'archivio Amazon ECR. In caso contrario, il lancio fallisce.

1.  Crea un ruolo [IAM](https://aws.amazon.com/iam/) che conceda l'autorizzazione alla chiamata del contenitore`RegisterUsage`, come definito nel codice seguente. È necessario fornire questo ruolo IAM nel parametro [Task Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) della definizione del task Amazon ECS o del pod Amazon EKS.

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

****  

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

------

1. Crea un'attività Amazon ECS o una definizione del pod Amazon EKS che faccia riferimento al contenitore integrato Marketplace AWS e che faccia riferimento al ruolo IAM creato nella fase 7. È necessario abilitare AWS CloudTrail la registrazione nella definizione dell'attività se si desidera visualizzare la registrazione. 

1. Crea un cluster Amazon ECS o Amazon EKS per eseguire la tua attività o il tuo pod. Per ulteriori informazioni sulla creazione di un cluster Amazon ECS, consulta [Creating a Cluster](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html) nella *Amazon Elastic Container Service Developer Guide*. [Per ulteriori informazioni sulla creazione di un cluster Amazon EKS (utilizzando Kubernetes versione 1.1.3.x o successiva), consulta Creazione di un cluster Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html)

1. Configura il cluster Amazon ECS o Amazon EKS e avvia la definizione di attività Amazon ECS o il pod Amazon EKS che hai creato, in us-east-1. Regione AWSÈ solo durante questo processo di test, prima che il prodotto sia disponibile, che devi utilizzare questa regione.

1. Quando ricevi una risposta valida da`RegisterUsage`, puoi iniziare a creare il tuo prodotto contenitore. Per domande, contatta il team [Operativo Marketplace AWS del venditore](https://aws.amazon.com/marketplace/management/contact-us/). 

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

L'esempio seguente utilizza AWS SDK per Java and Marketplace AWS Metering Service per chiamare l'`RegisterUsage`operazione. La verifica della firma è facoltativa, ma se si desidera eseguire la verifica della firma, è necessario includere le librerie di verifica delle firme digitali richieste. Questo esempio è solo a scopo illustrativo. 

```
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();
        }
    }
}
```

# Configurazione di contatori personalizzati per prodotti container con AWS Marketplace Metering Service
<a name="container-metering-meterusage"></a>

**Nota**  
 Per le implementazioni di Amazon EKS, il tuo software deve utilizzare [IAM roles for service accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) per firmare la chiamata API per il funzionamento dell'[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)API. L'utilizzo di [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html), il ruolo del nodo o le chiavi di accesso a lungo termine non sono supportati.  
Per le distribuzioni di Amazon ECS, il tuo software deve utilizzare il ruolo [IAM dell'attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) per firmare la chiamata API per l'operazione 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) L'utilizzo del ruolo del nodo o delle chiavi di accesso a lungo termine non è supportato.  
Per le distribuzioni AgentCore di Amazon Bedrock Runtime, il tuo software deve utilizzare il [ruolo AgentCore di esecuzione Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-permissions.html#runtime-permissions-execution) per firmare la chiamata API per l'[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)operazione API. Le chiavi di accesso a lungo termine non sono supportate.

Marketplace AWS i prodotti container possono avere una misurazione personalizzata per un massimo di 24 diverse dimensioni di prezzo per prodotto. A ogni dimensione può essere associato un prezzo contrattuale a lungo termine. Per abilitare la misurazione personalizzata, integra il tuo prodotto container con AWS Marketplace Metering Service. Puoi definire le tue unità di prezzo e la misurazione personalizzata per tale utilizzo e per la fatturazione utilizzando AWS il funzionamento dell'API. [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html) Le seguenti sezioni mostrano come configurare la misurazione personalizzata per il prodotto container.

Le dimensioni del prezzo sono definite in due posizioni, una volta durante la creazione del prodotto nel Portale di gestione Marketplace AWS (portale dei venditori) e una volta nel software per eseguire l'`MeterUsage`operazione. Questo metodo a due fattori garantisce che le offerte successive funzionino come previsto prima di essere rese disponibili al pubblico.

Per configurare la misurazione personalizzata, devi scegliere la categoria di utilizzo, il tipo di unità e le dimensioni del prezzo: 
+ **Categoria di utilizzo**: la categoria di utilizzo aiuta gli acquirenti a capire cos'è il tuo prodotto e come utilizzarlo. 
+ **Tipo di unità**: il tipo di unità definisce l'unità di misura per la fatturazione. Ad esempio, la larghezza di banda misurata in GBps o MBps, il numero di host o i dati misurati in MB, GB o TB.
+ **Dimensioni dei prezzi**: le dimensioni dei prezzi rappresentano una funzionalità o un servizio per cui hai impostato un prezzo unitario (ad esempio, utenti, scanCPUs, v o agenti distribuiti). Le dimensioni relative ai prezzi sono pubbliche. Tuttavia, puoi comunque definire offerte private e Bring Your Own License (BYOL) per prodotti pubblici. Non inserire i prezzi nei registri di misurazione. Tu misuri la quantità di unità e noi la utilizziamo insieme ai prezzi che hai definito durante la creazione del prodotto per calcolare la fattura dell'acquirente. 

  Se il prezzo del prodotto non corrisponde a nessuna delle categorie o dei tipi di unità predefiniti, puoi scegliere la categoria di **unità** generica. Quindi, utilizza la descrizione della dimensione per descrivere cos'è l'unità.

Facoltativamente, è possibile distribuire l'utilizzo in allocazioni in base alle proprietà monitorate. Le allocazioni vengono rappresentate come tag per l'acquirente. Questi tag consentono all'acquirente di visualizzare i costi suddivisi in base all'utilizzo in base ai valori dei tag. Ad esempio, se addebiti in base all'utente e gli utenti hanno la proprietà «Dipartimento», puoi creare allocazioni di utilizzo con tag con la chiave «Dipartimento» e un'allocazione per valore. Ciò non modifica il prezzo, le dimensioni o l'utilizzo totale riportato, ma consente al cliente di visualizzare i costi per categorie appropriate al prodotto.

Ti consigliamo di inviare un record di misurazione ogni ora. Tuttavia, puoi aggregare l'utilizzo anche su periodi giornalieri o mensili. In caso di interruzione, puoi aggregare l'utilizzo del software da parte degli acquirenti e inviarlo per la misurazione delle ore successive. Non puoi inviare più di un record all'ora.

*Per ulteriori informazioni sull'integrazione dell' AWS Marketplace Metering Service API per i prodotti container con prezzi di misurazione personalizzati, consulta il laboratorio [Integrazione con misurazione personalizzata](https://catalog.workshops.aws/mpseller/en-US/container/integrate-custom) del workshop per i Marketplace AWS venditori.*

**Importante**  
La prova gratuita e i diritti prepagati vengono monitorati su base oraria. Di conseguenza, l'invio separato di questi documenti potrebbe comportare un sovrapprezzo per l'acquirente.

**Topics**
+ [

## Prerequisiti per la misurazione personalizzata
](#custom-metering-prereqs)
+ [

## Test `MeterUsage` dell'integrazione per ECS ed EKS
](#testing-meterusage-integration)
+ [

## Test di MeterUsage integrazione per AgentCore
](#testing-agentcore-metering)
+ [

## Gestione degli errori per `MeterUsage`
](#custom-metering-entitlement-error-handling)
+ [

## (Facoltativo) Etichettatura in base al fornitore
](#container-vendor-metered-tagging)
+ [

## Esempio di codice
](#container-meter-code-example)
+ [

# Integrazione del prodotto container utilizzando la misurazione personalizzata con e AWS Marketplace Metering Service AWS SDK per Java
](java-integration-example-meterusage.md)

## Prerequisiti per la misurazione personalizzata
<a name="custom-metering-prereqs"></a>

Prima di pubblicare il prodotto, devi fare quanto segue:

1. Crea un nuovo prodotto contenitore in e prendi nota del relativo codice prodotto. Portale di gestione Marketplace AWS

1. Utilizza un ruolo AWS Identity and Access Management (IAM) per l'endpoint task, pod o AgentCore Runtime che esegue l'applicazione con le autorizzazioni IAM necessarie per effettuare la chiamata. `MeterUsage` La policy gestita da IAM `AWSMarketplaceMeteringRegisterUsage` dispone di queste autorizzazioni. Per ulteriori informazioni sulla policy, consulta [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)il *AWS Managed Policy Reference.*

1. (Facoltativo) Ti consigliamo di abilitare la AWS CloudTrail registrazione nella definizione dell'attività o del contenitore se desideri visualizzare la registrazione.

1. Effettua una chiamata di prova all'operazione `MeterUsage` API con un record per tutte le dimensioni di prezzo che definisci.

## Test `MeterUsage` dell'integrazione per ECS ed EKS
<a name="testing-meterusage-integration"></a>

Utilizza l'`MeterUsage`operazione per testare l'integrazione prima di inviare l'immagine Marketplace AWS per la pubblicazione.

`MeterUsage`Esegui la chiamata dalle immagini del contenitore eseguendo il prodotto su Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS Account AWS ) con il codice su cui pubblichi il prodotto. Marketplace AWS La tua integrazione di misurazione deve impostare dinamicamente il file Regione AWS, anziché codificarlo. Tuttavia, durante il test, avvia almeno un'attività Amazon ECS o un pod Amazon EKS contenente il tuo container a pagamento nella regione degli Stati Uniti orientali (Virginia settentrionale) in modo che il team Marketplace AWS operativo possa verificare il tuo lavoro con i log di quella regione.

**Nota**  
Se il tuo prodotto supporta sia Amazon ECS che Amazon EKS, devi solo avviarlo in Amazon EKS per consentirci di convalidare la tua integrazione.
Testa ogni dimensione prima di lanciare il prodotto al pubblico e dopo aver aggiunto una nuova dimensione. Se non invii un record di misurazione per ogni dimensione associata a un prodotto contenitore, si verificherà un errore e la richiesta non andrà a buon fine.

Non puoi testare completamente l'integrazione finché il prodotto non sarà pubblicato con tutti i metadati e le informazioni sui prezzi richiesti. Se richiesto, il team operativo del Marketplace AWS catalogo può verificare la ricezione dei dati di misurazione.

## Test di MeterUsage integrazione per AgentCore
<a name="testing-agentcore-metering"></a>

Utilizza l'`MeterUsage`operazione per testare l'integrazione prima di inviare l'immagine Marketplace AWS per la pubblicazione.

Effettua una chiamata `MeterUsage` dalle immagini del contenitore eseguendo il prodotto su Amazon Bedrock AgentCore con l' AWS account su Marketplace AWS cui pubblichi il prodotto. La tua integrazione di misurazione deve impostare dinamicamente la AWS regione, anziché codificarla. Tuttavia, durante il test, avvia almeno un AgentCore agente Amazon Bedrock contenente il tuo container a pagamento nella regione Stati Uniti orientali (Virginia settentrionale) in modo che il team Marketplace AWS operativo possa verificare il tuo lavoro con i log di quella regione. 

 Non è necessario aggregare i record di utilizzo orario. `MeterUsage`Richiamate ogni chiamata di un agente con l'utilizzo di tale chiamata.

È necessario utilizzare l'ultima versione rilasciata dell' AWS SDK per la propria lingua. Questo compila automaticamente il `ClientToken` parametro con un valore generato automaticamente per favorire l'idempotenza. Le versioni precedenti dell'SDK che non compilano questo campo non funzioneranno per `MeterUsage` le chiamate dall'interno di Amazon Bedrock. AgentCore A causa di un problema di rete, devi riutilizzare esattamente la stessa richiesta quando riprovi. In questo modo si garantisce che le richieste vengano trattate in modo ideale.

A causa delle differenze nel comportamento di misurazione previsto tra Amazon Bedrock AgentCore e altri prodotti container, non è consigliabile condividere la stessa immagine del contenitore da utilizzare su Amazon Bedrock e AgentCore su Amazon ECS o EKS.

## Gestione degli errori per `MeterUsage`
<a name="custom-metering-entitlement-error-handling"></a>

Chiama l'`MeterUsage`impostazione del `DryRun` parametro su true all'avvio del contenitore per verificare che l'integrazione della misurazione funzioni. Se l'immagine del contenitore si integra con l'`MeterUsage`operazione e riceve un'eccezione diversa `ThrottlingException` dall'avvio del contenitore, è necessario chiudere il contenitore per impedirne l'uso non autorizzato.

Le eccezioni diverse da `ThrottlingException` vengono generate solo durante la chiamata iniziale a. `MeterUsage` Le chiamate successive dalla stessa attività Amazon ECS o dal pod Amazon EKS o dallo stesso endpoint AgentCore Runtime non vengono generate`CustomerNotSubscribedException`, anche se il cliente annulla l'iscrizione mentre l'attività o il pod è ancora in esecuzione. A questi clienti vengono comunque addebitati i costi per l'utilizzo dei container dopo l'annullamento dell'iscrizione e il loro utilizzo viene monitorato.

[MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)Consulta l'*AWS Marketplace Metering Service API Reference* per le descrizioni dettagliate degli errori più comuni per. `MeterUsage` Ogni linguaggio di programmazione AWS SDK dispone di una serie di linee guida per la gestione degli errori a cui puoi fare riferimento per ulteriori informazioni. 

## (Facoltativo) Etichettatura in base al fornitore
<a name="container-vendor-metered-tagging"></a>

L'etichettatura basata sul fornitore aiuta i fornitori di software indipendenti (ISVs) a fornire all'acquirente informazioni più dettagliate sull'utilizzo del software e può aiutarlo a eseguire l'allocazione dei costi.

**Nota**  
L'etichettatura basata sul fornitore non è supportata per le richieste di misurazione per i prodotti Amazon Bedrock. AgentCore 

Esistono diversi modi per contrassegnare l'utilizzo del software da parte di un acquirente. Uno consiste nel chiedere innanzitutto agli acquirenti cosa vogliono vedere nella ripartizione dei costi. Quindi puoi suddividere l'utilizzo tra le proprietà monitorate per l'account dell'acquirente. Esempi di proprietà includono `AccountId` `Business Unit``Cost Centers`, e altri metadati pertinenti per il tuo prodotto. Queste proprietà vengono esposte all'acquirente come tag. Utilizzando i tag, gli acquirenti possono visualizzare i costi suddivisi in base all'utilizzo in base ai valori dei tag nella loro AWS Billing Console ([https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)). I tag misurati in base al fornitore non modificano il prezzo, le dimensioni o l'utilizzo totale segnalato. Consente ai clienti di visualizzare i costi per categorie appropriate al prodotto.

In un caso d'uso comune, un acquirente sottoscrive un abbonamento al tuo prodotto utilizzando un Account AWS prodotto. L'acquirente ha inoltre numerosi utenti associati allo stesso abbonamento al prodotto. È possibile creare allocazioni di utilizzo con tag con una chiave di e `AccountId` quindi allocare l'utilizzo a ciascun utente. In questo caso, gli acquirenti possono attivare il `AccountId` tag nella console di Billing and Cost Management e analizzare l'utilizzo da parte dei singoli utenti.

### Esperienza del venditore
<a name="container-vendor-metered-tag-seller"></a>

I venditori possono aggregare i record di misurazione delle risorse con lo stesso set di tag anziché aggregare l'utilizzo di tutte le risorse. Ad esempio, i venditori possono creare il record di misurazione che include diversi bucket. `UsageAllocations` Ogni bucket rappresenta un set di tag, ad `UsageQuantity` esempio e. `AccountId` `BusinessUnit` 

Nel diagramma seguente, **Resource 1** ha un set unico di `BusinessUnit` tag `AccountId` e viene visualizzata nel **Metering Record** come una voce singola. 

La **risorsa 2** e la **risorsa 3** hanno entrambe lo stesso `AccountId` tag e lo stesso `BusinessUnit` tag. `2222` `Operations` Di conseguenza, vengono combinati in un'unica `UsageAllocations` voce nel **Metering Record**.

![\[Diagramma che mostra come i tag di misurazione dei fornitori combinano i dati di utilizzo. Tre risorse (Risorsa 1, 2 e 3) con dati diversi AccountIds BusinessUnits vengono consolidate in un unico record di misurazione, UsageAllocations raggruppate per AccountId e BusinessUnit prima di essere inviate al AWS Marketplace Metering Service.\]](http://docs.aws.amazon.com/it_it/marketplace/latest/userguide/images/seller-vendor-meter-tag.png)


I venditori possono anche combinare le risorse senza tag in un'unica risorsa `UsageAllocation` con la quantità di utilizzo assegnata e inviarla come una delle voci inserite. `UsageAllocations`

I limiti includono:
+ Numero di tag: 5
+ Dimensione di `UsageAllocations` (cardinalità): 2.500

Le convalide includono:
+ Caratteri consentiti per la chiave e il valore del tag: a-zA-Z 0-9\$1 -= . \$1:\$1 /@
+ Numero massimo di tag nell'`UsageAllocation`elenco: 5
+ Due non `UsageAllocations` possono avere gli stessi tag (ovvero la stessa combinazione di chiavi e valori dei tag). In tal caso, devono usare lo stesso`UsageAllocation`.
+ La somma `AllocatedUsageQuantity` di `UsageAllocation` deve essere uguale a`UsageQuantity`, che è l'utilizzo aggregato.

### Esperienza dell'acquirente
<a name="container-vendor-metered-tag-buyer"></a>

La tabella seguente mostra un esempio dell'esperienza dell'acquirente dopo che un acquirente ha attivato i tag `AccountId` e `BusinessUnit` fornitore. 

In questo esempio, l'acquirente può visualizzare l'utilizzo allocato nel proprio rapporto **sui costi** di utilizzo. I tag misurati dal fornitore utilizzano il prefisso. `“aws:marketplace:isv”` Gli acquirenti possono attivarli in Billing and Cost Management, **in Tag di allocazione dei costi AWS, tag di allocazione** **dei costi generati**.

La prima e l'ultima riga del **report sull'utilizzo dei costi** sono pertinenti a ciò che il venditore invia al servizio di misurazione (come mostrato nell'esempio). [Esperienza del venditore](#container-vendor-metered-tag-seller)


**Report sull'utilizzo dei costi (semplificato)**  

| ProductCode  | Acquirente | UsageDimension | UsageQuantity | `aws:marketplace:isv:AccountId ` | `aws:marketplace:isv:BusinessUnit` | 
| --- | --- | --- | --- | --- | --- | 
| xyz | 111122223333 | Rete: per (GB) ispezionata  | 70 | 2222 | Operazioni | 
| xyz | 111122223333 | Rete: per (GB) ispezionata  | 30 | 3333 | Ambito finanziario | 
| xyz | 111122223333 | Rete: per (GB) ispezionata  | 20 | 4444 | IT | 
| xyz | 111122223333 | Rete: per (GB) ispezionata  | 20 | 5555 | Marketing | 
| xyz | 111122223333 | Rete: per (GB) ispezionata  | 30 | 1111 | Marketing | 

Per un esempio di codice, consulta [`MeterUsage`esempio di codice con etichettatura per l'allocazione dell'utilizzo (opzionale)](#container-meterusage-code-example).

## Esempio di codice
<a name="container-meter-code-example"></a>

Il seguente esempio di codice viene fornito per aiutarvi a integrare il prodotto contenitore con quanto Marketplace AWS APIs necessario per la pubblicazione e la manutenzione del prodotto.

### `MeterUsage`esempio di codice con etichettatura per l'allocazione dell'utilizzo (opzionale)
<a name="container-meterusage-code-example"></a>

Il seguente esempio di codice è rilevante per i prodotti container con modelli di determinazione dei prezzi al consumo. L'esempio di Python invia un record di misurazione con i tag di allocazione dell'uso appropriati per addebitare le Marketplace AWS commissioni ai clienti. 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. 
# Marketplace AWS can only accept records for up to an hour in the past. 
#
# productCode is supplied after the Marketplace AWS 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 
)
```

*Per ulteriori informazioni in merito`MeterUsage`, consulta l'API [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)Reference.AWS Marketplace Metering Service *

### Esempio di risposta
<a name="container-meterusage-code-response"></a>

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

# Integrazione del prodotto container utilizzando la misurazione personalizzata con e AWS Marketplace Metering Service AWS SDK per Java
<a name="java-integration-example-meterusage"></a>

Marketplace AWS i prodotti container possono avere una misurazione personalizzata per un massimo di 24 diverse dimensioni di prezzo per prodotto. Per abilitare la misurazione personalizzata, integri il tuo prodotto container con AWS Marketplace Metering Service. Puoi definire le tue unità di prezzo e la misurazione personalizzata per tale utilizzo e per la fatturazione utilizzando AWS il funzionamento dell'API. [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html) L'esempio seguente delinea un'implementazione che utilizza il servizio di misurazione AWS SDK per Java per l'integrazione con il funzionamento del servizio di [Marketplace AWS misurazione](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html). `MeterUsage` 

Per tutti i dettagli completi, consultare [`MeterUsage`Esempi di Java](#meterusage-java-example). Molti dei passaggi seguenti si applicano indipendentemente dalla lingua. 

**Esempio: integrazione del servizio Marketplace AWS di misurazione**

1. Accedi alla [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/tour).

1. Da **Assets**, scegli **Containers** per iniziare a creare un nuovo prodotto container. La creazione del prodotto genera il codice prodotto per il prodotto da integrare con l'immagine del contenitore. Per informazioni sull'impostazione delle autorizzazioni AWS Identity and Access Management (IAM), consulta[Marketplace AWS autorizzazioni API di misurazione e autorizzazione](iam-user-policy-for-aws-marketplace-actions.md).

1.  Scarica l'[SDK AWS Java](https://aws.amazon.com/sdk-for-java/) pubblico. 
**Importante**  
 Per chiamare le operazioni dell'API di misurazione da Amazon Elastic Kubernetes Service (Amazon EKS)[, devi AWS utilizzare](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) un SDK supportato ed eseguirlo su un cluster Amazon EKS che esegue Kubernetes 1.13 o versione successiva. 

1. Chiama l'`MeterUsage`operazione dal task o dal pod una volta all'ora per ogni utilizzo di dimensione. L'operazione API accetta un record di misurazione per una combinazione unica di `Dimension``Resource`, e`Hour`. La risorsa è un'attività Amazon Elastic Container Service (Amazon ECS) o un 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.
   }
   ```
**Nota**  
È possibile riscontrare problemi transitori nella connessione a. AWS Marketplace Metering Service Marketplace AWS consiglia vivamente di implementare nuovi tentativi per un massimo di 30 minuti, con backoff esponenziale, per evitare interruzioni a breve termine o problemi di rete.

1. Ricostruisci una nuova versione dell'immagine del contenitore che includa la `MeterUsage` chiamata, tagga il contenitore e inviala a qualsiasi registro Docker compatibile con Amazon ECS o Amazon EKS, come Amazon Elastic Container Registry (Amazon ECR). Se utilizzi Amazon ECR, assicurati che l'account che avvia l'attività Amazon ECS o il pod Amazon EKS disponga delle autorizzazioni per l'archivio Amazon ECR. In caso contrario, l'operazione non va a buon fine.

1. Crea un ruolo [IAM](https://aws.amazon.com/iam/) che conceda l'autorizzazione alla chiamata del contenitore`MeterUsage`, come definito nel seguente esempio di codice. È necessario fornire questo ruolo AWS Identity and Access Management (IAM) nel parametro [Task Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) della definizione del task Amazon ECS o del pod Amazon EKS.

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

****  

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

------

1. Crea un'attività Amazon ECS o una definizione del pod Amazon EKS che faccia riferimento al contenitore integrato Marketplace AWS e che faccia riferimento al ruolo IAM creato nella fase 6. Se desideri visualizzare la registrazione, abilita la AWS CloudTrail registrazione nella definizione dell'attività. 

1. Crea un cluster Amazon ECS o Amazon EKS per eseguire la tua attività o il tuo pod. Per ulteriori informazioni sulla creazione di un cluster Amazon ECS, consulta [Creating a cluster](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html) nella *Amazon Elastic Container Service Developer Guide*. [Per ulteriori informazioni sulla creazione di un cluster Amazon EKS (utilizzando Kubernetes versione 1.1.3.x o successiva), consulta Creazione di un cluster Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html)

1. Configura il cluster Amazon ECS o Amazon EKS e avvia la definizione di attività Amazon ECS o il pod Amazon EKS che hai creato nella fase 8, nella regione us-east-1. AWS È solo durante questo processo di test, prima che il prodotto sia disponibile, che devi utilizzare questa regione.

1. Quando ricevi una risposta valida `MeterUsage` per ciascuna delle dimensioni pubblicate per il prodotto, puoi iniziare a creare il tuo prodotto contenitore. Per domande, contatta il team [operativo Marketplace AWS del venditore](https://aws.amazon.com/marketplace/management/contact-us/). 

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

I seguenti esempi di codice utilizzano AWS Marketplace Metering Service per chiamare l'`MeterUsage`operazione. AWS SDK per Java 

Il seguente esempio di codice chiama l'`MeterUsage`operazione senza alcuna`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);
    }
}
```

Il seguente esempio di codice richiama l'`MeterUsage`operazione con`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();
    }
```

# Prezzi contrattuali per prodotti in container con AWS License Manager
<a name="container-license-manager-integration"></a>

Per i prodotti basati su container con prezzi contrattuali, puoi usarli AWS License Manager per associare le licenze al tuo prodotto. AWS License Manager è uno strumento di gestione delle licenze che consente all'applicazione di tenere traccia e aggiornare le licenze (note anche come autorizzazioni) acquistate da un cliente. Questa sezione fornisce informazioni su come integrare il prodotto con. AWS License Manager Una volta completata l'integrazione, puoi pubblicare la tua scheda di prodotto su Marketplace AWS.

Se stai integrando License Manager con un prodotto Marketplace AWS for Containers Anywhere per Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon Elastic Compute Cloud (Amazon EC2) Elastic Compute Cloud (Amazon EC2) o un'infrastruttura locale, segui le istruzioni riportate in. [Integrazione di an Marketplace AWS for Containers Anywhere con License Manager](container-anywhere-license-manager-integration.md)

*Per ulteriori informazioni in merito AWS License Manager, consulta la [Guida per l'AWS License Manager utente e la [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)sezione del Command](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) Reference.AWS CLI *

Per ulteriori informazioni sull'integrazione AWS License Manager con i prodotti container con prezzi contrattuali, consulta il laboratorio [Integrazione con pagamento anticipato](https://catalog.workshops.aws/mpseller/en-US/container/integrate-contract) del workshop per i *Marketplace AWS venditori*.

**Topics**
+ [

## Prezzi contrattuali per i prodotti in container
](#container-contracts)
+ [

## Modelli di licenza
](#container-LM-license-models)
+ [

## AWS License Manager prerequisiti di integrazione
](#container-LM-prereqs)
+ [

## Integrazione di un prodotto contenitore con License Manager
](#container-integrate-with-LM)
+ [

## Operazioni dell'API License Manager
](#container-LM-API-calls)
+ [

## Rinnovi e aggiornamenti delle licenze
](#container-LM-lic-renew-upgrade)
+ [

# Integrazione di an Marketplace AWS for Containers Anywhere con License Manager
](container-anywhere-license-manager-integration.md)

## Prezzi contrattuali per i prodotti in container
<a name="container-contracts"></a>

Per i prodotti basati su container con prezzi contrattuali, Marketplace AWS fattura i clienti in anticipo o in base al piano di pagamento da te definito, in base al contratto tra te e il cliente. Dopo quel punto, hanno il diritto di utilizzare tali risorse. 

Per impostare i prezzi, scegli una o più durate contrattuali che offri ai clienti. Puoi inserire prezzi diversi per ogni durata del contratto. Le opzioni disponibili sono durate di 1 mese, 12 mesi, 24 mesi e 36 mesi. Per le offerte private, puoi specificare una durata personalizzata in mesi (fino a 60 mesi). 

Scegli la categoria che meglio descrive il prezzo del tuo prodotto. La categoria di prezzo viene visualizzata dai clienti sul Marketplace AWS sito web. **Puoi scegliere tra **larghezza di banda** (GB/s, MB/s), **dati** (GB, MB, TB), **host**, **richieste**, **livelli** o utenti.** **Se nessuna delle categorie predefinite soddisfa le tue esigenze, puoi scegliere la categoria più generica di Unità.** 

L'offerta consente di aggiungere fino a 24 dimensioni.


**Esempio: applicazione di archiviazione dati**  

|   | Prezzo per 1 mese | Prezzo per 12 mesi  | Prezzo per 24 mesi  | Prezzo per 36 mesi  | 
| --- | --- | --- | --- | --- | 
|  Dati non crittografati (GB)  |  1,50 USD/GB  |  \$116,00/GB  |  \$130,00/GB  |  \$160,00/GB  | 
|  Dati crittografati (GB)  |  1,55 USD/GB  |  \$116,60/GB  |  \$131,20/GB  |  \$161,20/GB  | 


**Esempio: prodotto per il monitoraggio dei log**  

|   | Prezzo per 1 mese | Prezzo per 12 mesi  | Prezzo per 24 mesi | Prezzo per 36 mesi | 
| --- | --- | --- | --- | --- | 
|  Base (10 host monitorati, 5 container monitorati)  |  \$1100  |  \$11000  | 2000 dollari  | 4000 dollari | 
|  Standard (20 host monitorati, 10 container monitorati)  |  \$1200  |  2000\$1  | 4000 dollari  | 8000 dollari | 
|  Pro (40 host monitorati, 20 container monitorati)  |  400 dollari  |  4000 dollari  | 8000 dollari  | 16.000\$1 | 
|  Host aggiuntivi monitorati ogni ora  | \$110  | \$1100  |  \$1200 | 400 dollari | 
|  Contenitori aggiuntivi monitorati ogni ora  | \$110  | \$1100  |  \$1200 | 400 dollari | 

**Nota**  
I prezzi possono essere per le seguenti durate: 1 mese, 12 mesi, 24 mesi o 36 mesi. Puoi scegliere di offrire una o più di queste opzioni per il tuo prodotto. Le durate devono essere le stesse in ogni dimensione.   

**Example**  
Ad esempio, nel caso in cui tu abbia `ReadOnlyUsers` delle `AdminUsers` dimensioni, se offri un prezzo annuale per ReadOnlyUsers, devi offrire anche un prezzo annuale per`AdminUsers`.


### Rinnovi automatici
<a name="ami-contracts-automatic-renewals"></a>

 Quando i clienti acquistano il prodotto Marketplace AWS utilizzando contratti relativi ai container, possono accettare di rinnovare automaticamente i termini del contratto. I clienti continuano a pagare i diritti ogni mese o per 1, 2 o 3 anni. 

I clienti possono modificare le impostazioni di rinnovo in qualsiasi momento. Per ulteriori informazioni, consulta [Modifica di un contratto esistente](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-container-contracts.html#modify-existing-contract) nella *Guida all'Marketplace AWS acquisto*.

## Modelli di licenza
<a name="container-LM-license-models"></a>

Marketplace AWS integrazione con AWS License Manager supporta due modelli di licenza:
+ [Modello di licenza configurabile](#container-LM-config-lic-model)
+ [Modello di licenza a più livelli](#container-LM-tiered-lic-model)

### Modello di licenza configurabile
<a name="container-LM-config-lic-model"></a>

Il modello di licenza configurabile (noto anche come modello di licenza quantificabile) dà diritto a un acquirente a una quantità specifica di risorse dopo che l'acquirente si è procurato una licenza. 

Hai impostato una dimensione di prezzo e un prezzo unitario. L'acquirente può quindi scegliere la quantità di risorse che desidera acquistare.

**Example della dimensione dei prezzi e del prezzo unitario**  
Puoi impostare una dimensione di prezzo (come il backup dei dati) e un prezzo unitario (ad esempio 30 USD per unità).  
L'acquirente può scegliere di acquistare 5, 10 o 20 unità.   
Il prodotto monitora e misura l'utilizzo per misurare la quantità di risorse consumate.

Con il modello di configurazione, i diritti vengono conteggiati in due modi:
+ [Licenze Drawdown](#container-floating-lic)
+ [Licenze fluttuanti](#container-floating-lic) 

#### Licenza Drawdown
<a name="container-drawndown-lic"></a>

 La licenza viene prelevata dal pool di licenze consentite al momento dell'uso. Tale autorizzazione viene verificata in modo permanente e non può essere restituita al pool di licenze.

**Example di elaborare una quantità limitata di dati**  
Un utente ha il diritto di elaborare 500 GB di dati. Man mano che continuano a elaborare i dati, la quantità viene prelevata dal pool di 500 GB fino a esaurire tutte le licenze da 500 GB.

Per le licenze drawdown, è possibile utilizzare l'operazione `CheckoutLicense` API per verificare le unità di licenza (diritti) utilizzate. 

**Example di backup su Amazon S3 per un certo numero di unità/anno**  
Disponi di un prodotto di storage che consente il backup su Amazon Simple Storage Service per un massimo di 1.024 unità di dati per un anno. L'applicazione può essere avviata utilizzando più istanze Amazon EC2. L'applicazione dispone di un meccanismo per tracciare e aggregare i dati. Il software richiama il funzionamento dell'`CheckoutLicense`API con l'ID del prodotto a ogni backup o a intervalli fissi per aggiornare le quantità consumate.   
In questo esempio, il software richiama l'operazione `CheckoutLicense` API per il check-out di 10 unità di dati. Quando la capacità totale raggiunge il limite di backup acquistato dal cliente, la chiamata API non riesce.

**Richiesta**

```
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"
```

**Risposta**

```
{"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"
}
```

#### Licenze fluttuanti
<a name="container-floating-lic"></a>

 La licenza viene restituita al pool del numero consentito di licenze dopo l'uso.

Per le licenze flottanti, l'applicazione estrae i permessi dal pool di autorizzazioni utilizzando l'operazione `CheckoutLicense` API quando la risorsa viene utilizzata. La risposta dell'operazione `CheckoutLicense` API include un token di consumo della licenza che è un identificatore univoco per il checkout. Il token di utilizzo della licenza può essere utilizzato per eseguire azioni aggiuntive sui diritti oggetto di check-out, ad esempio inserirli nuovamente nella licenza o estendere il check-out.

Per ricontrollare i diritti nel pool, utilizza l'operazione `CheckInLicense` API quando la risorsa non è più in uso.

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

In caso di mancato check-in dell'autorizzazione (nel caso in cui l'applicazione si sia bloccata), l'autorizzazione torna automaticamente nel pool dopo 60 minuti. Se la risorsa viene utilizzata per più di 60 minuti, è consigliabile mantenere l'autorizzazione esclusa dal pool utilizzando l'operazione `ExtendLicenseConsumption` API per tutto il tempo in cui la risorsa viene utilizzata.

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

**Example del numero di utenti a partire da un limite massimo fisso**  
Un utente ha diritto a 500 utenti simultanei sull'applicazione. Quando gli utenti accedono e si disconnettono, gli utenti vengono estratti e restituiti al pool di 500 utenti. Tuttavia, l'applicazione non può attirare più di 500 utenti dal pool perché 500 utenti simultanei è il limite massimo fisso.

Per le autorizzazioni fluttuanti, è possibile utilizzare l'operazione `CheckInLicense` API per restituire le unità di licenza al pool di autorizzazioni. 

**Example del numero di utenti simultanei per un anno**  
Il prezzo del prodotto è basato sul numero di utenti simultanei. Il cliente acquista una licenza per 10 utenti per un anno. Il cliente avvia il software fornendo le autorizzazioni AWS Identity and Access Management (IAM). Quando un utente effettua l'accesso, l'applicazione richiama l'operazione `CheckoutLicense` API per ridurre la quantità di 1. Quando l'utente si disconnette, l'applicazione restituisce la licenza al pool chiamando l'operazione `CheckInLicense` API. Se non chiami`CheckInLicense`, l'unità di licenza verrà automaticamente registrata dopo 1 ora.

**Nota**  
Nella richiesta seguente, `key-fingerprint` non è un valore segnaposto ma il valore effettivo dell'impronta digitale con cui verranno pubblicate tutte le licenze.

**Richiesta**

```
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"
```

**Risposta**

```
{
  "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"
}
```

### Modello di licenza a più livelli
<a name="container-LM-tiered-lic-model"></a>

Il modello di licenza a più livelli dà diritto a un acquirente a un livello o livello specifico di funzionalità dell'applicazione dopo che l'acquirente ha acquistato una licenza. 

Puoi creare livelli per il tuo prodotto, come Basic, Intermediate e Premium. L'acquirente seleziona quindi uno dei livelli predefiniti.

L'applicazione non ha bisogno di tracciare o misurare l'utilizzo dell'applicazione.

Con il modello di licenza a più livelli, i diritti non vengono conteggiati, ma indicano invece un livello di servizio acquistato dal cliente. 

Se desideri offrire insieme funzionalità in bundle, sono preferibili i livelli. 

**Example dei livelli Basic, Intermediate e Premium**  
Un cliente può firmare un contratto per uno dei tre possibili livelli del software: Basic, Intermediate o Premium. Ciascuno di questi livelli ha i propri prezzi. Il software è in grado di identificare il livello a cui il cliente si è registrato richiamando l'operazione `CheckoutLicense` API e specificando tutti i livelli possibili nella richiesta.   
La risposta alla richiesta contiene l'autorizzazione corrispondente al livello acquistato dal cliente. Sulla base di queste informazioni, il software è in grado di fornire al cliente un'esperienza adeguata.

#### Richiesta
<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"
```

#### Risposta
<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 prerequisiti di integrazione
<a name="container-LM-prereqs"></a>

Prima di pubblicare il prodotto, è necessario effettuare le seguenti operazioni:

1. Crea un nuovo prodotto contenitore in e prendi nota del relativo codice prodotto. Portale di gestione Marketplace AWS

   Per ulteriori informazioni, consulta [Panoramica: crea un prodotto contenitore](container-product-getting-started.md#create-container-product).

1. Utilizza un ruolo IAM per l'attività o il pod che esegue l'applicazione con le autorizzazioni IAM necessarie per chiamare `CheckoutLicense` le `ExtendLicenseConsumption` operazioni dell'`CheckInLicense`API e.

   Le autorizzazioni IAM richieste sono dettagliate nella seguente politica IAM.

------
#### [ 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. Effettua una chiamata di prova all'operazione `RegisterUsage` API con un record per tutte le dimensioni di prezzo che definisci.

## Integrazione di un prodotto contenitore con License Manager
<a name="container-integrate-with-LM"></a>

**Per integrare il prodotto basato su container con License Manager**

1. Imposta le autorizzazioni IAM per chiamare License Manager. Per ulteriori informazioni, consulta [AWS License Manager prerequisiti di integrazione](#container-LM-prereqs).

1. Scarica l' AWS SDK.
**Nota**  
Non configurate AWS le credenziali all'interno del vostro software. AWS le credenziali per l'acquirente vengono ottenute automaticamente in fase di esecuzione quando il container è in esecuzione all'interno di un'istanza Amazon EC2, un'attività Amazon ECS o un pod Amazon EKS.

1. Aggiungi controlli di licenza al tuo prodotto.

   Il prodotto può richiamare l'operatività dell'`CheckoutLicense`API ovunque debba essere eseguito il controllo della licenza. Per verificare la licenza, il prodotto deve sapere:

   1. L'emittente affidabile della licenza ()Marketplace AWS

   1. Lo SKU del prodotto (ID del prodotto) dell'applicazione

   1. Il diritto a verificare la presenza di questa applicazione

   Le chiamate API variano in base al tipo di licenze tariffarie configurate.

1. Pubblica la tua scheda di prodotti su. Marketplace AWS

## Operazioni dell'API License Manager
<a name="container-LM-API-calls"></a>

Per gestire le licenze archiviate nell'account License Manager del cliente, il software può utilizzare le seguenti operazioni API:
+ `GetLicense`— Un'API che il software può interrogare. Recupera lo stato di una licenza acquistata (ossia scaduta o in scadenza a breve) e invia una notifica di stato al cliente.
+ `CheckoutLicense`— Scopre le licenze acquistate dall'utente. È inoltre possibile utilizzare l'operazione `CheckoutLicense` API per aggiornare la quantità di licenze quando l'utente ha consumato una certa quantità di licenze. Con`CheckoutLicense`, puoi continuare a controllare le quantità di licenze utilizzate dal cliente. Quando il cliente esaurisce tutte le licenze, questa chiamata restituisce un errore. Per informazioni sulla cadenza di esecuzione consigliata, consulta. `CheckoutLicense` [Rinnovi e aggiornamenti delle licenze](#container-LM-lic-renew-upgrade)
+ `ExtendLicenseConsumption`— In caso di dimensioni variabili, quando il software rileva una licenza, la licenza tornerà automaticamente nel pool dopo 60 minuti. Se desideri prolungare il periodo di validità della licenza, utilizza l'operazione `ExtendLicenseConsumption` API per estendere la licenza per altri 60 minuti.
+ `CheckInLicense`— In caso di dimensioni mobili, quando desideri restituire la licenza al pool di autorizzazioni, utilizza l'`CheckInLicense`operazione API.
+ `ListReceivedLicenses`API: elenca le licenze acquistate dall'acquirente.

## Rinnovi e aggiornamenti delle licenze
<a name="container-LM-lic-renew-upgrade"></a>

I clienti possono rinnovare o aggiornare le proprie licenze su. Portale di gestione Marketplace AWS Dopo aver effettuato un acquisto aggiuntivo, Marketplace AWS genera una nuova versione della licenza che riflette i nuovi diritti. Il software legge le nuove autorizzazioni utilizzando le stesse operazioni API. Non è necessario fare nulla di diverso in termini di integrazione del License Manager per gestire i rinnovi e gli aggiornamenti.

A causa di rinnovi di licenza, upgrade, annullamenti e così via, consigliamo che il prodotto richiami l'operatività dell'`CheckoutLicense`API a cadenza regolare mentre il prodotto è in uso. Utilizzando il funzionamento dell'`CheckoutLicense`API a cadenza regolare, il prodotto è in grado di rilevare cambiamenti nelle autorizzazioni, ad esempio aggiornamenti e scadenze.

Ti consigliamo di eseguire la chiamata `CheckoutLicense` API ogni 15 minuti. 

# Integrazione di an Marketplace AWS for Containers Anywhere con License Manager
<a name="container-anywhere-license-manager-integration"></a>

In qualità di Marketplace AWS venditore, puoi effettuare l'integrazione AWS License Manager con un prodotto Marketplace AWS for Containers Anywhere per Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon EC2 o un'infrastruttura locale. Le seguenti sezioni forniscono istruzioni per questa integrazione.

Per informazioni generali sull'integrazione di License Manager con Marketplace AWS, inclusi i modelli di licenza disponibili, vedere[Prezzi contrattuali per prodotti in container con AWS License Manager](container-license-manager-integration.md). Per ulteriori informazioni in merito AWS License Manager, consulta la [Guida per AWS License Manager l'utente](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) e la [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)sezione del *AWS CLI Command Reference*.

**Topics**
+ [

## Integrazione di un prodotto Marketplace AWS for Containers Anywhere con License Manager
](#containers-anywhere-integrate-with-LM)
+ [

## Test dell'integrazione con License Manager a livello locale
](#container-testing-LM-integration-locally)
+ [

## Test dell'integrazione di License Manager su Amazon EKS
](#container-testing-LM-integration-EKS)
+ [

## Diritti di licenza fluttuanti con License Manager
](#container-LM-floating-license)
+ [

## Le migliori pratiche per l'integrazione con License Manager per le distribuzioni locali
](#container-LM-best-practices-on-prem)
+ [

## `LicenseManagerCredentialsProvider`- Implementazione Java
](#container-license-manager-cred-provider-java)
+ [

## `LicenseManagerCredentialsProvider`- implementazione `Golang`
](#container-license-manager-cred-provider-golang)

## Integrazione di un prodotto Marketplace AWS for Containers Anywhere con License Manager
<a name="containers-anywhere-integrate-with-LM"></a>

Utilizza le seguenti istruzioni per integrare il tuo prodotto Marketplace AWS for Containers Anywhere con AWS License Manager.

**Per integrare il prodotto Marketplace AWS for Containers Anywhere con License Manager**

1. Apri un browser Web e accedi a [Portale di gestione Marketplace AWS](https://aws.amazon.com/marketplace/management/).

1. Crea un ID prodotto per il tuo prodotto contenitore eseguendo i seguenti passaggi. Utilizzerai questo ID nell'immagine del contenitore per i controlli della licenza in una fase successiva.

   1. Dalla barra dei menu, espandi **Risorse** e scegli **Contenitore**.

   1. **Inserisci un nome rivolto ai clienti per il tuo prodotto e scegli Crea.** Puoi modificare questo nome in un secondo momento.

   1. Prendi nota dell'**ID del prodotto**. Lo utilizzerai per creare o aggiornare i dettagli dei prezzi del prodotto.
**Suggerimento**  
Se perdi l'ID del prodotto, puoi trovarlo nel menu **Risorse Portale di gestione Marketplace AWS ** scegliendo **Contenitore**. La pagina **Contenitori** mostra un elenco dei tuoi prodotti con il prodotto associato IDs.

1. Scarica l' AWS SDK pubblico più recente e installalo nell'applicazione contenitore. Puoi trovare le istruzioni di installazione per il tuo AWS SDK preferito in [Tools to Build on AWS](https://aws.amazon.com/tools/).
**Nota**  
Per richiamare le operazioni dell'API License Manager da Amazon EKS Anywhere o da un cluster Kubernetes non fornito da AWS, devi utilizzare un SDK supportato. AWS Per visualizzare un elenco di quelli supportati AWS SDKs, consulta [Utilizzo](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) di un SDK supportato. AWS 

1. Crea un AWS License Manager client con un provider di credenziali personalizzato in modo che possa fornire le credenziali all'applicazione contenitore distribuita sia in locale che in locale AWS . Per il codice sorgente completo per un provider di credenziali personalizzato`LicenseCredentialProvider`, consulta le seguenti sezioni:
   + [`LicenseManagerCredentialsProvider`- Implementazione Java](#container-license-manager-cred-provider-java)
   + [`LicenseManagerCredentialsProvider`- implementazione `Golang`](#container-license-manager-cred-provider-golang)

    `LicenseCredentialsProvider`estende la catena di provider di credenziali predefinita dell' AWS SDK per l'uso in locale aggiungendo. `LicenseManagerTokenCredentialsProvider` Ciò fornisce le credenziali utilizzando i token di identità emessi da License Manager OIDC in ambienti locali. È necessario includere il codice sorgente di nel classpath dell'applicazione`LicenseCredentialsProvider`.
**Nota**  
L'estensione `DefaultCredentialsProvider` consente alla stessa applicazione contenitore di ottenere le credenziali durante l'esecuzione in un ambiente locale AWS e durante l'esecuzione in un ambiente locale. Se l'applicazione contenitore utilizza già una catena di fornitori di credenziali personalizzata anziché quella predefinita, può anche essere estesa aggiungendola `LicenseManagerTokenCredentialsProvider` alla catena personalizzata.

   Il seguente frammento di codice è un esempio di creazione di un AWS License Manager client utilizzando Java.

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

1. Chiama l'operazione `CheckoutLicense` API utilizzando il `aws license-manager checkout-license` comando di ogni immagine di contenitore a pagamento nella tua offerta di prodotti. Ciò verifica che l'acquirente sia autorizzato a utilizzare una licenza per l'applicazione. Se l'acquirente ha diritto alla richiesta, `CheckoutLicense` ci riesce e restituisce i diritti richiesti e i relativi valori. Se l'acquirente non ha diritto alla richiesta, `CheckoutLicense` genera un'eccezione.

   I seguenti parametri sono necessari quando si chiama l'operazione `CheckoutLicense` API:
   + `CheckoutType`— I valori validi sono `PROVISIONAL` o`PERPETUAL`:
     + Da utilizzare `PERPETUAL` quando la quantità di diritti prelevati dal pool sarà esaurita.

       Esempio: l'acquirente ha il diritto di elaborare 500 GB di dati. Man mano che continuano a elaborare i dati, la quantità viene prelevata ed esaurita dal pool di 500 GB.
     + `PROVISIONAL`Utilizzatelo per le licenze flottanti, in cui le autorizzazioni vengono estratte dal pool e restituite dopo l'uso.

       Esempio: l'utente ha diritto a 500 utenti simultanei sull'applicazione. Quando gli utenti accedono o si disconnettono, gli utenti vengono estratti o restituiti al pool di 500 utenti. Per ulteriori informazioni sui diritti di licenza fluttuanti, consulta. [Diritti di licenza fluttuanti con License Manager](#container-LM-floating-license)
   + `ClientToken`— Un identificatore univoco con distinzione tra maiuscole e minuscole. Si consiglia di utilizzare un UUID casuale per ogni richiesta univoca.
   + `Entitlements`— Un elenco di diritti da verificare.
     + Per i diritti relativi alle funzionalità, fornite le proprietà `Name` and `Unit` come segue.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "None"
       }
       ```
     + Per i diritti conteggiati, fornite le proprietà `Name``Unit`, e `Count` come segue.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "<Entitlement_Unit>",
         "Value": <Desired_Count>
       }
       ```
   + `KeyFingerprint`— L'impronta digitale chiave per le licenze rilasciate da è. Marketplace AWS `aws:294406891311:AWS/Marketplace:issuer-fingerprint` L'utilizzo di questa chiave digitale garantisce che la licenza sia rilasciata da Marketplace AWS e non da un'entità inaffidabile.
   + `ProductSKU`— L'ID del prodotto generato Portale di gestione Marketplace AWS nei passaggi precedenti.

   Il seguente frammento è un esempio di chiamata che utilizza l'operazione `CheckoutLicense` API utilizzando il. 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"
   ```
**Nota**  
Per controllare le licenze, le applicazioni container richiedono l'accesso alla rete in uscita per utilizzare License Manager. Le applicazioni distribuite in locale potrebbero presentare un accesso alla rete in uscita inaffidabile o lento. Queste applicazioni devono includere tentativi adeguati quando si chiama License Manager. Per ulteriori informazioni, consulta [Le migliori pratiche per l'integrazione con License Manager per le distribuzioni locali](#container-LM-best-practices-on-prem).

1. Chiamate il servizio operativo dell'`CheckoutLicense`API a cadenza regolare per identificare eventuali modifiche alle licenze dei clienti dovute a rinnovi, upgrade o cancellazioni effettuate il. Marketplace AWS La cadenza dipende dall'applicazione. Ti consigliamo di controllare le licenze una volta al giorno per rilevare automaticamente le modifiche senza l'intervento dell'acquirente.

   Un'applicazione distribuita in locale potrebbe avere un accesso inaffidabile alla rete in uscita per controllare le licenze con cadenza regolare. In questi casi, l'applicazione deve utilizzare licenze memorizzate nella cache per una resilienza sufficiente. Per ulteriori informazioni, consulta [Le migliori pratiche per l'integrazione con License Manager per le distribuzioni locali](#container-LM-best-practices-on-prem).

1. Dopo aver integrato la `CheckoutLicense` chiamata con l'applicazione contenitore, crea una nuova versione dell'immagine del contenitore Docker con le modifiche.

1. Aggiorna la tabella Helm dell'applicazione per accettare un segreto Kubernetes come input opzionale che contiene la configurazione per accedere alle licenze tramite License Manager. APIs Il segreto di configurazione conterrà un token di identità rilasciato da License Manager e un AWS Identity and Access Management ruolo che verrà utilizzato dal provider di credenziali personalizzate descritto in precedenza per ottenere AWS le credenziali per chiamare License Manager APIs quando l'applicazione contenitore viene distribuita in locale. Inoltre, aggiungi Regione AWS come input con un valore predefinito di. `us-east-1`

   Gli acquirenti che implementano l'applicazione container in locale possono creare il segreto di Kubernetes attraverso l'esperienza Marketplace AWS dell'acquirente per i prodotti container. Fornisci il nome segreto di Kubernetes come input per il comando. `helm install` Il segreto di configurazione è configurato nel seguente formato.

   ```
   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. Aggiorna il modello di distribuzione dell'applicazione nel grafico Helm per le immagini dei contenitori integrate con AWS License Manager per includere quanto segue:
   + Account di servizio per pod: l'account di servizio è necessario per le distribuzioni Helm su Amazon EKS. Viene utilizzato per ottenere le autorizzazioni per chiamare le operazioni dell'API License Manager impostando i ruoli IAM per l'account di servizio sull'immagine del contenitore. Per ulteriori informazioni sui ruoli IAM per gli account di servizio, consulta [Ruoli IAM per gli account di servizio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).
   + Accesso alla licenza per le distribuzioni locali: il segreto di configurazione della licenza è necessario per fornire le credenziali e le autorizzazioni appropriate per chiamare le operazioni dell'API License Manager per le distribuzioni Helm in ambienti locali. Gli acquirenti genereranno e forniranno il segreto della licenza a Helm in base all'esperienza dell'acquirente. Marketplace AWS 

   Il seguente frammento di codice è un esempio di specifica di distribuzione con l'account del servizio, la configurazione della licenza e l'image pull secret.

   ```
   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 }}
   ```
**Nota**  
Il segreto di configurazione della licenza è facoltativo. Gli acquirenti utilizzano il valore solo per le distribuzioni locali. Per le AWS distribuzioni, le specifiche di distribuzione devono includere un account di servizio per le immagini integrate di License Manager.

1. Verifica l'integrazione del License Manager localmente e su Amazon EKS eseguendo i passaggi nelle seguenti sezioni:

   1. [Test dell'integrazione con License Manager a livello locale](#container-testing-LM-integration-locally)

   1. [Test dell'integrazione di License Manager su Amazon EKS](#container-testing-LM-integration-EKS)

1. Dopo aver verificato con successo l'integrazione di License Manager AWS sia in locale che in locale, puoi creare la tua lista di prodotti container seguendo la procedura riportata di seguito. [Panoramica: crea un prodotto contenitore](container-product-getting-started.md#create-container-product)

## Test dell'integrazione con License Manager a livello locale
<a name="container-testing-LM-integration-locally"></a>

Puoi utilizzare minikube o qualsiasi altra configurazione per testare l'integrazione del License Manager su qualsiasi cluster Kubernetes a livello locale. Assicurati che il cluster Kubernetes disponga dell'accesso a Internet in uscita per chiamare le operazioni dell'API License Manager.

**Per testare localmente un'integrazione di License Manager**

1. Crea una licenza di prova in un account venditore di prova con i diritti desiderati. Per configurare una licenza di prova, consulta la sezione *AWS License Manager API [CreateLicense](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html)*Reference. In alternativa, utilizza lo script seguente per creare una licenza di prova e quindi creare una concessione di licenza a un account acquirente di prova per utilizzare la licenza. Lo script seguente utilizza le credenziali dell'account venditore di prova.

   ```
   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. Crea un segreto Kubernetes con il token di licenza e il ruolo IAM utilizzando il formato segreto definito in precedenza. Utilizza l'operazione `CreateToken` API License Manager per generare un token di licenza. Quindi, utilizza l'operazione `CreateRole` API IAM per creare un ruolo IAM con autorizzazioni e una policy di fiducia. Vedi l'esempio nello script seguente. Lo script seguente utilizza le credenziali dell'account acquirente di prova.

   ```
   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. Configura qualsiasi cluster Kubernetes ospitato all'esterno. AWS Usalo per verificare che le applicazioni container possano connettersi all' AWS License Manager API da ambienti diversi AWS e che il provider di credenziali personalizzate sia ben integrato nell'applicazione.

1. Distribuisci il token di licenza e il ruolo IAM generati in precedenza nel cluster Kubernetes locale.

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

1. Implementa la tua applicazione tramite Helm inserendo il nome segreto e verifica che l'applicazione possa richiamare le operazioni API di License Manager per eseguire i controlli di autorizzazione. Per le modifiche a Helm e alle specifiche di distribuzione, consulta la Fase 9 in. [Integrazione di un prodotto Marketplace AWS for Containers Anywhere con License Manager](#containers-anywhere-integrate-with-LM)

## Test dell'integrazione di License Manager su Amazon EKS
<a name="container-testing-LM-integration-EKS"></a>

Puoi anche testare l'integrazione di License Manager su Amazon EKS. Esegui un test per assicurarti che l'applicazione possa richiamare le operazioni API di License Manager senza il segreto di configurazione della licenza. Assicurati inoltre che l'account di servizio possa essere utilizzato per configurare IAM Roles for Service Accounts (IRSA) e fornire le credenziali pertinenti all'applicazione.

**Per testare un'integrazione di License Manager su Amazon EKS**

1. Crea una licenza di prova in un account venditore di prova con i diritti desiderati. Consulta il [riferimento all'CreateLicense API](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html) per configurare la tua licenza di prova oppure usa lo script seguente per crearne una e concedere una licenza a un account acquirente di prova per utilizzare la licenza. Lo script seguente utilizza le credenziali dell'account venditore di prova.

   ```
   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. Crea un cluster Amazon EKS di prova delle configurazioni desiderate o esegui i seguenti comandi per utilizzare una configurazione predefinita.

   ```
   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. Crea un account di servizio per un cluster esistente e associalo a un ruolo IAM. Il comando seguente crea un ruolo IAM con`AWSLicenseManagerConsumptionPolicy`. Quindi, il comando lo collega all'account di `test_sa` servizio del cluster Amazon EKS in cui devono essere distribuite le immagini integrate di License Manager. Di conseguenza, l'account del servizio può ottenere le credenziali appropriate per chiamare le operazioni API di License Manager.

   ```
   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. Distribuisci l'applicazione tramite Helm nell'account di servizio in cui il ruolo IAM è associato al comando precedente. Verificate che l'applicazione sia in grado di richiamare le operazioni dell'API License Manager per eseguire i controlli delle autorizzazioni.

## Diritti di licenza fluttuanti con License Manager
<a name="container-LM-floating-license"></a>

Con le licenze fluttuanti, quando gli utenti accedono all'applicazione, viene estratta una licenza dal pool di licenze disponibili. Quando gli utenti si disconnettono, le licenze vengono aggiunte nuovamente al pool di licenze disponibili.

Per le licenze flottanti, l'applicazione utilizza l'operazione `CheckoutLicense` API per estrarre le autorizzazioni dal pool di autorizzazioni quando viene utilizzata la risorsa. La risposta dell'operazione `CheckoutLicense` API include un token di consumo della licenza che è un identificatore univoco per il checkout. Il token di utilizzo delle licenze può eseguire azioni aggiuntive sui diritti di accesso sottoposti a check-out, ad esempio archiviarli nuovamente nel pool di licenze o estendere il check-out.

Quando la risorsa non è più in uso, l'applicazione utilizza l'operazione `CheckInLicense` API per ricontrollare l'autorizzazione nel pool.

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

Se il ripristino di una licenza nel pool non riesce, ad esempio, se l'applicazione si blocca durante l'operazione, l'autorizzazione viene ricontrollata automaticamente nel pool dopo 60 minuti. Per questo motivo, se la risorsa viene utilizzata per più di 60 minuti, è consigliabile mantenere l'autorizzazione selezionata dal pool. A tale scopo, utilizzate l'operazione `ExtendLicenseConsumption` API fintanto che la risorsa viene utilizzata.

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

## Le migliori pratiche per l'integrazione con License Manager per le distribuzioni locali
<a name="container-LM-best-practices-on-prem"></a>

Le implementazioni di applicazioni container in un ambiente locale potrebbero comportare un accesso inaffidabile alla rete in uscita. Utilizza le seguenti best practice per aggiungere resilienza ed evitare interruzioni del servizio agli acquirenti a causa di potenziali problemi causati da una scarsa connettività Internet:
+ **Riprova adeguata**: problemi transitori di rete possono impedire la connessione dell'applicazione. AWS License Manager Implementa nuovi tentativi per un massimo di 30 minuti, con backoff esponenziale. Questo può aiutare a evitare interruzioni a breve termine o problemi di rete.
+ **Evita i limiti rigidi**: le applicazioni distribuite in cluster connessi possono controllare regolarmente le licenze per identificare eventuali modifiche dovute ad aggiornamenti o rinnovi. Con un accesso in uscita inaffidabile, l'applicazione potrebbe non essere in grado di identificare tali modifiche. Ove possibile, l'applicazione dovrebbe evitare interruzioni del servizio agli acquirenti dovute all'impossibilità di controllare le licenze tramite License Manager. Le applicazioni possono ricorrere a una versione di prova gratuita o open source alla scadenza della licenza e non possono verificare se una licenza è valida.
+ **Informa i clienti**: quando si utilizza una licenza memorizzata nella cache, eventuali modifiche alla licenza (inclusi rinnovi o aggiornamenti) non si riflettono automaticamente sul carico di lavoro in esecuzione. Informa i tuoi clienti (che devono consentire nuovamente e temporaneamente l'accesso in uscita all'applicazione) in modo che l'applicazione possa aggiornare la licenza memorizzata nella cache. Ad esempio, informate i clienti tramite l'applicazione stessa o tramite la relativa documentazione. Analogamente, quando ricorri a una serie inferiore di funzionalità, comunica ai clienti che i loro diritti sono esauriti o che la licenza è scaduta. Quindi, possono scegliere di eseguire l'aggiornamento o il rinnovo.

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

`LicenseCredentialsProvider`estende la catena di provider di credenziali predefinita dell' AWS SDK per l'uso in locale aggiungendo. `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`fornisce credenziali utilizzando token di identità emessi da License Manager OIDC in ambienti locali. È necessario includere il codice sorgente di nel percorso di classe dell'applicazione`LicenseCredentialsProvider`.

```
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`- implementazione `Golang`
<a name="container-license-manager-cred-provider-golang"></a>

**`LicenseCredentialsProvider`**

`LicenseCredentialsProvider`estende la catena di provider di credenziali predefinita dell' AWS SDK per l'uso in locale aggiungendo. `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`fornisce credenziali utilizzando token di identità emessi da License Manager OIDC in ambienti locali. È necessario includere il codice sorgente di nel percorso di classe dell'applicazione`LicenseCredentialsProvider`.

```
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
	}
}
```

# Notifiche Amazon SNS per prodotti container
<a name="container-notification"></a>

Per ricevere notifiche, puoi abbonarti agli argomenti di Amazon Simple Notification Service (Amazon SNS) forniti durante Marketplace AWS la creazione del prodotto. Gli argomenti forniscono notifiche sulle modifiche agli abbonamenti dei clienti per i tuoi prodotti. Ad esempio, puoi utilizzare queste notifiche per sapere quando i clienti accettano un'offerta privata. 

**Nota**  
Durante il processo di creazione del prodotto, viene creato un argomento Amazon SNS per il prodotto. Per sottoscrivere le notifiche, è necessario l'Amazon Resource Name (ARN) dell'argomento Amazon SNS (ad esempio,). `arn:aws:sns:us-east-1:123456789012:aws-mp-subscription-notification-PRODUCTCODE` L'ARN non è disponibile nel portale dei venditori per i prodotti server. Contatta il [team Marketplace AWS operativo](https://aws.amazon.com/marketplace/management/contact-us) per richiedere l'ARN.

Il seguente argomento di Amazon SNS è disponibile per i prodotti container:
+ [Argomento di Amazon SNS: `aws-mp-subscription-notification`](#container-sns-subscription-message-body)— Questo argomento ti avvisa quando un acquirente sottoscrive o annulla l'iscrizione a un prodotto. È disponibile per i modelli di tariffazione oraria, compresi quelli orari e orari per periodi a lungo termine.

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

Ogni messaggio nell'`aws-mp-subscription-notification`argomento ha il seguente formato.

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

*<action-name>*Varierà a seconda della notifica. Le azioni possibili sono:
+ `subscribe-success`
+ `subscribe-fail`
+ `unsubscribe-pending`
+ `unsubscribe-success`

`offer-identifier`È incluso nella notifica solo quando l'azione è `subscribe-success` o`subscribe-fail`. Non è incluso nelle notifiche quando l'azione è `unsubscribe-pending` o`unsubscribe-success`. Per le offerte create prima del gennaio 2024, questo identificatore è incluso nella notifica solo per le offerte private. Per le offerte create a gennaio 2024 e versioni successive, questo identificatore è incluso nelle notifiche di tutte le offerte, incluse le offerte private e le offerte pubbliche.

Per informazioni sui tipi di offerta, consulta la risposta dell'[DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity) o la visibilità dell'offerta di un accordo nella dashboard dei [rinnovi degli accordi](https://docs.aws.amazon.com//marketplace/latest/userguide/agreements-renewals-dashboard.html).

**Nota**  
 Per quanto riguarda l'[DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity), se trovi un Account AWS aspetto della regola di targeting relativo all'account per quell'offerta, si tratta di un'offerta privata. Se Account AWS nell'account non è presente un aspetto della regola di targeting per quell'offerta, si tratta di un'offerta pubblica.

## Sottoscrizione di una coda Amazon SQS all'argomento Amazon SNS
<a name="subscribing-sqs-queue-to-sns-topic"></a>

Ti consigliamo di iscriverti a una coda Amazon SQS per gli argomenti SNS forniti. *Per istruzioni dettagliate sulla creazione di una coda SQS e sulla sottoscrizione della coda a un argomento, consulta Sottoscrizione di una coda [Amazon SQS a un argomento Amazon SNS nella Amazon Simple Notification Service Developer Guide](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html).*

**Nota**  
Puoi abbonarti solo agli argomenti Marketplace AWS SNS di chi vende i prodotti. Account AWS Tuttavia, puoi inoltrare i messaggi a un altro account. Per ulteriori informazioni, consulta [Invio di messaggi Amazon SNS a una coda Amazon SQS in un account diverso nella](https://docs.aws.amazon.com/sns/latest/dg/sns-send-message-to-sqs-cross-account.html) Amazon *Simple Notification Service Developer Guide*.

### Sondaggio della coda SQS per le notifiche
<a name="polling-the-sqs-for-notifications"></a>

Dopo aver sottoscritto la coda SQS a un argomento SNS, i messaggi vengono archiviati in SQS. È necessario definire un servizio che effettui continuamente il polling della coda, cerchi i messaggi e li gestisca di conseguenza.