

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Produkte auf Containerbasis auf AWS Marketplace
<a name="container-based-products"></a>

**Wichtig**  
Am 1. März 2026 AWS Marketplace wird Quick Launch für Helm-Chart-Bereitstellungen auf Amazon EKS eingestellt. Bestehende Bereitstellungen werden weiterhin normal ausgeführt. Sie können die Bereitstellung weiterhin mit standardmäßigen Helm-Befehlen oder Container-Images auf Amazon ECS durchführen.

AWS Marketplace unterstützt Softwareprodukte, die Docker-Container verwenden. Container-Produkte bestehen aus Bereitstellungsoptionen, bei denen es sich um eine Reihe von Container-Images und Bereitstellungsvorlagen handelt, die zusammenpassen. Sie reichen mindestens eine Lieferoption für Ihr Produkt ein, maximal jedoch vier. Für jede Versandoption stellen Sie eine Reihe von Container-Images, Nutzungsanweisungen und Links zu Bereitstellungsvorlagen bereit, damit Kunden diese Versandoption starten können. Dieses Thema enthält Informationen zu containerbasierten Produkten auf. AWS Marketplace

AWS Marketplace Käufer sehen die verfügbaren Lieferoptionen auf den veröffentlichten Produktdetailseiten, die ihnen zur Verfügung stehen. Nachdem sie das Produkt abonniert und ihre bevorzugte Versandoption ausgewählt haben, werden den Käufern Informationen und Anweisungen zur Markteinführung und Verwendung des Produkts angezeigt. Bei den Lieferoptionen für Container-Images finden Käufer Links zu den verfügbaren Bereitstellungsvorlagen und dem Container-Image URLs. Sie erhalten außerdem Anweisungen zum Abrufen der einzelnen Container-Images. In Bezug auf die Lieferoptionen der Helm-Charts finden Käufer step-by-step Anweisungen zur Markteinführung mit Helm.

Einen Überblick über das Kauferlebnis finden Sie in diesem Video: [Deploying AWS Marketplace Containers on Amazon ECS Clusters](https://www.youtube.com/watch?v=XaiUAiQQJtk) (3:34).

Sie können Kubernetes-Anwendungen von Drittanbietern von jedem Kubernetes-Cluster in jeder Umgebung aus AWS Marketplace finden, abonnieren und bereitstellen. Sie können Kubernetes-Anwendungen von Drittanbietern auf Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) und lokal mit Amazon EKS Anywhere (EKS Anywhere) bereitstellen. AWS Fargate Sie können sie auch auf selbstverwalteten Kubernetes-Clustern vor Ort oder in Amazon Elastic Compute Cloud (Amazon) bereitstellen. EC2

Sie können Containerprodukte mit dem Modell „Free and Bring Your Own License“ (BYOL) auf jeder Docker-kompatiblen Laufzeit ausführen.

**Topics**
+ [Hilfe erhalten](#container-help)
+ [Erste Schritte mit Container-Produkten](container-product-getting-started.md)
+ [Produktanforderungen auf Containerbasis für AWS Marketplace](container-product-policies.md)
+ [Preise für Containerprodukte für AWS Marketplace](pricing-container-products.md)
+ [Integrationen für die Abrechnung, Messung und Lizenzierung von Container-Produkten](container-products-billing-integration.md)
+ [Amazon SNS SNS-Benachrichtigungen für Containerprodukte](container-notification.md)

## Hilfe erhalten
<a name="container-help"></a>

Wenn Sie Hilfe zu Ihren Container-Produkten benötigen, wenden Sie sich an Ihren Partner für Geschäftsentwicklung AWS Marketplace oder an das [AWS Marketplace Seller](https://aws.amazon.com/marketplace/management/contact-us/) Operations Team.

# Erste Schritte mit Container-Produkten
<a name="container-product-getting-started"></a>

Als AWS Marketplace Verkäufer können Sie containerbasierte Softwareprodukte erstellen. Container-Produkte bestehen aus Lieferoptionen, bei denen es sich um eine Reihe von Container-Images und Bereitstellungsvorlagen handelt, die zusammenpassen. Im folgenden Thema erfahren Sie, wie Sie mit Container-Produkten beginnen.
+ [Produktlebenszyklus](#container-product-lifecycle)
+ [Voraussetzungen](#container-prereq)
+  [Schritt 1: Erstellen Sie die Produkt-ID und den Produktcode für Ihr Container-Produkt](#create-initial-container-product) 
+ [Schritt 2: Erstellen Sie ein erstes Angebot](#container-initial-listing)
+ [Schritt 3: Fügen Sie eine erste Version Ihres Produkts hinzu](#container-add-version-gs)
+ [Schritt 4: (Nur für kostenpflichtige Produkte) Integrieren Sie die Messung oder die Preisgestaltung auf Vertragsbasis](#getting-started-integrate-metering)
+ [Nächste Schritte](#getting-started-integrate-metering)
+ [Das Container-Produkt sucht nach Sicherheitsproblemen](#container-security)

## Produktlebenszyklus
<a name="container-product-lifecycle"></a>

Wenn Sie ein Produkt in erstellen AWS Marketplace, wird es zunächst mit eingeschränkter Sichtbarkeit veröffentlicht, sodass Konten auf der Zulassungsliste es sehen können, einschließlich des Kontos, mit dem das Produkt erstellt wurde. Wenn Sie bereit sind, können Sie es im AWS Marketplace Katalog veröffentlichen, damit Käufer Ihr Produkt abonnieren und kaufen können.

Auf der [Server-Produktseite](https://aws.amazon.com/marketplace/management/products/server) können Sie die Liste Ihrer Produkte einsehen. Je nachdem, in welchem Stadium es sich befindet, hat das Produkt einen der folgenden Status.
+ **Staging** — Ein unvollständiges Produkt, für das Sie noch Informationen hinzufügen. Beim ersten **Speichern und Beenden** des Self-Service-Erlebnisses erstellt die erfolgreiche Änderungsanforderung ein unveröffentlichtes Produkt mit Informationen aus den abgeschlossenen Schritten, die Sie eingereicht haben. Von diesem Status aus können Sie weitere Informationen zum Produkt hinzufügen oder bereits eingereichte Daten über Änderungsanfragen ändern.
+ **Eingeschränkt** — Ein Produkt ist fertig, nachdem es an das System übermittelt wurde und alle Validierungen im System bestanden hat. Dann wird das Produkt in den Status „**Eingeschränkt**“ freigegeben. Zu diesem Zeitpunkt verfügt das Produkt über eine Detailseite, auf die nur Ihr Konto und die Personen, die Sie auf die Zulassungsliste gesetzt haben, zugreifen können. Sie können Ihr Produkt auf der Detailseite testen. Für weitere Informationen oder Hilfe wenden Sie sich an das [AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us/) Team.
+ **Öffentlich** — Wenn Sie bereit sind, das Produkt zu veröffentlichen, sodass Käufer das Produkt ansehen und abonnieren können, verwenden Sie die Anfrage zur Änderung der **Sichtbarkeit aktualisieren**. Diese Anfrage leitet einen Workflow ein, in dem das AWS Marketplace Seller Operations Team Ihr Produkt anhand der AWS Richtlinien überprüfen und prüfen kann. Nachdem das Produkt genehmigt und die Änderungsanfrage bearbeitet wurde, wird das Produkt vom Status „**Eingeschränkt**“ in „**Öffentlich**“ versetzt. Informationen zu AWS Richtlinien finden Sie unter[Produktanforderungen auf Containerbasis für AWS Marketplace](container-product-policies.md).
+ **Eingeschränkt** — Wenn Sie verhindern möchten, dass neue Benutzer Ihr Produkt abonnieren, können Sie das Produkt einschränken, indem Sie die Anfrage zur Änderung der **Sichtbarkeit aktualisieren** verwenden. Der Status „**Eingeschränkt**“ bedeutet, dass bestehende Benutzer auf der Zulassungsliste das Produkt weiterhin verwenden können. Das Produkt wird jedoch nicht mehr öffentlich sichtbar sein oder neuen Benutzern zur Verfügung stehen. 

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

Sie müssen die folgenden Voraussetzungen erfüllen, bevor Sie beginnen:

1. Verwenden Sie [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/). Mit diesem Tool registrieren Sie sich als Verkäufer und verwalten die Produkte, auf denen Sie verkaufen AWS Marketplace. Weitere Informationen finden Sie unter [AWS Marketplace Management Portal](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html#management-portal).

1. Registrieren Sie sich als Verkäufer und geben Sie Ihre Steuer- und Bankinformationen ein. Weitere Informationen finden Sie unter [Registrierungsprozess](registration-process.md).

1. Erstellen Sie mindestens einen Container in Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) oder. AWS Fargate Stellen Sie sicher, dass Sie Links für die zugehörigen Bilder haben.

1. Planen Sie, wie Sie Ihr Container-Produkt erstellen und integrieren werden AWS Marketplace.

   Wir empfehlen Ihnen, Ihre Preis-, Berechtigungs- und Messstrategie lange im Voraus vor der öffentlichen Veröffentlichung Ihres Produkts zu planen.
   + Informationen zu den Anforderungen für Produkte auf Containerbasis finden Sie unter. [Produktanforderungen auf Containerbasis für AWS Marketplace](container-product-policies.md)
   + Informationen zur Festlegung der Preise für Ihr Produkt finden Sie unter. [Preise für Containerprodukte für AWS Marketplace](pricing-container-products.md)
   + Informationen zur kundenspezifischen Dosierung für Ihr kostenpflichtiges Produkt auf Behälterbasis finden Sie unter. [Stündliche und benutzerdefinierte Messung mit AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products)

## Überblick: Erstellen Sie ein Container-Produkt
<a name="create-container-product"></a>

Das Erstellen eines Container-Produkts umfasst die folgenden Schritte:

1. [Schritt 1: Erstellen Sie die Produkt-ID und den Produktcode für Ihr Container-Produkt](#create-initial-container-product)

1. [Schritt 2: Erstellen Sie ein erstes Angebot](#container-initial-listing)

1. [Schritt 3: Fügen Sie eine erste Version Ihres Produkts hinzu](#container-add-version-gs)

1. [Schritt 4: (Nur für kostenpflichtige Produkte) Integrieren Sie die Messung oder die Preisgestaltung auf Vertragsbasis](#getting-started-integrate-metering)

1. [Aktualisieren Sie die Produktsichtbarkeit](#container-product-visibility)

Informationen zum Produktlebenszyklus finden Sie unter[Produktlebenszyklus](#container-product-lifecycle).

## Schritt 1: Erstellen Sie die Produkt-ID und den Produktcode für Ihr Container-Produkt
<a name="create-initial-container-product"></a>

Um mit einem Containerprodukt zu beginnen, müssen Sie eine Produkt-ID und einen Produktcode-Datensatz in erstellen AWS Marketplace. Die Produkt-ID wird verwendet, um Ihr Produkt während seines gesamten Lebenszyklus zu verfolgen.

Gehen Sie wie folgt vor, um ein neues Containerprodukt in der AWS Marketplace Management Portal zu erstellen und die Produkt-ID zu generieren.

**Anmerkung**  
Bei diesem Vorgang wird auch ein öffentlicher Schlüssel für Ihren Container erstellt, der zu Ihrem Produkt passt.

**Um die Produkt-ID des Containers zu erstellen**

1. Öffnen Sie einen Webbrowser, und melden Sie sich am [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie in der Menüleiste **Produkt** und dann **Server** aus.

1. Wählen Sie **Serverprodukt erstellen** und dann **Container**.

1. Generieren Sie eine Container-Produkt-ID und einen Code.
**Anmerkung**  
(Optional) Sie können Ihr Produkt für die Tag-basierte Autorisierung taggen. Weitere Informationen finden Sie unter [Markieren Ihrer AWS -Ressourcen](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html).

1. Wählen Sie **Weiter**, um mit der Erstellung Ihres Produkts fortzufahren.

## Schritt 2: Erstellen Sie ein erstes Angebot
<a name="container-initial-listing"></a>

Nachdem Sie die Produkt-ID, den Produktcode und den öffentlichen Schlüssel generiert haben, verwenden Sie einen Assistenten, um ein erstes Angebot zu erstellen.

1. Geben Sie Produktinformationen für Ihr Produktangebot ein.

1. Ermitteln Sie das Preismodell für Ihr Produkt.
**Anmerkung**  
Weitere Informationen finden Sie unter [Preise für Container-Produkte](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html).
**Anmerkung**  
Bei kostenpflichtigen Produkten beginnt Ihr Produkt mit einem Preis von 0,01 USD, sodass Sie und das AWS Marketplace Seller Operations Team das Produkt testen können, ohne dass hohe Kosten anfallen. Den tatsächlichen Preis geben Sie an, wenn Sie an die Börse gehen.

1. Geben Sie zusätzliche Angebotsinformationen an, einschließlich Rückerstattungsrichtlinien, EULA und Verfügbarkeit des Angebots.

1. Fügen Sie ein erstes Repository für Ihr Container-Produkt hinzu.

1. Wählen Sie im letzten Schritt „**Senden**“, um das Produkt in den Status Eingeschränkte Sichtbarkeit zu verschieben.
**Anmerkung**  
Ihr Container-Produkt wird zunächst mit einer Platzhalterversion erstellt. Sie fügen die endgültige Version hinzu, wenn das Produkt die Option Eingeschränkte Sichtbarkeit hat. 

## Schritt 3: Fügen Sie eine erste Version Ihres Produkts hinzu
<a name="container-add-version-gs"></a>

Ihr Produkt kann im Laufe seiner Lebensdauer mehrere Versionen haben. Jede Version hat eine Reihe von Container-Images, die für diese Version spezifisch sind. Informationen zum Hinzufügen einer ersten Version Ihres Produkts finden Sie unter[Hinzufügen einer neuen Version Ihres Container-Produkts auf AWS Marketplace](container-add-version.md). 

## Schritt 4: (Nur für kostenpflichtige Produkte) Integrieren Sie die Messung oder die Preisgestaltung auf Vertragsbasis
<a name="getting-started-integrate-metering"></a>

Bei containerbasierten Produkten mit Nutzungspreisen verwenden Sie den, um sowohl die Berechtigung [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)zur Nutzung Ihres Produkts zu überprüfen als auch die Nutzung für die Abrechnung zu messen. Sie müssen das Preismodell berücksichtigen, das Sie bei der Festlegung Ihrer Preisinformationen erstellt haben. Weitere Informationen finden Sie unter [Stündliche und benutzerdefinierte Messung mit AWS Marketplace Metering Service](container-products-billing-integration.md#entitlement-and-metering-for-paid-products).

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

Bei containerbasierten Produkten mit Vertragspreisen verwenden Sie die, AWS License Manager um Ihrem Produkt Lizenzen zuzuordnen. 

Weitere Informationen zur Integration mit AWS License Manager finden Sie unter. [Vertragspreise für Containerprodukte mit AWS License Manager](container-license-manager-integration.md)

## Schritt 5: Aktualisieren Sie die Produktsichtbarkeit
<a name="container-product-visibility-allowlist"></a>

Wenn Sie ein Produkt in erstellen AWS Marketplace, wird es zunächst mit eingeschränkter Sichtbarkeit veröffentlicht, sodass Konten auf der Zulassungsliste es sehen können, einschließlich des Kontos, mit dem das Produkt erstellt wurde. Sie können die Sichtbarkeit des Produkts aktualisieren, damit Käufer Ihr Produkt abonnieren und kaufen können. Alternativ können Sie die Liste der zugelassenen Produkte aktualisieren, um sie hinzuzufügen AWS-Konten. In diesem Thema erfahren Sie, wie Sie festlegen können, in AWS Marketplace welchen Käufern Ihr Produkt angesehen werden kann.

Weitere Informationen zur Sichtbarkeit und zum Lebenszyklus von Produkten finden Sie unter[Produktlebenszyklus](#container-product-lifecycle).

**Topics**
+ [Aktualisieren Sie die Produktsichtbarkeit](#container-product-visibility)
+ [Aktualisierung der Zulassungsliste von AWS-Konto IDs](#container-update-allowlist)

### Aktualisieren Sie die Produktsichtbarkeit
<a name="container-product-visibility"></a>

**Um die Sichtbarkeit zu aktualisieren**

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich dann in Ihrem Verkäuferkonto an.

1. Gehen Sie zur Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) und wählen Sie auf der Registerkarte **Aktuelles Serverprodukt** das containerbasierte Produkt aus, das Sie ändern möchten.

1. **Wählen **Sie in der Dropdownliste Änderungen anfordern** die Option Sichtbarkeit aktualisieren aus.**
**Anmerkung**  
Mithilfe dieser Änderungsanforderung können Sie beantragen, dass das Produkt vom Status **Eingeschränkt** in den Status **Öffentlich** versetzt wird. Der Änderungsantrag muss jedoch das Genehmigungsverfahren AWS Marketplace des Seller Operations Teams durchlaufen, um in den Status **Öffentlich** verschoben zu werden.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, lautet der Status **Erfolgreich**.

### Aktualisierung der Zulassungsliste von AWS-Konto IDs
<a name="container-update-allowlist"></a>

Sie können die Liste ändern AWS-Konto IDs , sodass Ihr Produkt nur in eingeschränktem Zustand angezeigt werden kann. Bei Konten mit Zulassungslisten wird auf der Produktdetailseite neben der Produktversion das Logo „Eingeschränkt“ angezeigt.

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen **Sie in der Dropdownliste Änderungen anfordern** die Option Zulassungsliste **aktualisieren aus.** Die aktuelle Liste der Konten, die auf der Zulassungsliste stehen, wird angezeigt.

1. Geben Sie im AWS-Konten Feld **Zulässig** die ein AWS-Konto IDs und trennen Sie sie durch ein Komma.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert.

## Nächste Schritte
<a name="container-next-steps"></a>

Nachdem Sie ein Container-Produkt erstellt haben, können Sie es anhand der Informationen in den folgenden Themen konfigurieren und verwalten:
+ [Aktualisierung der Produktinformationen für Ihr Containerprodukt am AWS Marketplace](update-container-product-info.md)
+ [Hinzufügen einer neuen Version Ihres Container-Produkts auf AWS Marketplace](container-add-version.md)
+ [Verwaltung der Preise für Container-Produkte auf AWS Marketplace](container-pricing.md)
+ [Aktualisierung der Verfügbarkeit von Containerprodukten nach Ländern in AWS Marketplace](container-update-offer-avail-country.md)
+ [Aktualisierung Ihrer Endbenutzer-Lizenzvereinbarung (EULA) für Containerprodukte auf AWS Marketplace](container-update-eula.md)
+ [Testen und Freigeben Ihres Container-Produkts am AWS Marketplace](test-release-product.md)

## Das Container-Produkt sucht nach Sicherheitsproblemen
<a name="container-security"></a>

Wenn Sie eine Änderungsanforderung erstellen, um Ihrem Container-Produkt eine neue Version hinzuzufügen, scannen wir die in dieser neuen Version enthaltenen Container-Images und suchen nach Sicherheitslücken. Zu diesem Zweck führen wir einen layer-by-layer statischen Scan des Images durch. Wenn wir kritische Sicherheitslücken mit per Fernzugriff ausnutzbaren Risikovektoren finden, stellen wir Ihnen eine Liste der gefundenen Probleme zur Verfügung. Wir empfehlen Ihnen dringend, Ihre eigene Sicherheitsanalyse mit einem Container-Image-Scanner wieClair,Twistlock, oder durchzuführenAqua Security, Trend Micro um Verzögerungen bei der Aufnahme und Veröffentlichung zu vermeiden. 

Die Auswahl des Basis-Abbilds für das Erstellen eigener Container-Abbilder kann sich deutlich auf das Sicherheitsprofil des fertigen Abbilds auswirken. Wenn Sie ein Basis-Image wählen, das bereits bekannte kritische Sicherheitslücken aufweist, werden diese aufgrund der Basisschicht gekennzeichnet, auch wenn Ihre Anwendungssoftware-Schichten sauber sind. Wir empfehlen Ihnen, zu überprüfen, ob Sie mit einem Basiscontainer beginnen, der frei von Sicherheitslücken ist, bevor Sie Ihre Images erstellen und an AWS Marketplace sie senden. 

# Aktualisierung der Produktinformationen für Ihr Containerprodukt am AWS Marketplace
<a name="update-container-product-info"></a>

Nachdem Sie Ihre Produkt-ID erstellt und die Preise festgelegt haben, können Sie Ihre Produktinformationen bearbeiten, einschließlich der Informationen, die Kunden über Ihr Containerprodukt in der sehen werden AWS Marketplace. Wenn beispielsweise eine neue Version die Beschreibung oder die Highlights des Produkts ändert, können Sie die Produktinformationen mit den neuen Daten bearbeiten. Sie können auch andere Produktinformationen aktualisieren, darunter Produkttitel, SKU-Beschreibung, Kategorien, Stichwörter und andere. Das folgende Verfahren beschreibt die Erstellung der Produktdetails für Ihr Produkt.

**Um Produktdetails für Ihr Container-Produkt zu erstellen oder zu aktualisieren**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie im Menü **Produkte** die Option **Server** aus. 

1. Wählen Sie auf der Registerkarte **Serverprodukte** das Produkt aus, das Sie ändern möchten.

1. Wählen **Sie in der Dropdownliste Änderungen anfordern** die Option **Produktinformationen aktualisieren** aus.

1. Aktualisieren Sie eines der folgenden Felder, die Sie ändern möchten:
   + **Titel des Produkts**
   + **SKU**
   + **Short description**
   + **Lange Beschreibung**
   + **Bild-URL für das Produktlogo**
   + **Highlights**
   + **Produktkategorien**
   + **Schlüsselwörter**
   + **URL des Produktvideos**
   + **Ressourcen**
   + **Informationen zur Support**
**Anmerkung**  
Das Bild URLs muss sich in einem Amazon S3 S3-Bucket befinden, auf den öffentlich zugegriffen werden kann. Weitere Informationen zum Logoformat finden Sie unter[Voraussetzungen hinsichtlich Unternehmens- und Produktlogos](product-submission.md#seller-and-product-logos).

1. Wählen Sie **Absenden** aus.

1. Vergewissern Sie sich, dass die Anfrage auf der Registerkarte **Anfragen** mit **dem Status Wird geprüft** angezeigt wird. Möglicherweise müssen Sie die Seite aktualisieren, um die Anfrage in der Liste zu sehen.

Sie können den Status Ihrer Anfrage jederzeit auf der Registerkarte **Anfragen** auf der Seite [Serverprodukte](https://aws.amazon.com/marketplace/management/products/server) überprüfen.

# Hinzufügen einer neuen Version Ihres Container-Produkts auf AWS Marketplace
<a name="container-add-version"></a>

Als AWS Marketplace Verkäufer können Sie neue Versionen Ihres Container-Produkts hinzufügen, Versionen verwalten und Versionsinformationen aktualisieren. Ihr Produkt kann im Laufe seiner Lebensdauer mehrere Versionen haben. Jede Version hat eine Reihe von Container-Images, die für diese Version spezifisch sind. In den folgenden Themen erfahren Sie, wie Sie Produktversionen für Ihre Container-Produkte verwalten.

**Anmerkung**  
Sie können Ihrem Produkt erst dann eine Version hinzufügen, wenn Sie die Produkt-ID und die Preisgestaltung für Ihr Produkt erstellt haben. Weitere Informationen zu diesen Schritten finden Sie unter[Schritt 1: Erstellen Sie die Produkt-ID und den Produktcode für Ihr Container-Produkt](container-product-getting-started.md#create-initial-container-product). 

**Topics**
+ [Schritt 1: Repositorys hinzufügen](#add-repositories)
+ [Schritt 2: Laden Sie Container-Images und Artefakte in Repositorys hoch](#upload-resources)
+ [Schritt 3: Fügen Sie Ihrem Container-Produkt eine neue Version hinzu](#add-new-version)
+ [Schritt 4: Versionsinformationen aktualisieren](#container-product-updating-version)
+ [Beschränken Sie eine Version Ihres Amazon EKS-Add-ons](#restriciting-version-eks-addon)

## Schritt 1: Repositorys hinzufügen
<a name="add-repositories"></a>

Ihre Container-Images und andere Artefakte für Ihr Produkt werden in Repositorys in gespeichert. AWS Marketplace In der Regel erstellen Sie für jedes benötigte Artefakt ein Repository. Das Repository kann jedoch mehrere Versionen des Artefakts (mit unterschiedlichen Tags) speichern. 

**Anmerkung**  
Alle Images in Ihrer Produktbereitstellung müssen Images aus den AWS Marketplace Repositorys verwenden.

Im folgenden Verfahren wird beschrieben, wie Sie alle benötigten Repositorys hinzufügen. AWS Marketplace

**Um Repositorys hinzuzufügen**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie im Menü **Produkte** die Option **Server** aus.

1. Wählen Sie auf der Registerkarte **Serverprodukte** das Produkt aus, das Sie ändern möchten, und wählen Sie dann in der Dropdownliste **Änderungen anfordern** die Option **Repositorys hinzufügen** aus.

1. Geben Sie den Namen für das Repository ein, das Sie erstellen möchten. Wenn Sie mehr als ein neues Repository erstellen möchten:
   + Wählen Sie für jedes weitere **Repository die Option Neues Repository hinzufügen**.
   + Geben Sie ihm einen eindeutigen Namen. Der von Ihnen gewählte eindeutige Name muss für alle Produkte in Ihrem Verkäuferkonto gelten.
**Anmerkung**  
Das Repository wird diese Struktur haben:`<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>`. Wenn Sie dem Repository Elemente hinzufügen (im folgenden Verfahren), erhalten sie ein Tag und haben diese Struktur:`<repositoryID>.dkr.ecr.us-east-1.amazonaws.com/<sellerName>/<repositoryName>:<tag>`.   
Das `repositoryID` ist eine interne ID für AWS Marketplace.
Das `sellerName` basiert auf dem Namen, den Sie für Ihr Verkäuferkonto erstellt haben. Wenn der Anzeigename Ihres Verkäufers ein ungültiges Präfix `sellerName` für das Repository generiert, ersetzt AWS Marketplace automatisch den Verkäufernamen durch eine UUID (Universally Unique Identifier). Um das UUID-Präfix in Ihrem Repository-Namen zu ändern, wenden Sie sich an das AWS Marketplace Marketplace-Betriebsteam.
Das `respositoryName` wird in diesem Schritt definiert.
Das `tag` wird festgelegt, wenn Sie ein Artefakt in das Repository hochladen.

1. Wählen Sie **Absenden** aus.

**Anmerkung**  
Sie können bis zu 70 Repositorys pro Produkt haben.

Eine neue Anfrage wird erstellt und auf der Registerkarte **Anfragen** angezeigt. Wenn der Vorgang abgeschlossen ist, können Sie innerhalb weniger Minuten damit beginnen, Container-Images und andere Artefakte zu den von Ihnen erstellten Repositorys hinzuzufügen.

## Schritt 2: Laden Sie Container-Images und Artefakte in Repositorys hoch
<a name="upload-resources"></a>

**Um Container-Images und Artefakte in Repositorys hochzuladen**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie im Menü **Produkte** die Option **Server** aus.

1. Wählen Sie auf der Registerkarte **Serverprodukte** das Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Repositorys hinzufügen** aus.

1. Wähle **Bestehende Repositorys anzeigen** aus.

1. Wählen Sie das Repository aus, in das Sie hochladen möchten.

1. Wählen Sie **Push-Befehle anzeigen** aus, um eine Liste mit Anweisungen zu öffnen, einschließlich Befehlen, mit denen Sie Docker Container-Bilder und Helm -Diagramme in dieses Repository übertragen können. 

   Allgemeine Informationen zum Pushen von Container-Images und anderen Artefakten in Repositorys finden Sie unter [Pushing an Image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html) im *Amazon Elastic Container Registry User Guide*.
**Anmerkung**  
Sie können die folgenden API-Operationen von Amazon Elastic Container Registry (Amazon ECR) verwenden, wenn Sie `docker pull` oder `docker push` aufrufen:  
`DescribeImages`— Verwenden Sie diese Option, um die Metadaten zu den Bildern in einem Repository zu überprüfen.
`GetAuthorizationToken`— Verwenden Sie diese Option, um sich zu authentifizieren, bevor Sie Artefakte in das Repository hochladen, und verwenden Sie dann die Befehle `docker pull` oder`docker push`.
`ListImages`— Dient zum Anzeigen einer Liste der Bilder, die Sie übertragen haben.

1. Verwenden Sie die aufgeführten Befehle, um alle benötigten Artefakte aus Ihrem lokalen Repository in das AWS Marketplace Repository für Ihr Produkt zu übertragen.
**Anmerkung**  
Die **tag** Angaben, die Sie in den `push` Befehlen angeben, werden verwendet, um die Version des Artefakts zu unterscheiden, das Sie in das Repository hochladen. Verwenden Sie ein Tag, das für die Version, zu der die Artefakte gehören, sinnvoll ist.

1. Wiederholen Sie den Vorgang für jedes Container-Image oder Artefakt, das Sie in Ihrer Version benötigen.
**Anmerkung**  
Ihre Version kann bis zu 50 Container-Bilder oder Artefakte in jeder Lieferoption enthalten. Weitere Informationen zu den Lieferoptionen finden Sie im folgenden Verfahren.

Nachdem Sie Ihre Artefakte hochgeladen haben, können Sie die Version Ihres Produkts erstellen. 

**Anmerkung**  
Ihre Container-Bilder werden automatisch gescannt, um festzustellen, ob sie den Anforderungen entsprechen[Produktanforderungen auf Containerbasis für AWS Marketplace](container-product-policies.md). Weitere Informationen finden Sie unter [Das Container-Produkt sucht nach Sicherheitsproblemen](container-product-getting-started.md#container-security).

### Eine neue Lieferoption hinzufügen
<a name="add-delivery-option"></a>

Für jede Version Ihres Container-Produkts wäre eine Lieferoption erforderlich. Die Lieferoption gibt die Bereitstellungsoptionen an, die dem Käufer zur Verfügung stehen. Abhängig von einer der unten aufgeführten Lieferoptionen müssten Sie die entsprechenden Artefakte in die Repositorys hochladen.
+ Laden Sie für eine **Container-Image-Lieferoption** alle für die Produktinstallation erforderlichen Container-Images in das Amazon Elastic Container Registry (Amazon ECR) -Repository hoch, das in der AWS Marketplace Konsole erstellt wurde.
+ Für eine **HelmDiagrammlieferoption** laden Sie die Helm Diagramm- und Container-Bilder in das Amazon ECR-Repository hoch, das in der AWS Marketplace Konsole erstellt wurde.
+ Für eine **zusätzliche Lieferoption für die Amazon EKS-Konsole** laden Sie das Helm Diagramm und die Container-Images in das Amazon ECR-Repository hoch, das in der AWS Marketplace Konsole erstellt wurde.

## Schritt 3: Fügen Sie Ihrem Container-Produkt eine neue Version hinzu
<a name="add-new-version"></a>

**Anmerkung**  
Wenn Sie beim Hinzufügen einer neuen Version zu Ihrem Container Fehler erhalten, finden Sie weitere Informationen in der [Tabelle Asynchrone Fehler beim Hinzufügen einer neuen Version](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version) in der *AWS Marketplace Catalog API Referenz.*

**So fügen Sie Ihrem Container-Produkt eine neue Version hinzu**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie im Menü **Produkte** die Option **Server** aus.

1. Wählen Sie auf der Registerkarte **Serverprodukte** das Produkt aus, zu dem Sie eine Version hinzufügen möchten. Wählen Sie dann in der Dropdownliste **Änderungen anfordern** die Option **Neue Version hinzufügen** aus.

1. Geben Sie auf der Seite **Neue Version hinzufügen** den **Versionstitel** und die **Versionshinweise** für Ihre Version ein.

1. Nachdem Sie die Versionsdetails eingegeben haben, besteht der nächste Schritt darin, Lieferoptionen hinzuzufügen. Bei den Lieferoptionen handelt es sich um Anweisungen und Informationen, anhand derer Käufer die Software von Ihrer Produktversion aus starten können. Lieferoptionen werden als *Versandoptionen für* Käufer bezeichnet.
**Anmerkung**  
Ihr Produkt kann mehrere Plattformen mit unterschiedlichen Container-Images (z. B. Kubernetes und Ubuntu Bereitstellungen) unterstützen. Sie können für jede Art, wie Kunden Ihr Produkt einrichten können, eine Versandoption einrichten, bis zu vier Lieferoptionen pro Version des Produkts.

   1. Wenn für das Produkt bereits Versandoptionen in anderen Versionen verfügbar sind, können Sie die vorhandene Option als Vorlage verwenden, um der neuen Version eine Versandoption hinzuzufügen. Wählen Sie **unter Lieferoptionen** die Versandoption, die Sie hinzufügen möchten, aus der Liste aus. Sie können die Option anhand der Anweisungen in den folgenden Schritten bearbeiten.

   1. Um eine neue Versandoption hinzuzufügen, wählen Sie **Neue Versandoption**. Nachdem Sie eine Option hinzugefügt haben, folgen Sie den Anweisungen in den folgenden Schritten, um sie zu konfigurieren.

1. Wählen Sie eine Versandmethode für die Versandoption. Die Versandmethode bestimmt, wie Käufer Ihre Software auf den Markt bringen.
   + Geben Sie für eine **Container-Image-Lieferoption** Pfade zu Container-Images in einem Amazon Elastic Container Registry (Amazon ECR) -Repository an, das in der AWS Marketplace Konsole erstellt wurde. Käufer verwenden die Container-Image-Pfade, um die Software zu starten, indem sie die Bilder direkt in ihre Umgebung ziehen.
   + Geben Sie für eine **HelmDiagrammlieferoption** Pfade zu Helm Diagrammen in einem Amazon ECR-Repository an, das in der AWS Marketplace Konsole erstellt wurde. Käufer installieren die Helm Diagramme in ihrer Bereitstellungsumgebung, um die Software zu starten.
   + Geben Sie für eine **Amazon EKS-Konsolen-Add-On-Lieferoption** Pfade zu Helm Diagrammen in einem Amazon ECR-Repository an, das in der AWS Marketplace Konsole erstellt wurde. Käufer installieren den Container mithilfe der Amazon EKS-Konsole oder des nativen Amazon EKS-Add-ons APIs , um die Software zu starten. Weitere Informationen finden Sie unter [Verfügbare Amazon EKS-Add-Ons von Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html#workloads-add-ons-available-eks).

   1. Gehen Sie wie folgt vor, um eine Option für die Bereitstellung von **Container-Images** hinzuzufügen:

      1. Fügen Sie **unter Container-Images** die Amazon ECR-URL zu den Container-Images hinzu, die die Produktversion der Software enthalten.

      1. Geben Sie in den **Feldern Titel der Lieferoption** **und Beschreibung der Bereitstellungsoption** einen Titel und eine Beschreibung für diese Versandoption ein.

      1. Geben Sie im Feld **Nutzungshinweise** detaillierte Informationen ein, damit Ihre Käufer Ihre Software nach der Markteinführung verwenden können.

      1. Wählen Sie **unter Unterstützte Dienste** die Umgebungen aus, in denen Käufer die Software starten können.

      1. Fügen Sie **unter Bereitstellungsvorlagen** Ressourcen hinzu, mit denen Käufer die Software starten können. Geben Sie für jede Vorlage einen Titel und eine URL zur Ressource ein.

   1. Gehen Sie wie folgt vor, um eine Option für die Bereitstellung von **HelmDiagrammen** hinzuzufügen:

      1. Fügen Sie im **HelmDiagramm** die Amazon ECR-URL zu dem Helm Diagramm hinzu, das Käufer in ihrer Bereitstellungsumgebung installieren werden, um Ihre Software zu starten.

      1. Fügen Sie **unter Container-Images** die Amazon ECR-URL zu den Container-Images hinzu, die die Produktversion der Software enthalten.

      1. Geben Sie in den **Feldern Titel der Lieferoption** **und Beschreibung der Bereitstellungsoption** einen Titel und eine Beschreibung für diese Versandoption ein.

      1. Geben Sie im Feld **Nutzungshinweise** detaillierte Informationen ein, damit Ihre Käufer Ihre Software nach der Markteinführung verwenden können.

      1. Wählen Sie **unter Unterstützte Dienste** die Umgebungen aus, in denen Käufer die Software starten können.

      1. *Optional —* Geben Sie im Feld **HelmVersionsname** den Namen des Kubernetes Namespaces ein, in dem das Helm Diagramm installiert werden soll.

      1. *Optional —* Geben Sie im **HelmInstallations-Namespace** den Namen für die Helm Version ein, die `helm install` vom Befehl verwendet werden soll.

      1. *Optional —* Geben Sie im Feld **KubernetesDienstkontoname** den Namen des Kubernetes Dienstkontos ein, mit dem eine Verbindung hergestellt werden soll AWS Identity and Access Management (IAM). Das Kubernetes Dienstkonto ruft AWS Dienste wie Lizenzierung oder Messung auf.

      1. Geben Sie **unter Parameter überschreiben** die Parameter ein, die in den Helm CLI-Befehlen verwendet werden, mit denen die Software gestartet wird. Diese Parameter ermöglichen es Käufern, die angegebenen Standardwerte zu überschreiben. Bei der Verwendung der AWS Marketplace Management Console gibt es ein Limit von 15 Parametern, aber es gibt kein Limit bei der AWS Marketplace Catalog API. Weitere Informationen finden Sie unter [Hinzufügen einer neuen Version zu einem containerbasierten Produkt](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version).
**Anmerkung**  
Einige **Override-Parameter sind erforderlich**. Amazon EKS Anywhere Anywhere-Produkte erfordern einen **Override-Parameter** für den Lizenzschlüssel mit dem Wert `DefaultValue` von`"${AWSMP_LICENSE_SECRET}"`. Für kostenpflichtige Produkte müssen Sie einen **Override-Parameter** für die Konfiguration des Dienstkontos mit dem Wert `DefaultValue` of angeben`"${AWSMP_SERVICE_ACCOUNT}"`.

      1. Wählen Sie **Passwörter und Geheimnisse verbergen**, um vertrauliche Informationen in Konsolen, Befehlszeilentools und zu maskieren APIs. Weitere Informationen finden Sie in der `NoEcho` Parameterdokumentation unter [Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) im *AWS CloudFormation Benutzerhandbuch*.

   1. Um eine **zusätzliche Lieferoption für die Amazon EKS-Konsole** hinzuzufügen, stellen Sie sicher, dass die Artefakte den Anforderungen entsprechen[Anforderungen für Amazon EKS-Add-On-Produkte](container-product-policies.md#publishing-eks-add-on), und führen Sie dann die folgenden Schritte aus:
**Anmerkung**  
Pro Version wird nur eine Amazon EKS-Add-On-Lieferoption unterstützt. Sie können keine neue Version hinzufügen, bis die aktuelle Version, mit der Sie arbeiten, auf der Amazon EKS-Konsole veröffentlicht wurde.

      1. Fügen Sie im **HelmDiagramm** die Amazon ECR-URL zu dem Helm Diagramm hinzu, das Käufer in ihrer Bereitstellungsumgebung installieren werden, um Ihre Software zu starten.

      1. Fügen Sie **unter Container-Images** die Amazon ECR-URL zu den Container-Images hinzu, die die Produktversion der Software enthalten. Stellen Sie sicher, dass alle Bilder im Helm Diagramm aufgeführt sind.

      1. Geben Sie in den **Feldern Titel der Lieferoption** **und Beschreibung der Bereitstellungsoption** einen Titel und eine Beschreibung für diese Versandoption ein.

      1. Behalten Sie unter **Sichtbarkeit** den Standardwert **Eingeschränkt bei**.

      1. Geben Sie im Feld **Name des Add-ons** einen eindeutigen Namen für dieses Add-on ein. An den Namen des Add-ons, den Sie eingeben, wird der Name des Verkäufers angehängt, während er in der Amazon EKS-Konsole angezeigt wird.

      1. Geben Sie im Feld **Add-On-Version** die Version des Add-ons ein, die bei der Installation oder Aktualisierung dieses Add-ons sichtbar sein wird. Folgen Sie dem Format`major.minor.patch`.

      1. Wählen Sie unter **Add-on-Typ** eine Kategorie für Ihr Add-on aus der Drop-down-Liste aus.

      1. Wählen Sie **Kubernetesunter Version** alle Kubernetes Versionen aus, die Ihr Add-on unterstützen wird.

      1. Wählen Sie unter **Architektur** die Plattformarchitekturen aus, die Ihr Add-on unterstützt. Die Optionen sind **AMD64** und **ARM64**. Wir empfehlen, beide Architekturen zu unterstützen, um die Kompatibilität zu maximieren. Wenn Ihr Add-on keine ARM64 Geräte unterstützt, müssen Sie ein geplantes Datum für den zusätzlichen Support angeben, bevor Ihr Produkt im Handel AWS-Regionen veröffentlicht werden kann.

      1. Geben Sie im Feld **Namespace** einen eindeutigen Kubernetes Namespace ein, in dem Ihr Add-on installiert werden soll. Die `kube-public` Namespaces `default``kube-system`, und werden für die Installation von Add-Ons von Drittanbietern nicht unterstützt.

      1. Unter **Environment Override parameters** können Sie bis zu 2 Umgebungsparameter aus dem Amazon EKS Add-On-Framework auswählen. Sie können Parameternamen aus Ihrer Datei values.yaml diesen Umgebungsvariablen zuordnen, nämlich und. `${AWS_REGION}` `${AWS_EKS_CLUSTER_NAME}`

1. Um zusätzliche Versandoptionen hinzuzufügen, wählen Sie **Neue Versandoption** und wiederholen Sie die Anweisungen in den vorherigen Schritten, um sie zu konfigurieren.

1. Wählen Sie **Absenden** aus.

## Schritt 4: Versionsinformationen aktualisieren
<a name="container-product-updating-version"></a>

Nachdem eine Version erstellt wurde, kann es hilfreich sein, Ihren Käufern aktualisierte Informationen zur Verfügung zu stellen, indem Sie die mit der Version verknüpften Informationen ändern. Wenn Sie beispielsweise planen, Version 1.0 nach der Veröffentlichung von Version 1.1 einzuschränken, können Sie die Beschreibung von Version 1.0 aktualisieren, um Käufer auf Version 1.1 weiterzuleiten. Geben Sie das Datum an, an dem Version 1.0 eingeschränkt wird. Sie aktualisieren die Versionsinformationen von AWS Marketplace Management Portal.

**Um die Versionsinformationen zu aktualisieren**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Wählen Sie im Menü **Produkte** die Option **Server** aus. 

1. Wählen Sie auf der Registerkarte **Serverprodukte** das Produkt aus, das Sie ändern möchten.

1. Wählen **Sie in der Dropdownliste Änderungen anfordern** die Option **Versionsinformationen aktualisieren** aus.

1. Wählen Sie auf der Seite **Version aktualisieren** die Version aus, die Sie aktualisieren möchten.

1. Nehmen Sie Aktualisierungen an der ausgewählten Version vor. Die Felder, die aktualisiert werden können, hängen vom Status der Produktversion oder der Lieferoption ab.

   1. Für alle Versionen können Sie die **Versionshinweise** aktualisieren.

   1. Für Versionen, die noch nicht öffentlich verfügbar sind, können Sie den **Versionstitel** aktualisieren.

   1. Für Lieferoptionen, die nicht eingeschränkt wurden, können Sie die folgenden Felder aktualisieren:
      + **Beschreibung**
      + **Anweisungen zur Verwendung**
      + **Unterstützte Dienste**

   1. Für Lieferoptionen in Versionen, die noch nicht öffentlich verfügbar sind, können Sie die folgenden Felder aktualisieren:
      + **Titel der Lieferoptionen**
      + **HelmTabelle** (nur für Lieferoptionen in **HelmDiagrammen**)
      + **Container-Images**
      + **Ressourcen für die Bereitstellung**
      + **AddOn Name**
      + **AddOn Version**
      + **AddOn Typ**
      + **HelmURI des Diagramms**
      + **CompatibleKubernetesVersions**
      + **SupportedArchitectures**
      + **Namespace**
      + **EnvironmentOverrideParameters**

   1. Für Lieferoptionen in Versionen, die öffentlich verfügbar sind, können Sie sie aktualisieren **SupportedArchitectures**.

1. Wählen Sie **Absenden** aus.

1. Vergewissern Sie sich, dass die Anfrage auf der Registerkarte **Anfragen** mit **dem Status Wird geprüft** angezeigt wird.

Sie können den Status Ihrer Anfrage jederzeit auf der Registerkarte **Anfragen** auf der Seite [Serverprodukte](https://aws.amazon.com/marketplace/management/products/server) überprüfen.

## Beschränken Sie eine Version Ihres Amazon EKS-Add-ons
<a name="restriciting-version-eks-addon"></a>

Um eine Version Ihres Container-Produkts einzuschränken, die als Add-on veröffentlicht wurde, wenden Sie sich über das Kontaktformular unten auf der Seite an das AWS Marketplace Betriebsteam [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/).

# Verwaltung der Preise für Container-Produkte auf AWS Marketplace
<a name="container-pricing"></a>

Als AWS Marketplace Verkäufer können Sie die Preise für Container-Produkte verwalten und aktualisieren. Für Container-Produkte können Sie kostenlose Produkte, BYOL-Produkte (Bring Your Own License Model) und kostenpflichtige Produkte für Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) und anbieten. AWS Fargate Sie können nur einen Preis pro Produkt festlegen. Sie können Preisdimensionen hinzufügen oder aktualisieren. Abhängig von Ihrem Preismodell können Sie Vertrags- und Nutzungsdimensionen hinzufügen. Sie können auch Ihre Preisbedingungen oder Ihre Rückerstattungsrichtlinien aktualisieren. Weitere Informationen finden Sie in den folgenden Abschnitten.

 Weitere Informationen zu den Preismodellen für AWS Marketplace Containerprodukte finden Sie unter[Preise für Containerprodukte für AWS Marketplace](pricing-container-products.md).

**Topics**
+ [Eine Preisdimension hinzufügen](#container-add-pricing-dimensions)
+ [Die Dimensionsinformationen werden aktualisiert](#container-update-dimensions-information)
+ [Die Preisbedingungen werden aktualisiert](#container-update-pricing-terms)
+ [Aktualisierung der Rückerstattungsrichtlinien für ein Produkt](#container-update-refund-policy)

## Eine Preisdimension hinzufügen
<a name="container-add-pricing-dimensions"></a>

Sie können dem Preismodell, das Sie für Ihre Produktabrechnung verwenden, eine Preisdimension hinzufügen. Weitere Informationen zu Preismodellen finden Sie unter[Preismodelle für Container](pricing-container-products.md#pricing-models-for-server-products).

**Anmerkung**  
Das Hinzufügen einer Preisdimension für einen Vertrag mit Verbrauchspreisen (z. B. pay-as-you-go Preisgestaltung für zusätzliche Nutzung) ist auf dem nicht verfügbar AWS Marketplace Management Portal.  
Sie können Ihr Preismodell nicht zwischen Vertrag, Nutzung und Vertrag mit Verbrauchspreisen ändern. Wenden Sie sich an das [AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us/) Team, um Unterstützung zu erhalten.

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich bei Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Preisdimensionen aktualisieren** und anschließend **Preisdimensionen hinzufügen** aus.

1. Je nach Preismodell können Sie Vertragsdimensionen oder Nutzungsdimensionen hinzufügen, indem Sie Informationen für die **API-ID**, den **Anzeigenamen** und die **Beschreibung** angeben.

1. Wählen Sie **Weiter** und geben Sie die Preise für Ihre Vertragsdimension ein.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert. 

## Die Dimensionsinformationen werden aktualisiert
<a name="container-update-dimensions-information"></a>

Sie können die Maßangaben für Ihr Produkt ändern. Weitere Informationen zu Preismodellen finden Sie unter[Preismodelle für Container](pricing-container-products.md#pricing-models-for-server-products).

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Preisdimensionen aktualisieren** und anschließend **Dimensionsinformationen aktualisieren** aus.

1. Sie können Dimensionsinformationen hinzufügen, indem Sie Informationen für den **Anzeigenamen** und die **Beschreibung** der Dimension angeben, die Sie aktualisieren möchten.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert. 

## Die Preisbedingungen werden aktualisiert
<a name="container-update-pricing-terms"></a>

Sie können die Preisbedingungen für Ihr Produkt ändern. Die Preisbedingungen müssen möglicherweise aktualisiert werden, wenn Sie die Länder ändern, in denen Ihr Produkt angeboten wird.

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Liste **Änderungen anfordern** die Option **Öffentliches Angebot aktualisieren** und anschließend **Preisbedingungen aktualisieren** aus.

1. Die aktuellen Preise sind bereits ausgefüllt, sodass Sie sie bearbeiten können. Sie können den aktuellen Preis löschen und Ihren neuen Preis hinzufügen. Wir empfehlen Ihnen, die von Ihnen angeforderten Preise zu überprüfen, bevor Sie Ihre Anfrage zur Überprüfung einreichen.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert.

**Anmerkung**  
Wenn Sie den Preis einer Dimension mithilfe der Option „**Preisbedingungen aktualisieren**“ erhöhen, können Sie die Preise 90 Tage lang nicht aktualisieren. Bei einer Preiserhöhung wird der Preis für 90 Tage ab dem Tag, an dem Sie die Änderung vornehmen, gesperrt. Diese Preissperre gilt nur für eine Preiserhöhung, nicht für eine Preissenkung.

## Aktualisierung der Rückerstattungsrichtlinien für ein Produkt
<a name="container-update-refund-policy"></a>

Sie können die Rückerstattungsrichtlinie für Ihr Produkt aktualisieren. Aktualisierungen der Rückerstattungsrichtlinie werden für alle Benutzer wirksam. Weitere Informationen finden Sie unter [Rückerstattungen und Stornierungen in AWS Marketplace](refunds.md). 

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Öffentliches Angebot aktualisieren** und anschließend **Rückerstattungsrichtlinie aktualisieren** aus.

1. Die aktuelle Rückerstattungsrichtlinie ist bereits ausgefüllt, sodass Sie sie bearbeiten können. Sie können die aktuelle Rückerstattungsrichtlinie löschen und Ihre neue Rückerstattungsrichtlinie hinzufügen. Wir empfehlen Ihnen, die von Ihnen angeforderte Rückerstattungsrichtlinie zu überprüfen, bevor Sie Ihre Anfrage zur Überprüfung einreichen. Durch das Einreichen der Anfrage werden die aktuellen Rückerstattungsrichtlinien überschrieben.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert. 

# Aktualisierung der Verfügbarkeit von Containerprodukten nach Ländern in AWS Marketplace
<a name="container-update-offer-avail-country"></a>

Als AWS Marketplace Verkäufer können Sie die Länder ändern, in denen Ihr Container-Produkt angeboten und abonniert werden kann. Weitere Informationen finden Sie unter [Länder](regions-and-countries.md#product-countries). Das folgende Verfahren zeigt Ihnen, wie Sie die Verfügbarkeit Ihrer Container-Produkte nach Ländern aktualisieren können.

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Öffentliches Angebot aktualisieren** und anschließend **Verfügbarkeit nach Land aktualisieren** aus.

1. Wählen Sie eine der folgenden Optionen aus: 
   + **Alle Länder** — In allen unterstützten Ländern verfügbar.
   + **Alle Länder mit Ausnahmen** — In allen unterstützten Ländern außer in ausgewählten Ländern verfügbar.
   + **Nur zugelassene Länder — Käufer können nur in den von Ihnen angegebenen** Ländern einkaufen.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert. 

# Aktualisierung Ihrer Endbenutzer-Lizenzvereinbarung (EULA) für Containerprodukte auf AWS Marketplace
<a name="container-update-eula"></a>

Als AWS Marketplace Verkäufer können Sie die Endbenutzer-Lizenzvereinbarung (EULA) aktualisieren, um entweder die oder eine benutzerdefinierte EULA zu verwenden. [Standardvertrag für AWS Marketplace](standardized-license-terms.md#standard-contracts) An der EULA vorgenommene Aktualisierungen werden für neue Benutzer wirksam, die Ihr Produkt abonnieren, sowie für Produkterneuerungen. Gehen Sie wie folgt vor, um Ihre EULA zu aktualisieren.

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich in Ihrem Verkäuferkonto an.

1. Wählen Sie auf der Seite [https://aws.amazon.com/marketplace/management/products/server](https://aws.amazon.com/marketplace/management/products/server) das Container-Produkt aus, das Sie ändern möchten.

1. Wählen Sie in der Dropdownliste **Änderungen anfordern** die Option **Öffentliches Angebot aktualisieren** und anschließend **EULA aktualisieren** aus.

1. Wählen Sie **Standardvertrag für AWS Marketplace** oder reichen Sie Ihre benutzerdefinierte EULA ein. Für eine benutzerdefinierte EULA müssen Sie den Vertrag aus einem Amazon S3 S3-Bucket bereitstellen.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, wird der Status auf **Erfolgreich** oder **Fehlgeschlagen** aktualisiert. 

# Aktualisierung der Rückerstattungsrichtlinie für Ihr auf Containern basierendes Produkt am AWS Marketplace
<a name="update-container-refund-policy"></a>

Als AWS Marketplace Verkäufer können Sie die Rückerstattungsrichtlinien für Ihr Produkt in Containern festlegen. Wenn Sie die Rückerstattungsrichtlinie für Ihr Produkt ändern möchten, können Sie die Option **Rückerstattungsrichtlinie aktualisieren** verwenden. Das folgende Verfahren zeigt Ihnen, wie Sie Ihre Rückerstattungsrichtlinie aktualisieren können.

**Um die Rückerstattungsrichtlinie zu aktualisieren**

1. Öffnen Sie die AWS Marketplace Management Portal Seite [https://aws.amazon.com/marketplace/management/tour/](https://aws.amazon.com/marketplace/management/tour/) und melden Sie sich dann in Ihrem Verkäuferkonto an.

1. Gehen Sie zur Seite [Serverprodukte](https://aws.amazon.com/marketplace/management/products/server) und wählen Sie dann das Produkt aus, das Sie ändern möchten.

1. Wählen Sie im Drop-down-Menü **Änderungen anfordern** die Option **Öffentliches Angebot aktualisieren** und anschließend **Rückerstattungsrichtlinie aktualisieren** aus.

1. Die aktuellen Informationen zur Rückerstattungsrichtlinie finden Sie im Textfeld, sodass Sie sie bearbeiten können. Durch das Einreichen der Anfrage wird die aktuelle Rückerstattungsrichtlinie überschrieben.

1. Wählen Sie **Senden**, um Ihre Anfrage zur Überprüfung einzureichen.

1. Vergewissern Sie sich, dass auf der Registerkarte „**Anfragen**“ der **Status** „Wird **geprüft**“ angezeigt wird. Wenn die Anfrage abgeschlossen ist, lautet der Status **Erfolgreich**.

# Testen und Freigeben Ihres Container-Produkts am AWS Marketplace
<a name="test-release-product"></a>

Nachdem Sie eine neue Version Ihres Container-Produkts hinzugefügt haben AWS Marketplace, können Sie Ihr Produkt testen und es dann der Öffentlichkeit zugänglich machen. In diesem Thema werden die spezifischen Schritte und Verfahren beschrieben, die für das Testen und die Veröffentlichung Ihres Produkts erforderlich sind.

**Topics**
+ [Lieferoptionen für Bilder und Helm Diagramme in Containern](#container-helm-delivery)
+ [Zusätzliche Lieferoption für Amazon EKS](#eks-addon-delivery)

## Lieferoptionen für Bilder und Helm Diagramme in Containern
<a name="container-helm-delivery"></a>

Dieser Abschnitt enthält Anleitungen zur Veröffentlichung Ihres Container-Images und Helm -Diagramms.

Ihre Anfrage für eine neue Version wurde erstellt und sollte innerhalb weniger Minuten abgeschlossen sein. Sie können die Anfrage auf der **Serverproduktseite** auf der Registerkarte **Anfragen** verfolgen. *Wenn Sie beim Testen oder Veröffentlichen Ihres Add-ons Fehler erhalten, finden Sie weitere Informationen in der Tabelle Asynchrone Fehler unter [Neue Version hinzufügen in der Referenz](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#container-add-version).AWS Marketplace Catalog API *

**Anmerkung**  
Wenn Ihr Produkt derzeit auf eingeschränkte Verfügbarkeit eingestellt ist, können nur die Käufer, für die das Produkt verfügbar ist, auf die Produktversion zugreifen. Wenn Ihr Produkt derzeit öffentlich verfügbar ist, können alle AWS Marketplace Käufer auf die Produktversion zugreifen.

Wenn dies Ihre erste Version war, ist Ihr Produkt jetzt bereit, veröffentlicht zu werden.

## Zusätzliche Lieferoption für Amazon EKS
<a name="eks-addon-delivery"></a>

Dieser Abschnitt enthält Anleitungen zum Testen und Veröffentlichen Ihres Amazon EKS-Add-ons.

**Testen Sie Ihr Add-on**
+ Nachdem Sie Ihr Add-on eingereicht haben, AWS Marketplace bearbeitet es Ihre Anfrage und veröffentlicht Ihr Add-on in einem eingeschränkten Zustand, damit Sie es im Amazon EKS-Add-On-Katalog validieren können. Sie können die Anfrage auf der Registerkarte **Anfragen** auf der **Serverproduktseite** im verfolgen AWS Marketplace Management Portal. Die Bearbeitungszeiten variieren je nach Umfang der Anfragen, die wir bearbeiten, zwischen 5 und 10 Werktagen.

  Wenn AWS Marketplace sich Ihre Anfrage im Status Wird **geprüft** befindet, wird das Add-on weiterhin vom AWS Team aus dem Amazon EKS-Add-On-Katalog veröffentlicht. Der Status der Anfrage ändert sich in **Erfolgreich**, sobald das Add-on im Status **Eingeschränkt** veröffentlicht wurde. Danach können Sie mit dem Testen Ihres Add-ons beginnen.
+ Sobald Ihr Add-on verfügbar ist, können Sie es zu Testzwecken in der Region Asien-Pazifik (Seoul) finden. AWS Marketplace verlässt sich auf Ihr Fachwissen, um die Funktionalität Ihrer Software zu überprüfen. Um Ihr Add-on zu testen, müssen Sie in Ihrem Verkäuferkonto, in dem Ihr Add-on auf der Zulassungsliste steht, einen Amazon EKS-Cluster in der Region Asien-Pazifik (Seoul) erstellen. Folgen Sie [diesen detaillierten Anweisungen](https://aws.amazon.com/blogs/awsmarketplace/deploy-third-party-software-add-ons-aws-marketplace-amazon-eks-clusters/), um Ihr Add-on zu testen. Stellen Sie sicher, dass Sie auf jeder Kubernetes Version testen, die Ihre Software unterstützt.
+ Wenn Sie ein kostenpflichtiges Produkt anbieten, erstellen Sie ein privates Angebot für den folgenden internen Anbieter AWS-Konten. Diese Konten helfen bei der Integration Ihrer Software in die Amazon EKS-Konsole in allen kommerziellen Anwendungen AWS-Regionen.

  ```
  288092140294, 288092140294, 408202761791
  ```
+ Lassen Sie Ihren Testcluster mit dem Add-on aktiv, bis Ihre Add-On-Version AWS Marketplace genehmigt und veröffentlicht wird.
**Anmerkung**  
AWS Marketplace trägt nicht die AWS Infrastrukturkosten, die beim Testen Ihres Container-Produkts auf Ihren Amazon EKS-Clustern anfallen. Sie können sich an die richtige Größenordnung halten, um die Knoten auf ein Minimum an Betriebskosten zu reduzieren, während wir die Testergebnisse überprüfen.

**Veröffentlichen Sie Ihr Add-on**

Nachdem Sie Ihre Software über den Amazon EKS-Cluster als Add-on validiert haben, können Sie mit dem [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/)oder eine Anfrage zur Veröffentlichung der Version Ihres Amazon EKS-Add-ons für die Öffentlichkeit einreichen AWS Marketplace Catalog API.

 Weitere Informationen finden Sie unter [Aktualisieren der Sichtbarkeit für ein Amazon EKS-Add-on](https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#update-delivery-option-visibility) in der *AWS Marketplace Catalog API Referenz*.

Sie können die Anfrage auf der Registerkarte **Anfragen** auf der **Serverproduktseite** im verfolgen AWS Marketplace Management Portal. Die Aufnahmezeiten variieren.

# Produktanforderungen auf Containerbasis für AWS Marketplace
<a name="container-product-policies"></a>

AWS Marketplace hält die folgenden Anforderungen für alle containerbasierten Produkte und Angebote aufrecht. AWS Marketplace Diese Anforderungen tragen dazu bei, unseren Kunden einen sicheren und vertrauenswürdigen Katalog zu bieten. Wir empfehlen Verkäufern außerdem, die Implementierung zusätzlicher Kontrollen und Protokolle zu überprüfen, um den Anforderungen ihrer spezifischen Produkte gerecht zu werden.

Alle Produkte und die zugehörigen Metadaten werden bei der Einreichung überprüft, um sicherzustellen, dass sie den aktuellen AWS Marketplace Richtlinien entsprechen oder diese übertreffen. Diese Richtlinien werden regelmäßig aktualisiert, um sie an die sich ändernden Sicherheitsrichtlinien anzupassen. AWS Marketplace scannt Produkte kontinuierlich, um sicherzustellen, dass bestehende Angebote weiterhin alle Änderungen dieser Anforderungen erfüllen. Wenn ein Produkt nicht den Vorschriften entspricht, setzt sich das Unternehmen mit dem Verkäufer in Verbindung, um AWS Marketplace sein Produkt auf den neuesten Stand zu bringen, sodass es den neuen Standards entspricht. In einigen Fällen können Produkte vorübergehend für neue Abonnenten nicht verfügbar sein, bis die Probleme behoben sind. Dieser Prozess trägt dazu bei, die Sicherheit und Vertrauenswürdigkeit der AWS Marketplace Plattform für alle Benutzer aufrechtzuerhalten.

**Topics**
+ [Sicherheitsrichtlinien](#container-security-requirements)
+ [Anforderungen bezüglich Kundeninformationen](#container-customer-info-requirements)
+ [Anforderungen an die Produktnutzung](#container-usage-requirements)
+ [Architekturanforderungen](#container-architecture-requirements)
+ [Anforderungen an die Struktur des Helmdiagramms](#helm-chart-structure-requirements)
+ [Anweisungen zur Verwendung von Container-Produkten](#container-product-usage-instructions)
+ [Anforderungen für Amazon EKS-Add-On-Produkte](#publishing-eks-add-on)

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

 Alle Produkte auf Containerbasis müssen die folgenden Sicherheitsanforderungen erfüllen:
+ Container-Images dürfen keine bekannten Sicherheitslücken, Malware oder End-of-Life (EoL) -Softwarepakete und Betriebssysteme enthalten.
+ Container dürfen keine AWS Anmeldeinformationen für den Zugriff auf AWS Dienste anfordern. Wenn Ihr Produkt auf AWS Dienste zugreifen muss, müssen Sie eine der folgenden Optionen verwenden:
  + IAM-Rollen für Dienstkonten für Amazon Elastic Kubernetes Service (Amazon EKS) -Workloads.
  + IAM-Rollen für Aufgaben, für Amazon Elastic Container Service (Amazon ECS) -Workloads.
+ Container-basierte Produkte dürfen nur die geringsten Rechte benötigen, um ausgeführt zu werden. Weitere Informationen finden Sie unter [Sicherheit in Amazon Elastic Container Service](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/security.html) und [Sicherheit in Amazon EKS](https://docs.aws.amazon.com//eks/latest/userguide/security.html).
+ Container-Images sollten standardmäßig so konfiguriert sein, dass sie mit Nicht-Root-Rechten ausgeführt werden.
+ Container dürfen keine fest codierten Geheimnisse wie Passwörter (auch nicht gehashte) für Systembenutzer und -dienste, private Schlüssel, Anmeldeinformationen usw. enthalten.
+ Bei der Authentifizierung in Diensten, die innerhalb des Containers ausgeführt werden, darf keine kennwortbasierte Authentifizierung verwendet werden, auch wenn das Passwort vom Benutzer beim Start generiert, zurückgesetzt oder definiert wird. Null- und Leerkennwörter sind ebenfalls nicht zulässig.
+ Container-Images dürfen keine Ebenen mit nicht unterstützten Architekturen enthalten (z. B. Intoto Attestation Framework-Metadaten).

## Anforderungen bezüglich Kundeninformationen
<a name="container-customer-info-requirements"></a>

 Alle Produkte auf Containerbasis müssen die folgenden Anforderungen an Kundeninformationen erfüllen: 
+ Software darf ohne Wissen und ausdrückliche Zustimmung des Kunden keine Kundendaten sammeln oder exportieren, es sei denn, dies ist von BYOL (Bring Your Own License) vorgeschrieben. Anwendungen, die Kundendaten sammeln oder exportieren, müssen diesen Richtlinien entsprechen: 
  + Die Erfassung der Kundendaten muss im Self-Service-Modus erfolgen, automatisiert und sicher sein. Käufer dürfen nicht warten müssen, bis die Verkäufer die Bereitstellung der Software genehmigen. 
  + Die Erfassung von Kundendaten muss Ihren Vereinbarungen mit AWS, einschließlich, aber nicht beschränkt auf, den [Allgemeinen Geschäftsbedingungen, den [AWS Servicebedingungen](https://aws.amazon.com/service-terms/), der [AWS Datenschutzerklärung](https://aws.amazon.com/privacy/) und der [AWS Kundenvereinbarung](https://aws.amazon.com/agreement/) von AWS Marketplace](https://aws.amazon.com/legal/seller-terms/) entsprechen.
  + Zahlungsinformationen dürfen nicht gesammelt werden.

## Anforderungen an die Produktnutzung
<a name="container-usage-requirements"></a>

 Alle Produkte, die in Behältern hergestellt werden, müssen die folgenden Anforderungen für die Produktnutzung erfüllen: 
+ Verkäufer können nur voll funktionsfähige Produkte anbieten. Beta- oder Vorabversionen von Produkten zu Test- oder Testzwecken sind nicht zulässig. Entwickler-, Community- und BYOL-Editionen kommerzieller Software werden unterstützt, wenn der Verkäufer AWS Marketplace innerhalb von 90 Tagen nach Bereitstellung der kostenlosen Version eine gleichwertige kostenpflichtige Version bereitstellt.
+ Sämtliche Nutzungsanweisungen für ein containergestütztes Produkt müssen alle Schritte zur Bereitstellung containerbasierter Produkte enthalten. Die Nutzungsanweisungen müssen Befehle und Bereitstellungsressourcen enthalten, die auf die entsprechenden Container-Images verweisen. AWS Marketplace
+ Container-basierte Produkte müssen alle Container-Images enthalten, die ein Abonnent zur Nutzung der Software benötigt. Darüber hinaus dürfen containerbasierte Produkte nicht erfordern, dass ein Benutzer das Produkt mit Bildern von außerhalb startet AWS Marketplace (z. B. Container-Images aus Repositorys von Drittanbietern).
+ Container und ihre Software müssen als Self-Service-Lösung bereitgestellt werden können und dürfen keine zusätzlichen Zahlungsmethoden oder Kosten erfordern. Anwendungen, für deren Bereitstellung externe Abhängigkeiten erforderlich sind, müssen den folgenden Richtlinien entsprechen:
  + Die Anforderung muss in der Beschreibung oder den Nutzungshinweisen des Angebots angegeben werden. Für *dieses Produkt ist beispielsweise eine Internetverbindung erforderlich, um es ordnungsgemäß bereitzustellen. Die folgenden Pakete werden bei der Bereitstellung heruntergeladen:.* <list of package> 
  + Verkäufer sind für die Nutzung und Sicherstellung der Verfügbarkeit und Sicherheit aller externen Abhängigkeiten verantwortlich. 
  + Wenn die externen Abhängigkeiten nicht mehr verfügbar sind, muss das Produkt AWS Marketplace ebenfalls entfernt werden. 
  + Die externen Abhängigkeiten dürfen keine zusätzlichen Zahlungsmethoden oder Kosten erfordern.
+ Container, die eine ständige Verbindung zu externen Ressourcen erfordern, die nicht der direkten Kontrolle des Käufers unterliegen, z. B. externe APIs oder vom Verkäufer oder einem Dritten AWS-Services verwaltete Ressourcen, müssen die folgenden Richtlinien einhalten:
  + Die Anforderung muss in der Beschreibung oder den Nutzungshinweisen des Angebots angegeben werden. Für *dieses Produkt ist beispielsweise eine ständige Internetverbindung erforderlich. Die folgenden laufenden externen Dienste sind erforderlich, um ordnungsgemäß zu funktionieren:.* <list of resources> 
  + Die Verkäufer sind für die Nutzung und Sicherstellung der Verfügbarkeit und Sicherheit aller externen Ressourcen verantwortlich.
  + Wenn die externen Ressourcen nicht mehr verfügbar sind, muss das Produkt AWS Marketplace ebenfalls entfernt werden.
  + Für die externen Ressourcen dürfen keine zusätzlichen Zahlungsmethoden oder Kosten anfallen und der Verbindungsaufbau muss automatisiert werden.
+ Produktsoftware und Metadaten dürfen keine Sprache enthalten, die Nutzer zu anderen Cloud-Plattformen, zusätzlichen Produkten oder Upsell-Services weiterleitet, auf AWS Marketplace denen sie nicht verfügbar sind.
+ Wenn es sich bei Ihrem Produkt um ein Add-on zu einem anderen Produkt oder einem Produkt eines anderen ISVs handelt, muss aus Ihrer Produktbeschreibung hervorgehen, dass es die Funktionalität des anderen Produkts erweitert und dass Ihr Produkt ohne dieses Produkt nur einen sehr begrenzten Nutzen hat. *Dieses Produkt erweitert beispielsweise die Funktionalität von und ohne dieses Produkt hat dieses Produkt nur einen sehr begrenzten Nutzen<product name>. Bitte beachten Sie, dass für die volle Funktionalität dieses Angebots möglicherweise eine eigene Lizenz erforderlich ist.* <product name>

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

 Alle containerbasierten Produkte müssen die folgenden Architekturanforderungen erfüllen: 
+ Die Container-Quellbilder für AWS Marketplace müssen in das Amazon Elastic Container Registry (Amazon ECR) -Repository übertragen werden, das Eigentum von AWS Marketplace ist. Sie können diese Repositorys AWS Marketplace Management Portal unter den Serverprodukten für jedes Ihrer Container-Produktangebote erstellen.
+ Container-Images müssen auf Linux basieren.
+ Bezahlte Produkte auf Containerbasis müssen auf [Amazon ECS, Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) [EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) oder bereitgestellt werden können. [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)
+ Bezahlte containerbasierte Produkte mit Vertragspreisen und einer Integration mit AWS License Manager sollten auf Amazon EKS, Amazon ECS, Amazon EKS Anywhere AWS Fargate, Amazon ECS Anywhere, Red Hat OpenShift Service on AWS (ROSA), selbstverwalteten Kubernetes-Clustern vor Ort oder auf Amazon Elastic Compute Cloud bereitgestellt werden.
+ Bei Helm-Chart-Produkten müssen die Container-Image-Referenzen entsprechend strukturiert sein, um den regionsübergreifenden Einsatz zu unterstützen. [Anforderungen an die Struktur des Helmdiagramms](#helm-chart-structure-requirements)
+ Wenn Ihr containerbasiertes Produkt erfordert, dass der Käufer ein Amazon Machine Image (AMI) bereitstellt, muss es sich entweder um ein AWS-verwaltetes AMI oder um ein separates AMI handeln, das in veröffentlicht wurde. AWS Marketplace Wenn Sie Ihr eigenes AMI in veröffentlichen AWS Marketplace, muss es dem entsprechen, [AMI-basierte Produktanforderungen für AWS Marketplace](product-and-ami-policies.md) und Sie müssen angeben, dass es sich um ein Zusatzprodukt handelt, wie in der vorgeschrieben[Richtlinien zur Produktnutzung](product-and-ami-policies.md#product-usage). Sie können den Preis für Ihr AMI-basiertes Produkt als BYOL angeben, da es sich dabei um eine Erweiterung Ihres containerbasierten Angebots handelt. AWS Marketplace scannt AMI-basierte Produkte auf ungepatchte allgemeine Sicherheitslücken und Risiken () CVEs und Sicherheitsanforderungen. Ihre Käufer müssen Ihr AMI-basiertes Produkt auch abonnieren, bevor sie es bereitstellen können.

## Anforderungen an die Struktur des Helmdiagramms
<a name="helm-chart-structure-requirements"></a>

Alle Produkte von Helm Chart AWS Marketplace müssen die folgenden Strukturanforderungen erfüllen, um eine korrekte Regionalisierung und Bereitstellung in allen AWS Regionen zu gewährleisten:
+ Container-Bildreferenzen müssen ausschließlich in der `values.yaml` Datei definiert und dürfen nicht in anderen Dateien innerhalb des Helm-Diagramms hartcodiert sein. Auf diese Weise können AWS Marketplace Sie diese Verweise automatisch ersetzen, wenn Sie Ihr Produkt in verschiedene Regionen replizieren.
+ Die `values.yaml` Datei muss Variablen für alle Container-Bildreferenzen verwenden.
+ Optional können Sie die Datei aufteilen `registry` und `tag` in separate Felder auf derselben Ebene wie das Repository aufteilen, um Ihre Bildreferenz aufzubauen.
+ Helm-Vorlagen müssen diese Variablen unter Verwendung der standardmäßigen Helm-Vorlagensyntax referenzieren (z. B.`{{ .Values.image.repository }}:{{ .Values.image.tag }}`).
+ Vermeiden Sie die Verwendung von bedingter Logik in Vorlagen, die die in `values.yaml` definierten Bildreferenzen umgehen würde.
+ Wenn Sie Ihr Helm-Diagramm mit verschiedenen AWS Regionen testen, stellen Sie sicher, dass alle Bildverweise in den bereitgestellten Ressourcen `values.yaml` korrekt aktualisiert werden, wenn Sie die Region ändern.

AWS Marketplace überprüft während des Produkteinreichungsprozesses, ob alle Bildreferenzen für Container in der `values.yaml` Datei korrekt definiert sind. Produkte, die diese Anforderungen nicht erfüllen, werden abgelehnt.

### Anforderungen für Referenzen auf Container-Bilder in Helm-Diagrammen
<a name="helm-chart-best-practices"></a>

Im Folgenden werden Ansätze zur Strukturierung von Container-Bildreferenzen in Helm-Diagrammen demonstriert:

**`values.yaml`(empfohlenes Format):**

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

**Anmerkung**  
Wir empfehlen den oben genannten Ansatz für die Struktur Ihrer`values.yaml`, aber die folgenden alternativen Methoden sind auch gültig.

**`values.yaml`(alternatives Format):**

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

**`values.yaml`(alternatives Format):**

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

**Anmerkung**  
Für die Bereitstellungsvorlage ist das unten stehende Format das einzig gültige verfügbare Format.

**Bereitstellungsvorlage:**

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

**Falscher Ansatz (nicht verwenden):**

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

### Mögliche Fehler bei der Validierung von Helmdiagrammen
<a name="helm-chart-validation-errors"></a>

 AWS Marketplace Führt während des Produkteinreichungsprozesses Validierungsprüfungen für Helm-Chart-Produkte durch, um sicherzustellen, dass die Referenzanforderungen für Containerbilder eingehalten werden. Wenn Ihr Helm-Diagramm diese Anforderungen nicht erfüllt, können die folgenden Validierungsfehler auftreten:


| Fehler | Erklärung | 
| --- | --- | 
| INCOMPATIBLE\$1HELM\$1OBJECTS | Die angegebenen Helm-Objekte werden für EKS-Add-Ons nicht unterstützt. Siehe [Anforderungen für Amazon EKS-Add-On-Produkte](#publishing-eks-add-on). | 
| INVALID\$1DEPENDENT\$1HELM\$1CHARTS | Abhängige Helm-Diagramme müssen sich im übergeordneten Diagrammverzeichnis befinden und dürfen nicht extern bezogen werden. | 
| INVALID\$1HELM\$1SENSITIVE\$1CONFIG | Das Konfigurationsschema darf keine Felder enthalten, die vertrauliche Informationen sammeln. Konfigurationsschemas dürfen keine Passwörter, API-Schlüssel, Zertifikate oder Geheimnisse akzeptieren. Stellen Sie stattdessen Felder für geheime Kubernetes-Namen bereit, die Kunden separat erstellen. | 
| INVALID\$1HELM\$1CHART\$1IMAGES | Alle Images, einschließlich Open-Source-Abhängigkeiten, müssen in AWS Marketplace Amazon ECR-Repositorys übertragen werden, die über die [Add](container-add-version.md#add-repositories) Repository-Anfrage erstellt wurden. | 
| INVALID\$1HELM\$1UNDECLARED\$1IMAGES | Alle Referenzen auf Container-Images müssen in der Anfrage „Version [hinzufügen](container-add-version.md#add-new-version)“ explizit aufgeführt werden. | 
| INVALID\$1HELM\$1LINT | Die helm lint Überprüfung des Helm-Diagramms ist fehlgeschlagen. helm lintLokal ausführen, um strukturelle oder syntaktische Probleme zu identifizieren und zu beheben. Verwenden Sie die Helm-Version 3.19.0 oder höher. | 
| INVALID\$1HELM\$1TEMPLATE | Das Helm-Diagramm konnte nicht helm template validiert werden. Das Diagramm kann nicht in gültige Kubernetes-Manifeste gerendert werden. Testen Sie lokal mithelm template, um Syntax- oder Logikfehler in der Vorlage zu identifizieren. Verwenden Sie die Helm-Version 3.19.0 oder höher. | 
| MISSING\$1HELM\$1DEPLOYMENT\$1CONFIG | Das Helm-Diagramm für ein Amazon EKS-Add-on muss eine Bereitstellung oder DaemonSet Ressource enthalten. Amazon EKS benötigt mindestens einen dieser Workload-Typen für das Add-On-Lebenszyklusmanagement. Siehe [Anforderungen für Amazon EKS-Add-On-Produkte](#publishing-eks-add-on). | 
| INCOMPATIBLE\$1CONFIGURATION\$1SCHEMA\$1VERSION | Die JSON-Schemaversion in aws\$1mp\$1configuration\$1schema.json wird nicht unterstützt. Informationen [Schema-Anforderungen](#schema-requirements) zu unterstützten Schemaversionen finden Sie unter. | 
| INVALID\$1IMAGE\$1REFERENCE | Alle Bilder müssen als Variablen in definiert values.yaml und mithilfe der Helm-Vorlagensyntax referenziert werden, wie unter beschrieben[Anforderungen an die Struktur des Helmdiagramms](#helm-chart-structure-requirements). | 
| MISSING\$1VALUES\$1IMAGE\$1REFERENCE | Jede Container-Image-Referenz muss einen entsprechenden Eintrag in habenvalues.yaml. | 
| MISSING\$1IMAGE\$1TAG | Container-Bildreferenzen in values.yaml müssen explizite Tag-Werte enthalten oder standardmäßig die Diagrammversion von verwendenChart.yaml. | 

## Anweisungen zur Verwendung von Container-Produkten
<a name="container-product-usage-instructions"></a>

Folgen Sie bei der Erstellung von Nutzungsanweisungen für Ihr Containerprodukt die Schritte und Anleitungen unter[Erstellung von Anweisungen zur Verwendung von AMI- und Container-Produkten für AWS Marketplace](ami-container-product-usage-instructions.md). 

### Anweisungen zur Verwendung der Helmtabelle
<a name="helm-chart-usage-instructions"></a>

Bei der Erstellung von Nutzungsanweisungen für Helm-Chart-Produkte:
+ Dokumentieren Sie klar und deutlich alle konfigurierbaren Parameter in Ihrer `values.yaml` Datei, einschließlich Bild-Repository-, Tag- und Registrierungsparametern.
+ Geben Sie Beispiele an, wie Sie diese Parameter bei der Installation des Helm-Diagramms überschreiben können.
+ Weisen Sie die Benutzer nicht an, bei der Installation des Diagramms andere Dateien als `--set` Parameter zu ändern `values.yaml` oder Parameter zu verwenden.
+ Geben Sie Informationen darüber an, wie Ihr Produkt mit der Regionalisierung von Container-Bildern umgeht.

## Anforderungen für Amazon EKS-Add-On-Produkte
<a name="publishing-eks-add-on"></a>

Ein Amazon EKS-Add-on ist Software, die Betriebsfunktionen für Kubernetes Anwendungen bereitstellt, aber nicht anwendungsspezifisch ist. Ein Amazon EKS-Add-on umfasst beispielsweise Observability-Agenten oder Kubernetes -Treiber, die es dem Cluster ermöglichen, mit den zugrunde liegenden AWS Ressourcen für Netzwerk, Datenverarbeitung und Speicher zu interagieren.

Als Verkäufer von Containerprodukten können Sie zwischen verschiedenen Bereitstellungsoptionen wählen, darunter Amazon EKS. Sie können eine Version Ihres Produkts als Add-on im Amazon AWS Marketplace EKS-Add-On-Katalog veröffentlichen. Ihr Add-on wird in der Amazon EKS-Konsole neben Add-Ons angezeigt, die von AWS und anderen Anbietern verwaltet werden. Ihre Käufer können Ihre Software genauso einfach als Add-On bereitstellen wie die anderen Add-Ons.

Weitere Informationen finden Sie unter [Erweiterungen für Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html) im *Amazon-EKS-Benutzerhandbuch*.

### Bereiten Sie Ihr Container-Produkt als AWS Marketplace Zusatzprodukt vor
<a name="preparing-eks-addon"></a>

Um Ihr Container-Produkt als AWS Marketplace Add-on zu veröffentlichen, muss es die folgenden Anforderungen erfüllen:
+ Ihr Container-Produkt muss in veröffentlicht werden AWS Marketplace.
+ Ihr Container-Produkt muss für beide AMD64 ARM64 Architekturen kompatibel sein.
+ Ihr Container-Produkt darf nicht das [Preismodell](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing-container-products.html) Bring Your Own License (BYOL) verwenden.
**Anmerkung**  
BYOL wird für die Bereitstellung von Amazon EKS-Add-Ons nicht unterstützt.
+ Sie müssen alle [containerbasierten Produktanforderungen erfüllen, einschließlich der Übertragung aller Container-Images](https://docs.aws.amazon.com/marketplace/latest/userguide/container-product-policies.html) und Helm -Diagramme in AWS Marketplace verwaltete Amazon ECR-Repositorys. Diese Anforderung umfasst beispielsweise Open-Source-Bilder. `nginx` Bilder und Diagramme können nicht in anderen externen Repositorys gehostet werden, einschließlich, aber nicht beschränkt auf [Amazon ECR Public Gallery](https://docs.aws.amazon.com/AmazonECR/latest/public/public-repositories.html)Docker Hub, und. Quay
+ **HelmDiagramme** — Bereiten Sie Ihre Software vor und verpacken Sie sie als Helm Diagramm. Das Amazon EKS-Add-On-Framework konvertiert ein Helm Diagramm in ein Kubernetes-Manifest. Einige Helm Funktionen werden in Amazon EKS-Systemen nicht unterstützt. In der folgenden Liste werden die Anforderungen beschrieben, die erfüllt sein müssen, bevor Sie Ihre Software als Amazon EKS-Add-on integrieren können. In dieser Liste verwenden alle Helm Befehle Helm Version 3.19.0:
  + Alle `Capabilities` Objekte werden unterstützt, mit einer Ausnahme für. `.APIVersions` `.APIVersions`wird für non-built-in Benutzerdefiniert nicht unterstützt Kubernetes APIs.
  + Nur die `Release.Namespace` Objekte `` `Release.Name` und werden unterstützt.
  + HelmHooks und die `lookup` Funktion werden nicht unterstützt.
  + Alle abhängigen Diagramme müssen sich innerhalb des Helm Hauptdiagramms befinden (angegeben mit dem Repository-Pfad file://...).
  + Das Helm Diagramm muss Helm Lint und Helm Template erfolgreich und ohne Fehler bestanden haben. Die Befehle lauten wie folgt:
    + HelmFussel — `helm lint helm-chart`

      Zu den häufigsten Problemen gehören nicht deklarierte Diagramme in den Metadaten des übergeordneten Diagramms. Beispiel: `chart metadata is missing these dependencies: chart-base Error: 1 chart(s) linted, 1 chart(s) failed`
    + HelmVorlage — `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`

      Übergeben Sie alle überschriebenen Konfigurationen mit der `-f` Flagge.
  + Speichern Sie alle Container-Binärdateien in AWS Marketplace Amazon ECR-Repos. Um ein Manifest zu erstellen, verwenden Sie den zuvor Helm gezeigten Template-Befehl. Suchen Sie im Manifest nach externen Bildverweisen wie `busybox` `gcr` Bildern. Laden Sie alle Container-Images zusammen mit Abhängigkeiten in AWS Marketplace Amazon ECR-Repos hoch, die mit der Option **Add Repository in der Dropdownliste** für Anfragen erstellt wurden.
+ **Benutzerdefinierte Konfiguration** — Sie können während der Bereitstellung benutzerdefinierte Variablen hinzufügen. Informationen dazu, wie Sie die Endbenutzererfahrung identifizieren, der Software `aws_mp_configuration_schema.json` einen Namen geben und sie in einen Wrapper mit dem Helm Diagramm packen können, finden Sie unter [Amazon EKS-Add-Ons: Erweiterte Konfiguration](https://aws.amazon.com/blogs/containers/amazon-eks-add-ons-advanced-configuration/).

  Laut [dem Schlüsselwort „\$1schema“](https://json-schema.org/draft/2020-12/json-schema-core#name-the-schema-keyword) `$schema` muss es sich um einen URI handeln, der auf eine gültige `application/schema+json` Ressource verweist.

  Diese Datei darf keine vertraulichen Informationen wie Passwörter, Lizenzschlüssel und Zertifikate akzeptieren.

  Um die Installation von Geheimnissen und Zertifikaten zu handhaben, können Sie Endbenutzern Schritte nach der pre-Add-on Installation oder Installation zur Verfügung stellen. Das Produkt sollte nicht auf externe Lizenzen angewiesen sein. Das Produkt sollte auf der Grundlage von AWS Marketplace Berechtigungen funktionieren.

  Weitere Informationen zu Einschränkungen für finden Sie `aws_mp_configuration_schema.json` unter[Anforderungen an die Konfiguration von Add-ons und bewährte Methoden für Add-On-Anbieter](#eks-addon-configuration).
+ **Identifizieren und erstellen Sie den Namespace, in dem die Software bereitgestellt wird — In** der ersten Version Ihres Produkts müssen Sie den Namespace, in dem die Software bereitgestellt werden soll, identifizieren, indem Sie einen Namespace mit Vorlagen hinzufügen.
+ **Benutzerdefinierte Ressourcendefinitionen (CRDs)** — Das Amazon EKS Addon-Framework unterstützt nicht die Installation von CRDs und benutzerdefinierte Ressourcendeklarationen, die darauf basieren, dass sie mit demselben Add-on CRDs angewendet wurden. Wenn Ihr Add-on über benutzerdefinierte Ressourcen verfügt und darauf angewiesen ist CRDs, können Sie entweder: 
  + **Veröffentlichen Sie zwei Add-Ons:** Teilen Sie die CRD-Definition in ein separates Add-On auf (separates Helm-Diagramm) und die eigentliche Installation der [benutzerdefinierten Ressourcen](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) in ein separates Add-On.
  + **Veröffentlichen Sie ein einzelnes Add-on mit zusätzlichen manuellen Anweisungen:** Veröffentlichen Sie ein einzelnes Add-on, das das Add-on CRDs auf dem Cluster installiert. Stellen Sie Benutzeranweisungen zusammen mit Kubernetes-Manifestdateien bereit, damit Endbenutzer benutzerdefinierte Ressourcen einrichten können, die von diesen abhängen. CRDs
+ **Erstellen Sie das, `serviceAccount` falls zutreffend** — Wenn es sich bei der Software entweder um eine kostenpflichtige Software handelt AWS Marketplace oder eine Verbindung zu einer anderen Software hergestellt werden muss AWS-Services, stellen Sie sicher, dass das Helm Diagramm `serviceAccount` standardmäßig erstellt wird. Wenn die `serviceAccount` Erstellung über einen Parameter in einer `values.yaml` Datei erfolgt, legen Sie den Parameterwert auf fest`true`. Beispiel, `serviceAccount.create = true`. Dies ist erforderlich, da der Kunde das Add-on möglicherweise installieren möchte, indem er die Berechtigungen von der zugrunde liegenden Knoteninstanz erbt, die bereits über die erforderlichen Berechtigungen verfügt. Wenn das Helm-Diagramm das nicht erstellt`serviceAccount`, können die Berechtigungen auch nicht mit dem `serviceAccount` verknüpft werden.
+ **Rückverfolgbare Bereitstellungen oder Daemonsets** — Stellen Sie sicher, dass Ihr Helm-Diagramm über ein Daemonset oder eine Bereitstellung verfügt. Das Amazon EKS Addon Framework verfolgt die Bereitstellung Ihrer Amazon EKS-Ressourcen mithilfe dieser Ressourcen. Ohne eine rückverfolgbare Bereitstellung oder ein Daemonset tritt bei Ihrem Addon ein Bereitstellungsfehler auf. Wenn Ihr Addon kein Deployment oder Daemonset hat, wenn Ihr Addon beispielsweise eine Reihe von benutzerdefinierten Ressourcen oder einen Kubernetes-Job bereitstellt, die nicht rückverfolgbar sind, fügen Sie ein Dummy-Deployment- oder Daemonset-Objekt hinzu.
+ **Support für AMD- und ARM-Architekturen** — Viele Amazon EKS-Kunden nutzen ARM64 heute AWS Graviton-Instances. Software von Drittanbietern muss beide Architekturen unterstützen.
+ **Integration mit Lizenzierung oder Abrechnung APIs von AWS Marketplace** — AWS Marketplace unterstützt mehrere Abrechnungsmodelle. Weitere Informationen finden Sie unter [Integrationen für die Abrechnung, Messung und Lizenzierung von Container-Produkten](container-products-billing-integration.md). Wenn Sie Ihr Produkt über PAYG-Mechanismen verkaufen möchten, finden Sie weitere Informationen unter[Konfiguration der benutzerdefinierten Messung für Containerprodukte mit dem AWS Marketplace Metering Service](container-metering-meterusage.md). Wenn Sie Ihr Produkt im Rahmen eines Vorabverkaufs- oder Vertragsmodells verkaufen möchten, finden Sie weitere Informationen unter. [Vertragspreise für Containerprodukte mit AWS License Manager](container-license-manager-integration.md) 
+ **Laden Sie die Software und alle Artefakte und Abhängigkeiten** hoch — Das Helm-Diagramm muss eigenständig sein und darf beispielsweise keine Abhängigkeiten von externen Quellen erfordern. GitHub Wenn für die Software externe Abhängigkeiten erforderlich sind, müssen die Abhängigkeiten in AWS Marketplace private Amazon ECR-Repositorys unter derselben AWS Marketplace Liste übertragen werden.
+ Stellen Sie **Anweisungen zur Bereitstellung auf Ihrer Website** bereit — Wir bitten Sie, einen Bereitstellungsleitfaden für Kunden bereitzustellen, in dem beschrieben wird, wie Ihre Software mithilfe des Befehls [create-addon](https://docs.aws.amazon.com/cli/latest/reference/eks/create-addon.html) bereitgestellt werden kann.
+ ** permissions/IAM Zusatzrollen** — Wenn Ihr von veröffentlichtes Add-on Zugriff auf einen AWS Service AWS Marketplace erfordert, sollte Ihre Software über ein Kubernetes-Dienstkonto verfügen, das mit IAM-Richtlinien für den Zugriff auf Dienste versehen ist. AWS Sie können zwischen zwei Optionen für Ihr Dienstkonto wählen, um API-Anfragen an Dienste zu stellen: AWS 
  + Anmeldeinformationen über IRSA: Mit dieser Option kann Ihre Software Assume-Anmeldeinformationen vom Identity and Access Management (IAM) -Rollendienst (IRSA) abrufen. Weitere Informationen finden Sie unter [IAM-Rollen](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) für Dienstkonten. 
  + Amazon EKS-Pod-Identität: Mit dieser Option kann Ihre Software die Pod-Identität des Amazon EKS-Pods verwenden, um API-Anfragen an AWS Dienste zu stellen. Weitere Informationen finden [Sie unter Erfahren Sie, wie EKS Pod Identity Pods Zugriff auf AWS Dienste gewährt](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)

  Ihr Add-on muss über eine zusätzliche Konfigurationsdatei verfügen, die auf der obersten Ebene des Helm-Diagramms benannt `aws_mp_addon_parameters.json` ist, und zwar im selben Verzeichnis wie das aktuelle benutzerdefinierte Konfigurationsschema (`aws_mp_configuration_schema.json`). Derzeit verarbeitet diese Datei nur Pod-Identity-kompatible Berechtigungen. Das Dateiformat lautet wie folgt: 

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

  **Name der Datei: `aws_mp_addon_parameters.json`**
**Anmerkung**  
Die `aws_mp_addon_parameters.json` Datei aktiviert den Bereich **Add-On-Zugriff auf** der Seite mit den **Add-on-Konfigurationseinstellungen** der Amazon EKS-Konsole    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/marketplace/latest/userguide/container-product-policies.html)
**Anmerkung**  
Pay-as-you-go (PAYG) Zusatzprodukte von AWS Marketplace können Amazon EKS Pod Identity nicht verwenden und müssen IAM Roles for Service Accounts (IRSA) für die Zugriffskontrolle verwenden.
+ **Versionsupdates** — Amazon EKS veröffentlicht einige Wochen nach der Upstream-Version neue Kubernetes-Versionen. Sobald neue Amazon EKS-Cluster-Versionen allgemein verfügbar sind, haben Anbieter 45 Tage Zeit, um ihre Software zu zertifizieren oder zu aktualisieren, damit sie mit der neuen Amazon EKS-Cluster-Version kompatibel ist. Wenn Ihre aktuellen Versionen des Add-ons die neue Kubernetes-Version unterstützen, überprüfen und zertifizieren Sie diese, damit wir die Versionskompatibilitätsmatrix aktualisieren können. Wenn eine neue Add-On-Version benötigt wird, um die neue Version der Kubernetes-Version zu unterstützen, reichen Sie bitte die neue Version zum Onboarding ein.
+ Die Software des Partners muss in einen der folgenden Typen fallen oder eine betriebsbereite Software sein, die Kubernetes oder Amazon EKS erweitert: 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 Sicherheit \$1 Backup \$1 Ingress-Controller \$1 Observability ingress-service-type
+ Software kann nicht [Container Network Interface (CNI)](https://github.com/containernetworking/cni) sein.
+ Software muss im Rahmen von Licensing AWS Marketplace and Metering APIs für kostenpflichtige Produkte verkauft und in diese integriert werden. BYOL-Produkte werden nicht akzeptiert.

### Anforderungen an die Konfiguration von Add-ons und bewährte Methoden für Add-On-Anbieter
<a name="eks-addon-configuration"></a>

Amazon EKS erfordert die Konfiguration als [Helm-JSON-Schemazeichenfolge](https://helm.sh/docs/topics/charts/#schema-files) von Add-On-Anbietern. Add-ons, für die entweder erforderliche Konfigurationen erforderlich sind oder optionale Konfigurationen zulassen, müssen eine `aws_mp_configuration_schema.json` Datei mit dem Helm-Diagramm enthalten, an die gesendet wird AWS Marketplace. Amazon EKS verwendet dieses Schema, um die Konfigurationseingaben von Kunden zu validieren und API-Aufrufe mit Eingabewerten abzulehnen, die nicht dem Schema entsprechen. Zusatzkonfigurationen lassen sich in der Regel in zwei Kategorien einteilen:
+ Konfiguration für allgemeine Kubernetes-Eigenschaften wie Labels, Toleranzen, NodeSelector usw.
+ Add-On-spezifische Konfigurationen wie Lizenzschlüssel, Aktivierung von Funktionen usw. URLs

Dieser Abschnitt konzentriert sich auf die erste Kategorie, die sich auf allgemeine Kubernetes-Eigenschaften bezieht.

Amazon EKS empfiehlt, sich bei der Konfiguration von Amazon EKS-Add-Ons an bewährte Methoden zu halten.
+ [Schema-Anforderungen](#schema-requirements)
+ [Allgemeine Parameter, die für die Konfiguration zulässig sind](#parameters-allowed)
+ [Allgemeine Parameter, die für die Konfiguration nicht zulässig sind](#parameters-not-available)

#### Schema-Anforderungen
<a name="schema-requirements"></a>

Stellen Sie bei der Definition des JSON-Schemas sicher, dass Sie eine Version von jsonschema verwenden, die von Amazon EKS-Add-Ons unterstützt wird. 

Die Liste der unterstützten Schemas:
+ 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

Die Verwendung einer anderen JSON-Schemaversion ist mit Amazon EKS-Add-Ons nicht kompatibel und führt dazu, dass das Add-on erst veröffentlicht werden kann, wenn dieses Problem behoben ist.

**Beispiel für eine Helm-Schemadatei**

```
{
"$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**  
Die Konfigurationsparameter müssen CamelCase sein und werden abgelehnt, wenn dieses Format nicht eingehalten wird.

**Beschreibungen sind erforderlich**  
Fügen Sie immer aussagekräftige Beschreibungen für Schemaeigenschaften hinzu. Diese Beschreibung wird verwendet, um die Labelnamen in der Amazon EKS-Konsole für jeden Konfigurationsparameter zu rendern.

**RBAC-Definition**  
Add-On-Anbieter müssen die RBAC-Berechtigungen definieren und bereitstellen, die für eine erfolgreiche Installation des Add-ons erforderlich sind. Dabei gilt das Prinzip der geringsten Rechte. Wenn die RBAC-Berechtigungen für neuere Versionen des Add-ons oder für Korrekturen zur Behebung eines CVE geändert werden müssen, müssen die Add-On-Anbieter das Amazon EKS-Team über diese Änderung informieren. Die erforderlichen Berechtigungen für jede Kubernetes-Ressource sollten auf den Ressourcennamen des Objekts beschränkt werden.   

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

**Verwaltung von Geheimnissen**  
Dieser Abschnitt bezieht sich nur auf Add-Ons, bei denen Kunden geheime Informationen wie Anwendungsschlüssel, API-Schlüssel, Passwort usw. konfigurieren müssen. Derzeit unterstützt Amazon EKS APIs die Weitergabe geheimer Informationen im Klartext aus Sicherheitsgründen nicht. Kunden können jedoch die Konfiguration verwenden, um den Namen des Kubernetes-Secrets weiterzugeben, das die für das Add-on benötigten Schlüssel enthält. Kunden müssen als erforderlichen Schritt Kubernetes Secret-Objekte erstellen, die die Schlüssel mit demselben Namespace enthalten, und dann bei der Erstellung des Add-ons den Namen des Secrets mithilfe des Konfigurations-Blobs übergeben. Wir empfehlen, dass Add-On-Anbieter die Schemaeigenschaften benennen, damit Kunden sie nicht versehentlich mit dem tatsächlichen Schlüssel verwechseln. Zum Beispiel: appSecretName, connectionSecretName usw.   
Zusammenfassend lässt sich sagen, dass Add-On-Anbieter das Schema nutzen können, um es Kunden zu ermöglichen, den Namen des Geheimnisses, aber nicht die Schlüssel, die das Geheimnis selbst enthalten, weiterzugeben. 

**Beispiele für Konfigurationswerte**  
Sie können Konfigurationsbeispiele in Ihr Schema aufnehmen, um Kunden bei der Konfiguration von Add-Ons zu unterstützen. Das folgende Beispiel stammt aus dem Schema von 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": []
      }
    ]
```

#### Allgemeine Parameter, die für die Konfiguration zulässig sind
<a name="parameters-allowed"></a>

Die folgenden Parameter werden in einer kundenseitigen Helm-Schemadatei empfohlen.


| Parameter | Description | Sollte es eine Standardeinstellung geben? | 
| --- | --- | --- | 
| Zusätzliche Beschriftungen | Fügen Sie allen Kubernetes-Objekten, die vom Add-on verwaltet werden, Kubernetes-Labels hinzu. | Nein | 
| Zusätzliche Anmerkungen | Fügen Sie Kubernetes-Anmerkungen zu allen Kubernetes-Objekten hinzu, die vom Add-on verwaltet werden. | Nein | 
| PodLabels | Fügen Sie Kubernetes-Labels zu Pods hinzu, die vom Add-on verwaltet werden. | Nein | 
| Pod-Anmerkungen | Fügen Sie Kubernetes-Anmerkungen zu Pods hinzu, die vom Add-on verwaltet werden. | Nein | 
| logLevel | Protokollebene für Komponenten, die vom Add-on verwaltet werden. | Ja | 
| nodeSelector | Einfachste empfohlene Form der Einschränkung der Knotenauswahl. Sie können das Feld NodeSelector zu Ihrer Pod-Spezifikation hinzufügen und die Knotenbezeichnungen angeben, die der Zielknoten haben soll. | Potenziell, zum Beispiel nur Linux-Knoten | 
| Toleranzen | Toleranzen werden auf Pods angewendet. Toleranzen ermöglichen es dem Scheduler, Pods mit passenden Taints einzuplanen. Toleranzen ermöglichen eine Terminplanung, garantieren aber nicht die Terminplanung. | Vielleicht häufiger bei Daemonsets | 
| Affinität | Die Affinitätsfunktion besteht aus zwei Affinitätstypen: Die Knotenaffinität funktioniert wie das NodeSelector-Feld, ist jedoch aussagekräftiger und ermöglicht die Angabe von Soft-Rules. Mit der Affinität/Anti-Affinität zwischen Pods können Sie Pods anhand von Labels auf anderen Pods einschränken. | Vielleicht | 
| topologySpreadConstraints | Mithilfe von Beschränkungen für die Topologieverteilung können Sie steuern, wie Pods in Ihrem Cluster auf Fehlerdomänen wie Regionen, Zonen, Knoten und andere benutzerdefinierte Topologiedomänen verteilt werden. Dies kann dazu beitragen, eine hohe Verfügbarkeit sowie eine effiziente Ressourcennutzung zu erreichen. | Vielleicht | 
| Ressourcenanforderung/-limits | Geben Sie an, wie viel cpu/memory jeder Container benötigt. Es wird dringend empfohlen, Anfragen zu stellen. Grenzwerte sind optional. | Ja | 
| Replikate | Anzahl der Replikate der vom Add-on verwalteten Pods. Gilt nicht für Daemonsets. | Ja | 

**Anmerkung**  
Bei Konfigurationsparametern für die Arbeitslastplanung müssen Sie gegebenenfalls die Komponenten der obersten Ebene im Schema trennen. Beispiel: Der Amazon EBS CSI-Treiber enthält zwei Hauptkomponenten, Controller und Node-Agent. Kunden benötigen selectors/tolerations für jede Komponente einen anderen Knoten. 

**Anmerkung**  
Die im JSON-Schema definierten Standardwerte dienen ausschließlich der Benutzerdokumentation und ersetzen nicht die Notwendigkeit, den richtigen Standardwert in der `values.yaml` Datei zu haben. Wenn Sie die Standardeigenschaft verwenden, stellen Sie bitte sicher, dass die Standardeinstellung mit der im Schema `values.yaml` übereinstimmt und dass die beiden Artefakte (`values.schema.json`und`values.yaml`) synchron bleiben, wenn Änderungen am Helm-Diagramm vorgenommen werden.

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

### Allgemeine Parameter, die für die Konfiguration nicht zulässig sind
<a name="parameters-not-available"></a>

Cluster-Metadatenparameter wie `clusterName``region`,`vpcId`,`accountId`, und andere können für verschiedene Add-Ons (z. B. Elastic Load Balancing Controller) erforderlich sein. Alle ähnlichen Parameter, die dem Amazon EKS-Service bekannt sind, werden automatisch von Amazon EKS-Add-Ons eingefügt und liegen nicht in der Verantwortung des Benutzers, sie als Konfigurationsoption anzugeben. Zu diesen Parametern gehören:
+ AWS Region
+ Name des Amazon EKS-Clusters
+ VPC-ID des Clusters
+ Container-Registry, speziell für Build-Prod-Konten, die von Netzwerk-Add-Ons verwendet wird
+ DNS-Cluster-IP, speziell für das CoreDNS-Add-On
+ Amazon EKS-Cluster-API-Endpunkt
+ IPv4 auf dem Cluster aktiviert
+ IPv6 auf dem Cluster aktiviert
+ Präfix-Delegierung für IPv6 aktiviert auf dem Cluster

Add-On-Anbieter müssen sicherstellen, dass Sie Templates für diese anwendbaren Parameter definiert haben. Jeder der oben genannten Parameter hat ein vordefiniertes `parameterType` Attribut, das von Amazon EKS definiert wird. Die Release-Metadaten spezifizieren die Zuordnung zwischen dem `parameterType` name/path und dem Parameter in der Vorlage. Auf diese Weise können die Werte dynamisch von Amazon EKS übergeben werden, ohne dass Kunden sie über Konfigurationen angeben müssen. Außerdem erhalten Add-On-Anbieter die Flexibilität, ihren eigenen Vorlagennamen/Pfad zu definieren. Parameter wie die oben genannten, die Amazon EKS dynamisch einfügen muss, sollten aus der Schemadatei ausgeschlossen werden.

**Beispiel für eine Zuordnung anhand von Release-Metadaten**

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

Es wird nicht empfohlen, die folgenden Parameter in einer kundenseitigen Helm-Schemadatei konfigurierbar zu machen. Entweder sollten die Parameter nicht änderbare Standardwerte haben oder sie sollten überhaupt nicht in der Add-On-Vorlage enthalten sein.


| Parameter | Description | Sollte es eine Standardeinstellung geben? | 
| --- | --- | --- | 
| Abbild | Container-Image, das auf dem Kubernetes-Cluster bereitgestellt wird. | Nein, wird über die Add-On-Definition verwaltet | 
| imagePullSecrets | Konfiguration eines Pods für die Verwendung eines Geheimnisses zum Abrufen aus einer privaten Registrierung. | – | 
| LivenessProbe | Der Kubelet-Prozess verwendet Liveness Probes, um zu wissen, wann ein Container neu gestartet werden muss. Beispielsweise könnten Verfügbarkeitstests einen Deadlock catch, bei dem eine Anwendung ausgeführt wird, aber keine Fortschritte machen kann. Ein Neustart eines Containers in einem solchen Zustand kann dazu beitragen, dass die Anwendung trotz Fehlern besser verfügbar ist. | Ja | 
| Bereitschaftstest | Es ist wichtig, dass Sie über eine Bereitschaftsprüfung für Ihre Container verfügen. Auf diese Weise weiß der Kubelet-Prozess, der auf Ihrer Datenebene ausgeführt wird, wann der Container für den Datenverkehr bereit ist. Ein Pod gilt als bereit, wenn alle seine Container bereit sind. Dieses Signal wird unter anderem verwendet, um zu steuern, welche Pods als Backends für Dienste verwendet werden. Wenn ein Pod nicht bereit ist, wird er aus den Service Load Balancers entfernt. | Ja | 
| StartupProbe | Das Kubelet verwendet Starttests, um zu wissen, wann eine Containeranwendung gestartet wurde. Wenn ein solcher Test konfiguriert ist, werden die Verfügbarkeits- und Bereitschaftsprüfungen deaktiviert, bis er erfolgreich ist. Dadurch wird sichergestellt, dass diese Tests den Start der Anwendung nicht beeinträchtigen. Dies kann verwendet werden, um die Verfügbarkeit von Containern zu überprüfen, die langsam starten, um zu verhindern, dass sie vom Kubelet zerstört werden, bevor sie betriebsbereit sind. | Optional | 
| podDisruptionBudget | Definieren Sie ein Pod-Disruption-Budget (PDB), um sicherzustellen, dass bei freiwilligen Störungen eine Mindestanzahl von PODS weiterläuft. Ein PDB begrenzt die Anzahl der Pods einer replizierten Anwendung, die aufgrund freiwilliger Unterbrechungen gleichzeitig ausgefallen sind. Eine quorumbasierte Anwendung möchte beispielsweise sicherstellen, dass die Anzahl der ausgeführten Replikate niemals unter die für ein Quorum erforderliche Anzahl sinkt. Ein Web-Frontend möchte vielleicht sicherstellen, dass die Anzahl der Replikate, die die Last bedienen, niemals unter einen bestimmten Prozentsatz der Gesamtzahl fällt. | Ja, wenn standardmäßig mehr als zwei Replikate verwendet werden | 
| ServiceAccount (Name) | Name des Dienstkontos, unter dem Pods ausgeführt werden. | Ja | 
| ServiceAccount (Anmerkungen) | Anmerkungen, die auf das Dienstkonto angewendet wurden. Wird in der Regel für die Funktion „IAM-Rollen für Dienstkonten“ verwendet | Nein, der ARN für die Rolle des IAM-Servicekontos ist in der Amazon EKS Add-Ons-API der obersten Ebene festgelegt. Eine Ausnahme von dieser Regel ist, wenn Ihr Add-on mehrere hat deployments/controllers (wie Flux) und eine separate IRSA-Rolle erfordert. ARNs | 
| priorityClassName | Die Priorität gibt an, wie wichtig ein Pod im Vergleich zu anderen Pods ist. Wenn ein Pod nicht geplant werden kann, versucht der Scheduler, Pods mit niedrigerer Priorität auszuschließen (zu entfernen), um die Planung des ausstehenden Pods zu ermöglichen. | Ja. Die meisten Add-Ons sind für die Cluster-Funktionalität von entscheidender Bedeutung und sollten standardmäßig über eine Prioritätsklasse verfügen. | 
| podSecurityContext | Ein Sicherheitskontext definiert Einstellungen für Rechte und Zugriffskontrolle für einen Pod oder Container. Wird normalerweise verwendet, um FSGroup festzulegen — was für IRSA in Clustern ab Version 1.19 erforderlich war. | Unwahrscheinlich, da Amazon EKS Kubernetes v1.19 nicht mehr unterstützt | 
| Sicherheitskontext | Ein Sicherheitskontext definiert Einstellungen für Rechte und Zugriffskontrolle für einen Pod oder Container. | Ja | 
| Strategie aktualisieren | Gibt die Strategie an, mit der alte Pods durch neue ersetzt werden. | Ja | 
| NameOverride | Überschreibt den Namen der Pods. | Nein | 
| podSecurityPolicy |  Erzwingen Sie Einschränkungen für Parameter.  | Nein — PSPs sind veraltet | 
| extraVolumeMounts/ExtraVolumes |  Wird für IRSA in Clustern verwendet, die nicht zu Amazon EKS gehören.   | Nein | 

# Preise für Containerprodukte für AWS Marketplace
<a name="pricing-container-products"></a>

Auf können Sie kostenlose Produkte AWS Marketplace, BYOL-Produkte (Bring Your Own License Model) und kostenpflichtige Produkte für Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS) und anbieten. AWS Fargate Sie können nur einen Preis pro Produkt festlegen. In diesem Thema werden die verfügbaren Preismodelle für Containerprodukte beschrieben. 

**Anmerkung**  
Sie nutzen den [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) zur Durchsetzung von Berechtigungen und Nutzungsmessung für Ihre kostenpflichtigen Produkte. Bei der Preisgestaltung pro Aufgabe oder pro Pod wird die Nutzung automatisch nach AWS berechnet.

Der Preis, den Sie für ein Containerprodukt festgelegt haben, gilt für alle AWS-Regionen. Immer wenn Sie den Preis für ein Containerprodukt senken, wird der neue Preis für Ihre Käufer sofort implementiert. Bei Preiserhöhungen werden bestehende Käufer 90 Tage, bevor sich diese auf ihre Abrechnung auswirkt, über die Änderung benachrichtigt. Neuen Käufern wird der neue Betrag in Rechnung gestellt.

**Anmerkung**  
Für neue Abonnenten ist die Preisänderung sofort wirksam. Für bestehende Abonnenten gilt die Preisänderung am ersten Tag des Monats, der auf einen Zeitraum von 90 Tagen folgt, der mit dem Tag beginnt, an dem die Preisänderungsbenachrichtigung gesendet wird. Nehmen wir zum Beispiel an, Sie senden am 16. März eine Preisänderungsbenachrichtigung. Der 16. Juni liegt etwa 90 Tage nach dem 16. März. Da die Preisänderung am ersten Tag des Monats erfolgt, der auf den Zeitraum von 90 Tagen folgt, ist das Datum des Inkrafttretens der Änderung der 1. Juli.

**Topics**
+ [Preismodelle für Container](#pricing-models-for-server-products)

## Preismodelle für Container
<a name="pricing-models-for-server-products"></a>

AWS Marketplace hat mehrere Preismodelle für Containerprodukte. 

Die folgende Tabelle enthält allgemeine Informationen zu Preismodellen für Produkte auf Containerbasis.


**Preismodelle für Container-Produkte**  

| Preismodell | Description | 
| --- | --- | 
| Bring Your Own License (BYOL) | BYOL wird außerhalb einer externen Abrechnungsbeziehung verwaltet, die Sie mit dem Käufer unterhalten. AWS Marketplace Ihre Software im Container lässt sich nicht in die AWS Marketplace Fakturierung integrieren. | 
| Monatlich | **Fester monatlicher Preis**Ein fester monatlicher Preis, der Benutzern im folgenden Monat die unbegrenzte Nutzung des Produkts ermöglicht.Beispiel: Sie legen den Preis für Ihr Produkt auf 99\$1 pro Monat fest. Ihr Produkt umfasst drei verschiedene Container-Images, die mithilfe einer Amazon ECS-Aufgabendefinition bereitgestellt werden.Wenn ein Käufer Ihr Produkt abonniert, werden ihm sofort 99 USD pro Monat in Rechnung gestellt. Dies wiederholt sich jeden Monat, bis er sein Abonnement kündigt. Der Käufer erhält zudem eine unbegrenzte Nutzung des Produkts. Der Käufer zahlt außerdem separat für jede Infrastruktur, auf der die Aufgaben ausgeführt werden. Während des Abonnements können Abonnenten auf Ihre Container-Abbilder zugreifen. Sie können eine beliebige Anzahl von Containern aus diesen Images auf Amazon ECS oder Amazon EKS in jeder Konfiguration starten und ausführen.Wenn der Käufer sein Abonnement in der Mitte eines Monats kündigt, verliert er den Zugriff auf das Amazon ECR-Repository, in dem die Container-Images AWS Marketplace gespeichert sind. Der Käufer hat möglicherweise die Originalbilder abgerufen und gespeichert. Er kann jedoch keine neuen Container-Image-Versionen mehr abrufen, über die Sie sie zur Verfügung stellen AWS Marketplace. Dem Käufer wird der ungenutzte Teil des letzten Monats zurückerstattet. Sie werden auf der Grundlage der Nutzung durch den Käufer abzüglich der vereinbarten AWS Marketplace Gebühr bezahlt. | 
| Maßgeschneiderte Preisgestaltung |  Maßgeschneiderte Preise auf der Grundlage der von Ihnen definierten Dimensionen (z. B. Benutzer, Knoten, Repositorys oder GB), bis zu 24 Dimensionen pro Produkt.  Beispiel: Die Gebühren für Ihr Produkt werden nach Benutzern berechnet. Sie haben Administratorbenutzer und reguläre Benutzer, und Sie definieren die Preise auf 2 USD für Administratorbenutzer und 1 USD für reguläre Benutzer. Sie können sie bei der Auflistung Ihres Produkts als separate Dimensionen einrichten. Sie berechnen nach eingeloggten Benutzern pro Tag und Sie messen die Nutzung pro Tag. Weitere Informationen zur benutzerdefinierten Messung für nutzungsabhängige Preisgestaltung finden Sie unter. [Konfiguration der benutzerdefinierten Messung für Containerprodukte mit dem AWS Marketplace Metering Service](container-metering-meterusage.md)  | 
| Stundenpreis pro Aufgabe oder pro Pod |  **Amazon ECS-Aufgabe oder Amazon EKS-Pod** Preisgestaltung pro Amazon ECS-Aufgabe oder pro Amazon EKS-Pod, die wir sekundengenau berechnen, wobei der Preis pro Stunde festgelegt wird. Beispiel: Ihr Produkt umfasst drei verschiedene Container-Images: einen Controller-Knoten, einen Worker-Knoten und einen Analytics-Node. Da Ihr Produkt ohne den Controller-Knoten nicht funktionsfähig oder nicht nützlich ist, entscheiden Sie, für dieses Abbild eine Gebühr zu verlangen. Sie legen dafür einen Preis von 6 USD pro Stunde fest. Sie ändern die Software im Container-Image für den Controller-Knoten, um sie in den [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)`RegisterUsage`API-Betrieb zu integrieren. So stellen Sie sicher, dass nur Käufer mit einem aktiven Abonnement dieses Container-Abbild starten und ausführen können und dass seine Nutzung danach bemessen wird, wie lange es ausgeführt wird. Dem Käufer werden für jeden laufenden Amazon EKS-Controller-Pod 6 USD pro Nutzungsstunde berechnet. Wenn der Käufer fünf Amazon EKS-Controller-Pods auf den Markt bringt, die den Controller-Node-Container enthalten, werden ihm 30 USD pro Stunde (6 USD pro Pod) berechnet. Der Käufer zahlt auch separat für jede Infrastruktur, auf der die Pods ausgeführt werden. Bei Stundenpreisen erfolgt die Abrechnung nach Sekunden, mit einem Minimum von 1 Minute. Wenn der Kunde diesen Controller-Container 20 Minuten und 30 Sekunden lang ausführt, werden ihm `20 x ($6/60) + 30 x ($6/60/60) = $2 + $0.05 = $2.05` in Rechnung gestellt. Sie werden auf der Grundlage der Nutzung durch den Käufer abzüglich der vereinbarten AWS Marketplace Gebühr bezahlt. Weitere Informationen zu den Stundenpreisen pro Aufgabe oder pro Pod finden Sie unter. [Konfiguration der stündlichen Messung mit dem AWS Marketplace Metering Service](container-metering-registerusage.md)  | 
| Stündliche Preisgestaltung oder benutzerdefinierte Abrechnung mit langfristigem Vertrag |  Ein langfristiger Vertrag zu einem reduzierten Preis, der im Voraus oder in regelmäßigen Raten bezahlt wird. Ein langfristiger Vertrag kann zu einem bestehenden Produkt hinzugefügt werden, für das ein individuell festgelegter Preis gilt, oder er kann pro Aufgabe und pro Pod berechnet werden. Käufer zahlen die Preise für die gemessene Nutzung, wenn ihre Nutzung die über den langfristigen Vertrag erworbene Nutzung übersteigt. Beispiel: Bei Modellen mit begrenzter Preisgestaltung können Sie einen langfristigen Vertragspreis für Käufer hinzufügen, um einen discount zu erhalten, wenn sie sich im Voraus verpflichten. Angenommen, Sie berechnen normalerweise 1\$1 pro verbrauchter Einheit. Ein Käufer, der 1 Einheit pro Stunde verwendet, würde 8760 USD pro Jahr zahlen ()`365 days x 24 hours x $1 per hour`. Sie könnten einen Vertrag aktivieren, der es dem Käufer ermöglicht, an diesen 365 Tagen 1 Einheit pro Stunde zum halben Preis (4.380 USD) zu verwenden. In diesem Fall verpflichtet sich der Käufer, den Einjahresvertrag im Voraus zu bezahlen, und der Preis sinkt von 1 USD pro Einheit auf 0,5 USD pro Einheit. Sie könnten dem Käufer auch ermöglichen, mehrere dieser Verträge abzuschließen. Wenn aus der gemessenen Menge hervorgeht, dass der Käufer in einer Stunde 10 Einheiten verbraucht hat und er zwei Verträge abgeschlossen hat, werden 2 Einheiten in den beiden Verträgen enthalten sein. Die 8 zusätzlichen Einheiten würden zum regulären Preis von 1\$1 pro Stunde abgerechnet, was insgesamt 8\$1 pro Stunde entspricht. Für das Beispiel pro Aufgabe oder pro Pod können Sie auch einen langfristigen Vertragspreis für Käufer hinzufügen, um einen discount zu erhalten, wenn sie sich im Voraus verpflichten. Wenn du normalerweise 6\$1 pro Pod berechnest, könntest du eine langfristige Vertragsdauer von 365 Tagen mit einem Preis von 13.140\$1 () festlegen. `365 days x 24 hours x $3 per pod per hour` Ein Vertrag würde den Kunden dann zu einem Pod pro Stunde während dieser 365 Tage berechtigen. Kunden können wählen, ob sie mehrere Verträge erwerben möchten. Ein Kunde kann beispielsweise zwei Verträge abschließen, wodurch er Anspruch auf 2 Pods pro Stunde hat. Wenn der Kunde mehr Pods pro Stunde betreibt als die entsprechenden Verträge, werden überschüssige Pods zu Ihrem normalen Stundenpreis in Rechnung gestellt. In beiden Fällen wird Käufern, die langfristige Verträge abschließen, im Voraus eine Rechnung gestellt, entweder als Einmalzahlung oder als regelmäßig geplante future Zahlungen. Auch die über den Vertrag hinausgehende Nutzung wird den Käufern zum nutzungsabhängigen Tarif in Rechnung gestellt.   | 
| Preisgestaltung für Containerverträge |  **Container mit Vertragspreisen** — Ein auf Containern basierendes Produkt, für das der Käufer eine Vorabgebühr zahlt. Weitere Informationen zu Vertragspreisen finden Sie unter. [Vertragspreise für Containerprodukte mit AWS License Manager](container-license-manager-integration.md)  | 

# Integrationen für die Abrechnung, Messung und Lizenzierung von Container-Produkten
<a name="container-products-billing-integration"></a>

AWS Marketplace lässt sich in andere Systeme integrieren AWS-Services , um sowohl die Abrechnung als auch die vertragsbasierte Preisgestaltung für Ihr Container-Produkt bereitzustellen. Bei containerbasierten Produkten mit nutzungsabhängiger Preisgestaltung können Sie den sowohl [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html)für die Überprüfung der Nutzungsberechtigung Ihres Produkts als auch für die Messung der Nutzung für die Abrechnung verwenden. Bei containerbasierten Produkten mit Vertragspreisen können Sie die verwenden, um Ihrem Produkt Lizenzen AWS License Manager zuzuordnen. In den folgenden Abschnitten finden Sie weitere Informationen zur stündlichen und kundenspezifischen Abrechnung sowie zur Preisgestaltung mit AWS Marketplace Metering Service Verträgen. AWS License Manager

**Topics**
+ [Stündliche und benutzerdefinierte Messung mit AWS Marketplace Metering Service](#entitlement-and-metering-for-paid-products)
+ [Vertragliche Preisgestaltung mit AWS License Manager](#container-products-contracts-license-manager)
+ [Konfiguration der stündlichen Messung mit dem AWS Marketplace Metering Service](container-metering-registerusage.md)
+ [Konfiguration der benutzerdefinierten Messung für Containerprodukte mit dem AWS Marketplace Metering Service](container-metering-meterusage.md)
+ [Vertragspreise für Containerprodukte mit AWS License Manager](container-license-manager-integration.md)

## Stündliche und benutzerdefinierte Messung mit AWS Marketplace Metering Service
<a name="entitlement-and-metering-for-paid-products"></a>

Nutzen Sie den [Messservice, um sowohl die Nutzungsberechtigung Ihres Produkts als auch die Nutzung der AWS Marketplace Messgeräte](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) für die Abrechnung zu überprüfen. Wenn Sie Ihre eigenen Preiseinheiten definieren und uns diese Nutzung für die Abrechnung berechnen möchten, können Sie die Integration mithilfe der [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API-Operation durchführen. Wenn Sie den Preis für Ihr Produkt auf der Grundlage der Anzahl der verwendeten Aufgaben oder Pods festlegen und diese AWS Nutzung automatisch berechnen lassen möchten, integrieren Sie es mithilfe der [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API-Operation. Für beide Preisarten können Sie einen langfristigen Vertragspreis hinzufügen, ohne die Art der Integration zu ändern AWS Marketplace Metering Service.

Wenn Sie in der ein neues Containerprodukt erstellen AWS Marketplace Management Portal, stellen wir Ihnen eine Reihe von Produktkennzeichnungen (den Produktcode und den öffentlichen Schlüssel) zur Verfügung, die für die Integration Ihres Produkts in den AWS Marketplace Metering Service verwendet werden.

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

Durch die Integration mit AWS Marketplace Metering Service können Sie überprüfen, ob der Kunde, auf dem Ihre kostenpflichtige Software ausgeführt wird, Ihr Produkt abonniert hat AWS Marketplace, sodass Sie beim Start des Containers vor unbefugter Nutzung geschützt sind. Um den Anspruch zu überprüfen, verwenden Sie je nach Preismodell die Operationen [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)oder [RegisterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_RegisterUsage.html)API. Verwenden Sie für stündliche und feste monatliche Preismodelle den `RegisterUsage` API-Vorgang. Verwenden Sie für Preismodelle mit benutzerdefinierter Zählermessung den `MeterUsage` API-Vorgang.

Wenn ein Käufer keinen Anspruch auf Ihr Produkt hat, geben diese API-Operationen die `CustomerNotEntitledException` Ausnahme zurück.

**Anmerkung**  
Wenn ein Käufer das Abonnement Ihres Produkts beendet, während er es betreibt, ist er berechtigt, es weiter zu betreiben. Sie können jedoch keine zusätzlichen Container für Ihr Produkt starten.

### Integrationsrichtlinien
<a name="integration-guidelines"></a>

Beachten Sie die folgenden Richtlinien, wenn Sie Ihre Container-Produkte erstellen und veröffentlichen und die `MeterUsage` oder `RegisterUsage` API-Operationen für die Lizenzierung und Abrechnung verwenden:
+ Konfigurieren Sie keine AWS Anmeldeinformationen in Ihrer Software oder im Docker-Container-Image. AWS Anmeldeinformationen für den Käufer werden automatisch zur Laufzeit abgerufen, wenn Ihr Container-Image innerhalb einer Amazon ECS-Aufgabe oder eines Amazon EKS-Pods ausgeführt wird.
+  Um die `MeterUsage` oder `RegisterUsage` API-Operationen von Amazon EKS aus aufzurufen, müssen Sie [ein unterstütztes AWS SDK verwenden](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html). Um Amazon EKS zu testen `MeterUsage` oder zu `RegisterUsage` integrieren, müssen Sie einen Amazon EKS-Cluster mit Kubernetes 1.13.x oder höher ausführen. Kubernetes 1.13 ist für AWS Identity and Access Management (IAM-) Rollen für die Pod-Unterstützung erforderlich. IAM-Rollen sind erforderlich, damit der laufende Pod die AWS Anmeldeinformationen erhält, die zum Aufrufen dieser Aktionen auf Amazon EKS erforderlich sind. 
+ Sie können zwar eine lokale Entwicklung vornehmen, Sie werden jedoch eine `PlatformNotSupportedException`-Ausnahme erhalten. Diese Ausnahme tritt nicht auf, wenn Sie den Container auf AWS Container-Services (Amazon ECS, Amazon EKS und Fargate) starten.

### Unterstützt AWS-Regionen
<a name="supported-regions-metering"></a>

Eine Liste aller AWS Marketplace unterstützten AWS-Regionen Produkte finden Sie in der [Regionentabelle](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) auf der Global Infrastructure-Website.

#### Beschaffung der AWS-Region für die Messung
<a name="metering-aws-region-configuration"></a>

Wenn Sie Ihren Container für die Messung entweder in den API-Betrieb `MeterUsage` oder in den `RegisterUsage` API-Betrieb integrieren, konfigurieren Sie das AWS SDK nicht für die Verwendung eines bestimmten AWS-Region. Die Region muss dynamisch zur Laufzeit abgerufen werden. 

**Example**  
Ein Kunde startet beispielsweise eine Amazon ECS-Task oder einen Amazon EKS-Pod. Der `RegisterUsage` API-Vorgang wird in einer Region aufgerufen, die sich von der Region unterscheidet, in der die Amazon ECS-Task oder der Amazon EKS-Pod gestartet wurde. Daher gibt der `RegisterUsage` API-Vorgang einen `InvalidRegionException` Fehler aus.



AWS SDK-Sprachen bestimmen das `AWS_REGION` nicht auf konsistente Weise. Wenn Ihr SDK das nicht automatisch erkennt`AWS_REGION`, muss die Software manuell geschrieben werden, um das zu ermitteln`AWS_Region`. Beispielsweise verwendet der AWS SDK für Java automatisch [Amazon EC2 EC2-Instance-Metadaten](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) (insbesondere`ec2InstanceMetadata`), um die Region abzurufen, wenn Umgebungsvariablen oder andere Konfigurationen nicht vorhanden sind. Rufen Sie in diesem Fall nur `ec2InstanceMetadata` auf, wenn die `AWS_REGION`-Umgebungsvariable nicht vorhanden ist.

Informationen zum dynamischen Abrufen eines zur AWS-Region Laufzeit finden Sie im [AWS SDK Developer Guide](https://aws.amazon.com/tools) für Ihre Programmiersprache.

### Verhindern von Änderungen an der Gebührenerfassung
<a name="prevent-metering-modification"></a>

Das Einbringen von Möglichkeiten für Käufer, Aufrufe von `RegisterUsage` oder `MeterUsage` zu ändern oder zu überschreiben, könnte zu unerwünschten Abrechnungs- und Zahlungsproblemen führen. Es wird dringend empfohlen, die Mess- und Berechtigungslogik zu integrieren.

Wenn Sie Ihr Produkt so konstruieren, dass eine Änderung der Messwerte verhindert wird, sollten Sie Folgendes berücksichtigen:
+ Wenn Käufer neue Bildebenen einfügen können, die unsere `ENTRYPOINT` Anweisungen enthalten`CMD`, integrieren Sie `RegisterUsage` oder direkt `MeterUsage` in die Software, mit der der Käufer Ihr Container-Image durchläuft. Andernfalls werden Aufrufe, die über `RegisterUsage` `CMD` oder `ENTRYPOINT` über das Basis-Image `MeterUsage` ausgeführt werden, wahrscheinlich vom Käufer außer Kraft gesetzt.
+ Wir empfehlen Ihnen, die AWS Marketplace Produktcodes, die Ihre Software als Eingabe verwendet, so zu `RegisterUsage` verwalten, dass Käufer sie nicht ändern können. `MeterUsage` Wenn Ihr Produkt Produktcodes jedoch so verwaltet, dass Kunden sie überschreiben können AWS CloudFormation, wie z. B. Helm Chart oder Kubernetes-Manifest, müssen Sie eine Liste *vertrauenswürdiger* AWS Marketplace Produktcodes führen. Dadurch wird sichergestellt, dass der Produktcode, an den Ihre Software als Eingabe weitergibt `RegisterUsage` oder gültig `MeterUsage` ist.
+  Wenn einer Ihrer vertrauenswürdigen Produkt-Codes für kostenlose Produkte gilt, stellen Sie sicher, dass er nicht anstelle eines kostenpflichtigen Produkt-Codes verwendet werden kann.

## Vertragliche Preisgestaltung mit AWS License Manager
<a name="container-products-contracts-license-manager"></a>

Bei containerbasierten Produkten mit Vertragspreisen verknüpfen Sie AWS License Manager damit Lizenzen mit Ihrem Produkt. 

AWS License Manager ist ein Lizenzverwaltungstool, mit dem Ihre Anwendung Lizenzen (auch als Berechtigungen bezeichnet), die von einem Kunden gekauft wurden, verfolgen und aktualisieren kann. Dieser Abschnitt enthält Informationen zur Integration Ihres Produkts mit AWS License Manager. Nach Abschluss der Integration können Sie Ihre Produktliste am veröffentlichen AWS Marketplace.

Weitere Informationen zu AWS License Manager finden Sie im [AWS License Manager Benutzerhandbuch](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) und im [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)Abschnitt der *AWS CLI Befehlsreferenz*.

**Anmerkung**  
Kunden können nach Ablauf des Vertrags keine neuen Instances des Containers starten. Während der Vertragsdauer können sie jedoch eine beliebige Anzahl von Instances starten. Diese Lizenzen sind nicht an einen bestimmten Knoten oder eine bestimmte Instanz gebunden. Jede Software, die auf einem beliebigen Container auf einem beliebigen Knoten ausgeführt wird, kann die Lizenz auschecken, sofern ihr die zugewiesenen AWS Anmeldeinformationen vorliegen.
**Erstellung von privaten Angeboten** — Verkäufer können mithilfe des Tools zur Erstellung privater Angebote in der private Angebote private Angebote für die Produkte erstellen AWS Marketplace Management Portal.
**Berichterstattung** — Sie können Datenfeeds einrichten, indem Sie im **Berichtsbereich** in der einen Amazon S3 S3-Bucket einrichten AWS Marketplace Management Portal. Weitere Informationen finden Sie unter [Verkäuferberichte, Datenfeeds und Dashboards in AWS Marketplace](reports-and-data-feed.md).

### Arbeitsablauf bei der Integration
<a name="container-LM-LM-workflow"></a>

Die folgenden Schritte zeigen den Arbeitsablauf für die Integration Ihres Container-Produkts mit AWS License Manager:

1. Der Verkäufer erstellt ein Produkt mit AWS License Manager Integration.

1. Der Verkäufer listet das Produkt auf AWS Marketplace.

1. Der Käufer findet das Produkt auf AWS Marketplace und kauft es.

1. Eine Lizenz wird dem Käufer in seiner Datei zugeschickt AWS-Konto.

1. Der Käufer verwendet die Software, indem er die Amazon EC2 EC2-Instance, Amazon ECS-Task oder Amazon EKS-Pod-Software startet. Der Kunde verwendet für die Bereitstellung eine IAM-Rolle.

1. Die Software liest die Lizenz im AWS License Manager Konto des Käufers, ermittelt die erworbenen Rechte und stellt die Funktionen entsprechend bereit. 
**Anmerkung**  
License Manager führt keine Nachverfolgung oder Updates durch. Dies erfolgt über die Anwendung des Verkäufers.

# Konfiguration der stündlichen Messung mit dem AWS Marketplace Metering Service
<a name="container-metering-registerusage"></a>

**Anmerkung**  
 Für Amazon EKS-Bereitstellungen muss Ihre Software [IAM-Rollen für Dienstkonten (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) verwenden, um den API-Aufruf für den [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-Vorgang zu signieren. Bei Verwendung von [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) werden die Knotenrolle oder langfristige Zugriffsschlüssel nicht unterstützt.  
Für Amazon ECS-Bereitstellungen muss Ihre Software die [Amazon ECS-Aufgaben-IAM-Rolle](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) verwenden, um den API-Aufruf für den [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-Vorgang zu signieren. Die Verwendung der Knotenrolle oder langfristige Zugriffsschlüssel werden nicht unterstützt.

Wenn Ihr Container-Produkt eine Preisgestaltung pro Stunde pro Aufgabe oder pro Pod anstelle von kundenspezifischen Preisdimensionen verwendet, müssen Sie keine benutzerdefinierten Bemessungsdimensionen definieren. Sie können den AWS Marketplace Metering Service für die stündliche Messung verwenden, in der Containerprodukte enthalten sind AWS Marketplace. In den folgenden Abschnitten erfahren Sie, wie Sie die stündliche Messung mit dem AWS Marketplace Metering Service konfigurieren.

Der `RegisterUsage` API-Betrieb misst die Softwarenutzung pro Amazon Elastic Container Service (Amazon ECS) -Aufgabe oder pro Amazon Elastic Kubernetes Service (Amazon EKS) -Pod pro Stunde, wobei die Nutzung auf die Sekunde aufgeteilt wird. Auf nur kurz ausgeführte Aufgaben oder Pods wird ein Minimum von 1 Minute angewendet. Die kontinuierliche Messung der Softwarenutzung erfolgt automatisch durch die. AWS Marketplace Metering Control Plane Ihre Software muss keine spezifischen Aktionen zur Erfassung der Softwarenutzung ausführen, es sei denn, Sie rufen `RegisterUsage` einmal auf, damit die Messung der Softwarenutzung beginnt.

`RegisterUsage`muss sofort beim Starten eines Containers aufgerufen werden. Wenn Sie den Container nicht in den ersten 6 Stunden nach dem Start des Containers registrieren, bietet der AWS Marketplace Metering Service keine Messgarantien für frühere Monate. Die Messung wird jedoch im laufenden Monat fortgesetzt, bis der Container endet.

The AWS Marketplace Metering Control Plane stellt Kunden weiterhin die Ausführung von Amazon ECS-Aufgaben und Amazon EKS-Pods in Rechnung, unabhängig vom Abonnementstatus des Kunden. Dadurch muss Ihre Software nach dem ersten erfolgreichen Start der Aufgabe oder des Pods keine Berechtigungsprüfungen mehr durchführen. 

Weitere Informationen zur Integration der AWS Marketplace Metering Service API mit Container-Produkten mit stündlicher Preisgestaltung finden Sie im Labor „[Integration mit stündlicher Messung](https://catalog.workshops.aws/mpseller/en-US/container/integrate-hourly)“ des *AWS Marketplace Verkäuferworkshops*. 

**Topics**
+ [Voraussetzungen für die Stundenmessung](#hourly-metering-prereqs)
+ [Testen Sie die Integration für `RegisterUsage`](#testing-integration-for-registerusage)
+ [Fehlerbehandlung für `RegisterUsage`](#hourly-metering-entitlement-error-handling)
+ [Integrieren Sie Ihr Container-Produkt mit dem AWS Marketplace Metering Service mithilfe der AWS SDK für Java](java-integration-example-registerusage.md)

## Voraussetzungen für die Stundenmessung
<a name="hourly-metering-prereqs"></a>

Bevor Sie das Produkt veröffentlichen, müssen Sie Folgendes tun:

1. Erstellen Sie in der AWS Marketplace Management Portal ein neues Containerprodukt und notieren Sie sich den zugehörigen Produktcode.

   Weitere Informationen finden Sie unter [Überblick: Erstellen Sie ein Container-Produkt](container-product-getting-started.md#create-container-product).

1. Verwenden Sie eine AWS Identity and Access Management (IAM-) Rolle für die Aufgabe oder den Pod, auf dem Ihre Anwendung ausgeführt wird, mit den für den Aufruf erforderlichen IAM-Berechtigungen. `RegisterUsage` Die von IAM verwaltete Richtlinie `AWSMarketplaceMeteringRegisterUsage` verfügt über diese Berechtigungen. Weitere Informationen zu der Richtlinie finden Sie [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)in der *Referenz zu AWS verwalteten Richtlinien.*

1. (Optional) Wenn Sie die Protokollierung sehen möchten, empfehlen wir, die AWS CloudTrail Protokollierung in der Aufgaben- oder Pod-Definition zu aktivieren.

1. Führen Sie einen Testaufruf für den `RegisterUsage` API-Vorgang mit einem Datensatz für alle von Ihnen definierten Preisdimensionen durch.

## Testen Sie die Integration für `RegisterUsage`
<a name="testing-integration-for-registerusage"></a>

Verwenden Sie den `RegisterUsage` API-Vorgang, um Ihre Integration zu testen, bevor Sie Ihr Bild AWS Marketplace zur Veröffentlichung einreichen.

Rufen Sie `RegisterUsage` vom Container-Image aus auf, indem Sie Ihr Produkt auf Amazon ECS oder Amazon EKS ausführen. Verwenden Sie das AWS Konto, mit dem Sie das Produkt anbieten AWS Marketplace. Ihre Messintegration muss das dynamisch einstellen AWS-Region, anstatt es fest zu codieren. Starten Sie beim Testen jedoch mindestens eine Amazon ECS-Task oder einen Amazon EKS-Pod mit Ihrem bezahlten Container in der Region USA Ost (Nord-Virginia). Auf diese Weise kann das AWS Marketplace Betriebsteam Ihre Arbeit anhand der Protokolle in dieser Region überprüfen.

**Anmerkung**  
Wenn Ihr Produkt sowohl Amazon ECS als auch Amazon EKS unterstützt, müssen Sie es nur in Amazon EKS starten, damit wir Ihre Integration validieren können.

Sie können die Integration erst dann vollständig testen, wenn es mit allen erforderlichen Metadaten und Preisinformationen veröffentlicht wurde. Auf Anfrage kann das Team für den Betrieb des AWS Marketplace Katalogs den Eingang Ihrer Messdaten überprüfen.

## Fehlerbehandlung für `RegisterUsage`
<a name="hourly-metering-entitlement-error-handling"></a>

Wenn Ihr Container-Image in das integriert ist AWS Marketplace Metering Service und eine Ausnahme auftritt`ThrottlingException`, sollten Sie den Container beenden, um eine unbefugte Verwendung zu verhindern.

Andere Ausnahmen als `ThrottlingException` werden nur beim ersten Aufruf des `RegisterUsage` API-Vorgangs ausgelöst. Nachfolgende Aufrufe von derselben Amazon ECS-Task oder demselben Amazon EKS-Pod werden nicht ausgelöst, `CustomerNotSubscribedException` selbst wenn der Kunde sich abmeldet, während die Aufgabe oder der Pod noch ausgeführt wird. Diesen Kunden wird nach dem Abbestellen weiterhin der Betrieb von Containern in Rechnung gestellt, und ihre Nutzung wird nachverfolgt.

In der folgenden Tabelle werden die Fehler beschrieben, die durch den `RegisterUsage` API-Vorgang ausgelöst werden können. Für jede AWS SDK-Programmiersprache gibt es eine Reihe von Richtlinien zur Fehlerbehandlung, in denen Sie weitere Informationen finden können. 


|  **Fehler**  |  **Beschreibung**  | 
| --- | --- | 
|  InternalServiceErrorException  |  RegisterUsage ist nicht verfügbar.  | 
|  CustomerNotEntitledException  |  Der Kunde verfügt über kein gültiges Abonnement für das Produkt.  | 
|  InvalidProductCodeException  |  Der als Teil der Anforderung übergebene ProductCode-Wert ist nicht vorhanden.  | 
|  InvalidPublicKeyException  |  Der als Teil der Anforderung übergebene PublicKeyVersion-Wert ist nicht vorhanden.  | 
|  PlatformNotSupportedException  |  AWS Marketplace unterstützt nicht die Messung der Nutzung von der zugrunde liegenden Plattform aus. Nur Amazon ECS, Amazon EKS und E AWS Fargate werden unterstützt.  | 
|  ThrottlingException  |  Die Aufrufe von RegisterUsage werden gedrosselt.  | 
|  InvalidRegionException  |  RegisterUsagemuss in derselben Weise aufgerufen werden, in der AWS-Region die Amazon ECS-Task oder der Amazon EKS-Pod gestartet wurde. Damit wird verhindert, dass ein Container eine Region (beispielsweise withRegion(“us-east-1”)) auswählt, wenn RegisterUsage aufrufen wird.  | 

# Integrieren Sie Ihr Container-Produkt mit dem AWS Marketplace Metering Service mithilfe der AWS SDK für Java
<a name="java-integration-example-registerusage"></a>

Sie können den verwenden AWS SDK für Java , um ihn in den AWS Marketplace Metering Service zu integrieren. Die kontinuierliche Messung für die Softwarenutzung erfolgt automatisch durch den AWS Marketplace Metering Control Plane. Ihre Software muss keine spezifischen Aktionen zur Erfassung der Softwarenutzung ausführen, es sei denn, Sie rufen `RegisterUsage` einmal auf, damit die Messung der Softwarenutzung beginnt. Dieses Thema enthält eine Beispielimplementierung, bei der das AWS SDK für Java zur Integration in die `RegisterUsage` Aktion des [AWS Marketplace Messdienstes](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) verwendet wird. 

`RegisterUsage`muss sofort beim Starten eines Containers aufgerufen werden. Wenn Sie den Container nicht in den ersten 6 Stunden nach dem Start des Containers registrieren, bietet der AWS Marketplace Metering Service keine Messgarantien für frühere Monate. Die Messung wird jedoch im laufenden Monat fortgesetzt, bis der Container endet.

Den vollständigen Quellcode finden Sie unter [RegisterUsage Java-Beispiel](#registerusage-java-example). Viele dieser Schritte gelten unabhängig von der AWS SDK-Sprache. 



**Beispielschritte für die Integration von AWS Marketplace Metering Service**

1. Melden Sie sich beim [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/tour) an.

1. Wählen Sie unter **Assets (Objekte)** die Option **Container**, um mit der Erstellung eines neuen Container-Produkts zu beginnen. Das Erstellen des Produkts generiert den Produkt-Code für das Produkt, das mit Ihrem Container-Abbild integriert werden soll. Informationen zum Einrichten von IAM-Berechtigungen finden Sie unter[AWS Marketplace Mess- und Berechtigungs-API-Berechtigungen](iam-user-policy-for-aws-marketplace-actions.md).

1.  Laden Sie das öffentliche [AWS Java-SDK](https://aws.amazon.com/sdk-for-java/) herunter. 
**Wichtig**  
 Um das Metering APIs von Amazon EKS aus aufzurufen, müssen Sie [ein unterstütztes AWS SDK verwenden](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) und es auf einem Amazon EKS-Cluster mit Kubernetes 1.13 oder höher ausführen. 

1.  (Optional) Wenn Sie die `RegisterUsage` Aktion integrieren und eine Überprüfung der digitalen Signatur durchführen möchten, müssen Sie die Bibliothek für die [BouncyCastle](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on)Signaturverifizierung in Ihrem Anwendungs-Classpath konfigurieren.

   Wenn Sie ein JSON Web Token (JWT) verwenden möchten, muss Ihr Anwendungs-Klassenpfad auch [JWT Java](https://jwt.io/)-Bibliotheken enthalten. Die Verwendung von JWT bietet einen einfacheren Ansatz zur Signaturüberprüfung, ist jedoch nicht erforderlich. Sie können stattdessen eine eigenständige Version verwenden. BouncyCastle Unabhängig davon, ob Sie JWT oder verwenden BouncyCastle, müssen Sie ein Build-System wie Maven verwenden, um transitive Abhängigkeiten von BouncyCastle oder JWT in den Klassenpfad Ihrer Anwendung aufzunehmen.

   ```
   // 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.  Rufen Sie `RegisterUsage` von jedem kostenpflichtigen Container-Abbild in Ihrem Produktangebot auf. `ProductCode` und `PublicKeyVersion` sind erforderliche Parameter, alle anderen Eingaben sind optional. Es folgt ein Beispiel einer Nutzlast für `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
   }
   ```
**Anmerkung**  
Bei der Verbindung mit dem AWS Marketplace Metering Service können vorübergehende Probleme auftreten. AWS Marketplace empfiehlt dringend, Wiederholungsversuche für bis zu 30 Minuten mit exponentiellem Back-up durchzuführen, um kurzfristige Ausfälle oder Netzwerkprobleme zu vermeiden.

1.  `RegisterUsage` generiert eine digitale RSA-PSS-Signatur mit SHA-256, mit der Sie die Authentizität der Anforderung überprüfen können. Die Signatur enthält die folgenden Felder: `ProductCode`, `PublicKeyVersion` und `Nonce`. Um die digitale Signatur zu überprüfen, müssen Sie diese Felder aus der Anforderung beibehalten. Der folgende Code ist ein Beispiel für eine Antwort auf einen `RegisterUsage`-Aufruf. 

   ```
   {
   "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. Erstellen Sie eine neue Version Ihres Container-Images, die den `RegisterUsage` Call enthält, taggen Sie den Container und übertragen Sie ihn in eine beliebige Container-Registry, die mit Amazon ECS oder Amazon EKS kompatibel ist, wie Amazon ECR oder Amazon ECR Public. Wenn Sie Amazon ECR verwenden, stellen Sie sicher, dass das Konto, das die Amazon ECS-Aufgabe oder den Amazon EKS-Pod startet, über Berechtigungen für das Amazon ECR-Repository verfügt. Andernfalls schlägt der Start fehl.

1.  Erstellen Sie eine [IAM](https://aws.amazon.com/iam/)-Rolle, die Ihrem Container die Berechtigung zum Aufrufen von `RegisterUsage` erteilt, wie im folgenden Code definiert. Sie müssen diese IAM-Rolle im Parameter [Task Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) der Amazon ECS-Aufgabe oder der Amazon EKS-Pod-Definition angeben.

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

****  

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

------

1. Erstellen Sie eine Amazon ECS-Aufgabe oder eine Amazon EKS-Pod-Definition, die auf den Container verweist, der in Schritt 7 integriert wurde, AWS Marketplace und auf die IAM-Rolle verweist, die Sie in Schritt 7 erstellt haben. Sie sollten die AWS CloudTrail Protokollierung in der Aufgabendefinition aktivieren, wenn Sie die Protokollierung sehen möchten. 

1. Erstellen Sie einen Amazon ECS- oder Amazon EKS-Cluster, um Ihre Aufgabe oder Ihren Pod auszuführen. Weitere Informationen zum Erstellen eines Amazon ECS-Clusters finden Sie unter [Creating a Cluster](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html) im *Amazon Elastic Container Service Developer Guide*. Weitere Informationen zum Erstellen eines Amazon EKS-Clusters (mit Kubernetes Version 1.1.3.x oder höher) finden Sie unter [Erstellen eines](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html) Amazon EKS-Clusters.

1. Konfigurieren Sie den Amazon ECS- oder Amazon EKS-Cluster und starten Sie die Amazon ECS-Aufgabendefinition oder den Amazon EKS-Pod, den Sie erstellt haben, im US-East-1 AWS-Region. Sie müssen diese Region nur während dieses Testprozesses, bevor das Produkt live geht, verwenden.

1. Wenn Sie eine gültige Antwort von `RegisterUsage` erhalten, können Sie mit der Erstellung Ihres Containerprodukts beginnen. Bei Fragen wenden Sie sich bitte an das [AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us/)-Team. 

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

Im folgenden Beispiel wird der AWS SDK für Java und AWS Marketplace Metering Service verwendet, um den `RegisterUsage` Vorgang aufzurufen. Die Signaturverifizierung ist optional. Wenn Sie die Signaturverifizierung aber durchführen möchten, müssen Sie die erforderlichen Bibliotheken für die Verifizierung von digitalen Signaturen einschließen. Dieses Beispiel dient lediglich der Veranschaulichung. 

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

# Konfiguration der benutzerdefinierten Messung für Containerprodukte mit dem AWS Marketplace Metering Service
<a name="container-metering-meterusage"></a>

**Anmerkung**  
 Für Amazon EKS-Bereitstellungen muss Ihre Software [IAM-Rollen für Dienstkonten (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) verwenden, um den API-Aufruf für den [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-Vorgang zu signieren. Bei Verwendung von [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) werden die Knotenrolle oder langfristige Zugriffsschlüssel nicht unterstützt.  
Für Amazon ECS-Bereitstellungen muss Ihre Software die [Amazon ECS-Aufgaben-IAM-Rolle](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) verwenden, um den API-Aufruf für den [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-Vorgang zu signieren. Die Verwendung der Knotenrolle oder langfristige Zugriffsschlüssel werden nicht unterstützt.  
Für Amazon Bedrock AgentCore Runtime-Bereitstellungen muss Ihre Software die [AgentCore Runtime-Ausführungsrolle](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-permissions.html#runtime-permissions-execution) verwenden, um den API-Aufruf für den [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-Vorgang zu signieren. Schlüssel für langfristigen Zugriff werden nicht unterstützt.

AWS Marketplace Bei Produkten in Containern können individuelle Dosierungen für bis zu 24 verschiedene Preisdimensionen pro Produkt festgelegt werden. Jeder Dimension kann ein langfristiger Vertragspreis zugeordnet werden. Um die benutzerdefinierte Messung zu aktivieren, integrieren Sie Ihr Container-Produkt in den AWS Marketplace Metering Service. Sie können Ihre eigenen Preiseinheiten und die benutzerdefinierte Messung für diese Nutzung bis hin AWS zur Abrechnung mithilfe des [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API-Vorgangs definieren. In den folgenden Abschnitten erfahren Sie, wie Sie die benutzerdefinierte Messung für Ihr Container-Produkt konfigurieren.

Preisdimensionen werden an zwei Stellen definiert: einmal bei der Erstellung Ihres Produkts im AWS Marketplace Management Portal (Verkäuferportal) und einmal in Ihrer Software zur Durchführung des `MeterUsage` Vorgangs. Diese Zwei-Faktor-Methode stellt sicher, dass die nachfolgenden Angebote wie beabsichtigt funktionieren, bevor sie der Öffentlichkeit zugänglich gemacht werden.

Um die benutzerdefinierte Messung einzurichten, müssen Sie die Nutzungskategorie, den Einheitentyp und die Preisgestaltung auswählen: 
+ **Nutzungskategorie** — Die Nutzungskategorie hilft Käufern zu verstehen, um was es sich bei Ihrem Produkt handelt und wie es verwendet wird. 
+ **Einheitentyp** — Der Einheitentyp definiert die Maßeinheit für die Abrechnung. Zum Beispiel die in GBps oder gemessene Bandbreite MBps, die Anzahl der Hosts oder Daten, die in MB, GB oder TB gemessen werden.
+ **Preisdimensionen** — Die Preisdimensionen stellen eine Funktion oder einen Dienst dar, für den Sie einen Preis pro Einheit festgelegt haben (z. B. Benutzer, ScansCPUs, v oder bereitgestellte Agenten). Die Preisdimensionen sind öffentlich. Sie können jedoch weiterhin private Angebote und BYOL-Angebote (Bring Your Own License) für öffentliche Produkte definieren. Versenden Sie keine Preise in den Messprotokollen. Sie messen die Anzahl der Einheiten, und wir verwenden diese zusammen mit den Preisen, die Sie bei der Erstellung Ihres Produkts festgelegt haben, um den Rechnungsbetrag des Käufers zu errechnen. 

  Wenn Ihre Produktpreise keiner der vordefinierten Kategorien oder Einheitentypen entsprechen, können Sie die generische Kategorie **Einheiten** wählen. Beschreiben Sie dann anhand der Beschreibung der Dimension, um welche Einheit es sich handelt.

Optional können Sie die Nutzung anhand von Eigenschaften, die Sie verfolgen, in Zuordnungen aufteilen. Die Zuweisungen werden dem Käufer in Form von Tags angezeigt. Diese Tags ermöglichen es dem Käufer, seine Kosten aufgeschlüsselt nach Nutzungswerten einzusehen. Wenn Sie beispielsweise nach dem Benutzer abrechnen und Benutzer die Eigenschaft „Abteilung“ haben, können Sie Nutzungszuordnungen mit Tags erstellen, die den Schlüssel „Abteilung“ und eine Zuordnung pro Wert haben. Dadurch werden der von Ihnen gemeldete Preis, die Abmessungen oder die Gesamtnutzung nicht geändert, Ihr Kunde kann seine Kosten jedoch nach Kategorien aufgeschlüsselt nach Kategorien anzeigen, die zu Ihrem Produkt passen.

Wir empfehlen, dass Sie jede Stunde einen Messdatensatz senden. Sie können die Nutzung jedoch auch über tägliche oder monatliche Zeiträume aggregieren. Falls es zu einem Ausfall kommt, können Sie die Softwarenutzung des Käufers zusammenfassen und die Software innerhalb der folgenden Stunden abrechnen. Sie können nicht mehr als einen Datensatz pro Stunde versenden.

Weitere Informationen zur Integration der AWS Marketplace Metering Service API für Containerprodukte mit kundenspezifischer Preisgestaltung finden Sie im Labor „[Integration mit kundenspezifischer Dosierung](https://catalog.workshops.aws/mpseller/en-US/container/integrate-custom)“ des *AWS Marketplace Verkäuferworkshops*.

**Wichtig**  
Die kostenlose Testversion und die Nutzung der Prepaid-Lizenz werden stündlich abgerechnet. Das separate Einsenden dieser Daten kann daher dazu führen, dass dem Käufer zu viel berechnet wird.

**Topics**
+ [Voraussetzungen für die benutzerdefinierte Messung](#custom-metering-prereqs)
+ [Testen Sie `MeterUsage` die Integration für ECS und EKS](#testing-meterusage-integration)
+ [Wir testen MeterUsage die Integration für AgentCore](#testing-agentcore-metering)
+ [Fehlerbehandlung für `MeterUsage`](#custom-metering-entitlement-error-handling)
+ [(Optional) Tagging nach Herstellerangaben](#container-vendor-metered-tagging)
+ [Codebeispiel](#container-meter-code-example)
+ [Integrieren Sie Ihr Containerprodukt mithilfe von kundenspezifischer Dosierung mit dem AWS Marketplace Metering Service und AWS SDK für Java](java-integration-example-meterusage.md)

## Voraussetzungen für die benutzerdefinierte Messung
<a name="custom-metering-prereqs"></a>

Bevor Sie das Produkt veröffentlichen, müssen Sie Folgendes tun:

1. Erstellen Sie ein neues Containerprodukt in der AWS Marketplace Management Portal und notieren Sie sich den zugehörigen Produktcode.

1. Verwenden Sie eine AWS Identity and Access Management (IAM-) Rolle für die Aufgabe, den Pod oder den AgentCore Runtime-Endpunkt, auf dem Ihre Anwendung ausgeführt wird, mit den für den Aufruf erforderlichen IAM-Berechtigungen. `MeterUsage` Die von IAM verwaltete Richtlinie `AWSMarketplaceMeteringRegisterUsage` verfügt über diese Berechtigungen. Weitere Informationen zu der Richtlinie finden Sie [ AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)in der *Referenz zu AWS verwalteten Richtlinien.*

1. (Optional) Wir empfehlen, dass Sie die AWS CloudTrail Protokollierung in der Aufgaben- oder Pod-Definition aktivieren, wenn Sie die Protokollierung sehen möchten.

1. Führen Sie einen Testaufruf für den `MeterUsage` API-Vorgang mit einem Datensatz für alle von Ihnen definierten Preisdimensionen durch.

## Testen Sie `MeterUsage` die Integration für ECS und EKS
<a name="testing-meterusage-integration"></a>

Verwenden Sie diesen `MeterUsage` Vorgang, um Ihre Integration zu testen, bevor Sie Ihr Bild AWS Marketplace zur Veröffentlichung einreichen.

Rufen Sie `MeterUsage` von den Container-Images aus auf, indem Sie Ihr Produkt auf Amazon Elastic Container Service (Amazon ECS) oder Amazon Elastic Kubernetes Service (Amazon EKS) mit dem ausführen, auf dem AWS-Konto Sie das Produkt anbieten. AWS Marketplace Ihre Messintegration muss das dynamisch einstellen AWS-Region, anstatt es fest zu codieren. Starten Sie beim Testen jedoch mindestens eine Amazon ECS-Task oder einen Amazon EKS-Pod mit Ihrem bezahlten Container in der Region USA Ost (Nord-Virginia), damit das AWS Marketplace Betriebsteam Ihre Arbeit anhand der Protokolle in dieser Region überprüfen kann.

**Anmerkung**  
Wenn Ihr Produkt sowohl Amazon ECS als auch Amazon EKS unterstützt, müssen Sie es nur in Amazon EKS starten, damit wir Ihre Integration validieren können.
Testen Sie jede Dimension, bevor Sie Ihr Produkt der Öffentlichkeit vorstellen und nachdem Sie eine neue Dimension hinzugefügt haben. Wenn Sie nicht für jede Dimension, die einem Containerprodukt zugeordnet ist, einen Messdatensatz senden, führt dies zu einem Fehler und die Anfrage schlägt fehl.

Sie können die Integration erst dann vollständig testen, wenn es mit allen erforderlichen Metadaten und Preisinformationen veröffentlicht wurde. Auf Anfrage kann das für die AWS Marketplace Katalogverwaltung zuständige Team den Eingang Ihrer Messdaten überprüfen.

## Wir testen MeterUsage die Integration für AgentCore
<a name="testing-agentcore-metering"></a>

Verwenden Sie diesen `MeterUsage` Vorgang, um Ihre Integration zu testen, bevor Sie Ihr Bild AWS Marketplace zur Veröffentlichung einreichen.

Rufen Sie `MeterUsage` von den Container-Bildern aus an, indem Sie Ihr Produkt auf Amazon Bedrock AgentCore mit dem AWS Konto ausführen, mit dem Sie das Produkt anbieten. AWS Marketplace Ihre Messintegration muss die AWS Region dynamisch festlegen, anstatt sie fest zu codieren. Starten Sie beim Testen jedoch mindestens einen Amazon AgentCore Bedrock-Agenten, der Ihren bezahlten Container in der Region USA Ost (Nord-Virginia) enthält, damit das AWS Marketplace Betriebsteam Ihre Arbeit anhand der Protokolle in dieser Region überprüfen kann. 

 Sie müssen keine stündlichen Nutzungsdaten zusammenfassen. Rufen Sie `MeterUsage` bei jedem Agentenaufruf die Nutzung für diesen Aufruf auf.

Sie müssen die neueste veröffentlichte Version des AWS SDK für Ihre Sprache verwenden. Dadurch wird der `ClientToken` Parameter automatisch mit einem automatisch generierten Wert gefüllt, um bei der Idempotenz zu helfen. Frühere Versionen des SDK, die dieses Feld nicht ausfüllen, funktionieren nicht für `MeterUsage` Anrufe von Amazon AgentCore Bedrock aus. Aufgrund eines Netzwerkproblems müssen Sie bei einem erneuten Versuch exakt dieselbe Anfrage erneut verwenden. Dadurch wird sichergestellt, dass die Anfragen unwirksam behandelt werden.

Aufgrund von Unterschieden im erwarteten Messverhalten zwischen Amazon Bedrock AgentCore und anderen Container-Produkten empfehlen wir nicht, dasselbe Container-Image für die Verwendung auf Amazon Bedrock AgentCore und Amazon ECS oder EKS freizugeben.

## Fehlerbehandlung für `MeterUsage`
<a name="custom-metering-entitlement-error-handling"></a>

Rufen Sie auf, `MeterUsage` indem Sie den `DryRun` Parameter beim Start des Containers auf true setzen, um zu überprüfen, ob die Metering-Integration funktioniert. Wenn Ihr Container-Image in den `MeterUsage` Vorgang integriert wird und außer beim Start des Containers eine Ausnahme auftritt, sollten Sie den Container beenden, um eine unbefugte Verwendung zu verhindern. `ThrottlingException`

Andere Ausnahmen als `ThrottlingException` werden nur beim ersten Aufruf von `MeterUsage` ausgelöst. Nachfolgende Aufrufe von derselben Amazon ECS-Task oder demselben Amazon EKS-Pod oder AgentCore Runtime-Endpunkt werden nicht ausgelöst`CustomerNotSubscribedException`, auch wenn der Kunde sich abmeldet, während die Aufgabe oder der Pod noch ausgeführt wird. Diesen Kunden wird nach dem Abbestellen weiterhin der Betrieb von Containern in Rechnung gestellt, und ihre Nutzung wird nachverfolgt.

Eine ausführliche Beschreibung der häufigsten Fehler für finden Sie [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)in der *AWS Marketplace Metering Service API-Referenz*`MeterUsage`. Für jede AWS SDK-Programmiersprache gibt es eine Reihe von Richtlinien zur Fehlerbehandlung, in denen Sie weitere Informationen finden können. 

## (Optional) Tagging nach Herstellerangaben
<a name="container-vendor-metered-tagging"></a>

Durch die Kennzeichnung mit Herstellerzählung können unabhängige Softwareanbieter (ISVs) dem Käufer detailliertere Einblicke in seine Softwarenutzung geben und ihn bei der Kostenverteilung unterstützen.

**Anmerkung**  
Tagging mit Herstellermessung wird für Messanfragen für Amazon Bedrock-Produkte nicht unterstützt. AgentCore 

Sie haben mehrere Möglichkeiten, die Softwarenutzung eines Käufers zu kennzeichnen. Eine Möglichkeit besteht darin, Ihre Käufer zunächst zu fragen, was sie in ihrer Kostenaufteilung sehen möchten. Anschließend können Sie die Nutzung auf die Immobilien aufteilen, die Sie für das Konto des Käufers nachverfolgen. Zu den Eigenschaften gehören beispielsweise `AccountId``Business Unit`,`Cost Centers`, und andere relevante Metadaten für Ihr Produkt. Diese Eigenschaften werden dem Käufer als Tags angezeigt. Mithilfe von Stichwörtern können Käufer in ihrer AWS Abrechnungskonsole ihre Kosten nach Nutzung aufgeteilt nach Tagwerten einsehen ([https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)). Das Tagging mit Lieferantenzählung hat keine Auswirkungen auf den Preis, die Abmessungen oder die Gesamtnutzung, die Sie melden. So können Ihre Kunden ihre Kosten nach Kategorien aufteilen, die zu Ihrem Produkt passen.

In einem gängigen Anwendungsfall abonniert ein Käufer Ihr Produkt mit einem AWS-Konto. Der Käufer hat außerdem zahlreiche Benutzer, die mit demselben Produktabonnement verknüpft sind. Sie können Nutzungszuordnungen mit Tags erstellen, die den Schlüssel von haben`AccountId`, und dann jedem Benutzer die Nutzung zuweisen. In diesem Fall können Käufer das `AccountId` Tag in ihrer Billing and Cost Management-Konsole aktivieren und die Nutzung einzelner Benutzer analysieren.

### Erfahrung des Verkäufers
<a name="container-vendor-metered-tag-seller"></a>

Verkäufer können die Messdaten für Ressourcen mit demselben Satz von Stichwörtern zusammenfassen, anstatt die Nutzung für alle Ressourcen zu aggregieren. Verkäufer können beispielsweise den Messdatensatz erstellen, der verschiedene Bereiche umfasst`UsageAllocations`. Jeder Bucket steht `UsageQuantity` für eine Reihe von Stichwörtern, wie z. B. `AccountId` und`BusinessUnit`. 

Im folgenden Diagramm hat **Ressource 1** einen eindeutigen Satz von `AccountId` und `BusinessUnit` -Tags und wird im **Messdatensatz** als ein einziger Eintrag angezeigt. 

**Ressource 2** und **Ressource 3** haben beide dasselbe `AccountId` Tag,`2222`, und dasselbe `BusinessUnit` Tag,`Operations`. Dadurch werden sie zu einem einzigen `UsageAllocations` Eintrag im **Messdatensatz** zusammengefasst.

![\[Diagramm, das zeigt, wie Messwerte von Anbietern Nutzungsdaten kombinieren. Drei Ressourcen (Ressource 1, 2 und 3) unterscheiden sich AccountIds und BusinessUnits werden in einem einzigen Messdatensatz zusammengefasst, der nach AccountId und BusinessUnit vor dem Senden an den AWS Marketplace Metering Service UsageAllocations gruppiert wird.\]](http://docs.aws.amazon.com/de_de/marketplace/latest/userguide/images/seller-vendor-meter-tag.png)


Verkäufer können auch Ressourcen ohne Tags zu einer einzigen Ressource `UsageAllocation` mit der zugewiesenen Nutzungsmenge zusammenfassen und diese als einen der Einträge in versenden`UsageAllocations`.

Zu den Beschränkungen gehören:
+ Anzahl der Tags — 5
+ Größe von `UsageAllocations` (Kardinalität) — 2.500

Zu den Validierungen gehören:
+ Zulässige Zeichen für den Tag-Schlüssel und -Wert — a-zA-Z 0-9\$1 -= . \$1:\$1 /@
+ Maximale Anzahl von Tags in `UsageAllocation` der Liste — 5
+ Zwei `UsageAllocations` können nicht dieselben Tags haben (d. h. dieselbe Kombination von Tag-Schlüsseln und -Werten). Wenn das der Fall ist, müssen sie dasselbe verwenden`UsageAllocation`.
+ Die Summe `AllocatedUsageQuantity` von `UsageAllocation` muss dem entsprechen`UsageQuantity`, was der aggregierten Nutzung entspricht.

### Käufererlebnis
<a name="container-vendor-metered-tag-buyer"></a>

Die folgende Tabelle zeigt ein Beispiel für das Einkaufserlebnis, nachdem ein Käufer die Tags `AccountId` und die `BusinessUnit` Lieferanten-Tags aktiviert hat. 

In diesem Beispiel kann der Käufer die zugewiesene Nutzung in seinem **Kostennutzungsbericht** sehen. Die Tags mit Lieferantenzählung verwenden das Präfix. `“aws:marketplace:isv”` Käufer können sie in der Billing and Cost Management unter „****AWS Kostenverrechnungs-Tags****“ aktivieren.

Die erste und letzte Zeile des **Kostennutzungsberichts** beziehen sich auf das, was der Verkäufer an den Messdienst sendet (wie im [Erfahrung des Verkäufers](#container-vendor-metered-tag-seller) Beispiel gezeigt).


**Bericht über die Nutzung der Kosten (vereinfacht)**  

| ProductCode  | Käufer | UsageDimension | UsageQuantity | `aws:marketplace:isv:AccountId ` | `aws:marketplace:isv:BusinessUnit` | 
| --- | --- | --- | --- | --- | --- | 
| xyz | 111122223333 | Netzwerk: pro (GB) geprüft  | 70 | 2222 | Operationen | 
| xyz | 111122223333 | Netzwerk: pro (GB) geprüft  | 30 | 3333 | Finanzen | 
| xyz | 111122223333 | Netzwerk: pro (GB) geprüft  | 20 | 4444 | IT | 
| xyz | 111122223333 | Netzwerk: pro (GB) geprüft  | 20 | 5555 | Marketing | 
| xyz | 111122223333 | Netzwerk: pro (GB) geprüft  | 30 | 1111 | Marketing | 

Ein Codebeispiel finden Sie unter [`MeterUsage`Codebeispiel mit Kennzeichnung der Verwendungszuweisung (optional)](#container-meterusage-code-example).

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

Das folgende Codebeispiel soll Ihnen helfen, Ihr Container-Produkt mit den für die Veröffentlichung und Wartung Ihres Produkts AWS Marketplace APIs erforderlichen Komponenten zu integrieren.

### `MeterUsage`Codebeispiel mit Kennzeichnung der Verwendungszuweisung (optional)
<a name="container-meterusage-code-example"></a>

Das folgende Codebeispiel ist relevant für Containerprodukte mit Verbrauchspreismodellen. Das Python-Beispiel sendet einen Messdatensatz mit entsprechenden Nutzungszuweisungs-Tags an AWS Marketplace , um Ihren Kunden pay-as-you-go Gebühren in Rechnung zu stellen.

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

# Import AWS Python SDK
import boto3
import time

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

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

    }
]

marketplaceClient = boto3.client("meteringmarketplace")

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

Weitere Informationen zu `MeterUsage` finden Sie [MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)in der *AWS Marketplace Metering Service API-Referenz*.

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

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

# Integrieren Sie Ihr Containerprodukt mithilfe von kundenspezifischer Dosierung mit dem AWS Marketplace Metering Service und AWS SDK für Java
<a name="java-integration-example-meterusage"></a>

AWS Marketplace Bei Container-Produkten können individuelle Messwerte für bis zu 24 verschiedene Preisdimensionen pro Produkt festgelegt werden. Um die benutzerdefinierte Messung zu aktivieren, integrieren Sie Ihr Container-Produkt in den AWS Marketplace Metering Service. Sie können Ihre eigenen Preiseinheiten und die benutzerdefinierte Messung für diese Nutzung bis hin AWS zur Abrechnung mithilfe des [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)API-Vorgangs definieren. Das folgende Beispiel beschreibt eine Implementierung, die den AWS SDK für Java zur Integration in den [AWS Marketplace Metering Service](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/Welcome.html) `MeterUsage` verwendet. 

Vollständige Details finden Sie unter [`MeterUsage`Java-Beispiele](#meterusage-java-example). Viele der folgenden Schritte gelten unabhängig von der Sprache. 

**Beispiel: Integration von AWS Marketplace Metering Services**

1. Melden Sie sich an der [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/tour) an.

1. Wählen Sie **unter Assets** die Option **Containers** aus, um mit der Erstellung eines neuen Container-Produkts zu beginnen. Das Erstellen des Produkts generiert den Produkt-Code für das Produkt, das mit Ihrem Container-Abbild integriert werden soll. Informationen zum Einstellen von AWS Identity and Access Management (IAM-) Berechtigungen finden Sie unter[AWS Marketplace Mess- und Berechtigungs-API-Berechtigungen](iam-user-policy-for-aws-marketplace-actions.md).

1.  Laden Sie das öffentliche [AWS Java-SDK](https://aws.amazon.com/sdk-for-java/) herunter. 
**Wichtig**  
 Um die Metering-API-Operationen von Amazon Elastic Kubernetes Service (Amazon EKS) aus aufzurufen, müssen Sie [ein unterstütztes AWS SDK verwenden](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html) und auf einem Amazon EKS-Cluster mit Kubernetes 1.13 oder höher ausführen. 

1. Rufen Sie den `MeterUsage` Vorgang von der Aufgabe oder dem Pod aus einmal pro Stunde für jede Dimensionsnutzung auf. Der API-Vorgang akzeptiert einen Messdatensatz für eine eindeutige Kombination aus `Dimension``Resource`, und`Hour`. Bei der Ressource handelt es sich entweder um eine Amazon Elastic Container Service (Amazon ECS) -Aufgabe oder um einen Amazon EKS-Pod.

   ```
   {
       "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.
   }
   ```
**Anmerkung**  
Es ist möglich, dass vorübergehende Probleme bei der Verbindung mit dem AWS Marketplace Metering Service auftreten. AWS Marketplace empfiehlt dringend, Wiederholungsversuche für bis zu 30 Minuten mit exponentiellem Back-up durchzuführen, um kurzfristige Ausfälle oder Netzwerkprobleme zu vermeiden.

1. Erstellen Sie eine neue Version Ihres Container-Images, die den `MeterUsage` Aufruf enthält, taggen Sie den Container und übertragen Sie ihn in eine beliebige Docker-Registry, die mit Amazon ECS oder Amazon EKS kompatibel ist, z. B. Amazon Elastic Container Registry (Amazon ECR). Wenn Sie Amazon ECR verwenden, stellen Sie sicher, dass das Konto, das die Amazon ECS-Aufgabe oder den Amazon EKS-Pod startet, über Berechtigungen für das Amazon ECR-Repository verfügt. Andernfalls schlägt sie fehl.

1. Erstellen Sie eine [IAM-Rolle](https://aws.amazon.com/iam/), die Ihrem Container die Berechtigung zum Aufrufen erteilt`MeterUsage`, wie im folgenden Codebeispiel definiert. Sie müssen diese Rolle AWS Identity and Access Management (IAM) im Parameter [Task Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_role_arn) der Amazon ECS-Aufgabe oder der Amazon EKS-Pod-Definition angeben.

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

****  

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

------

1. Erstellen Sie eine Amazon ECS-Aufgabe oder eine Amazon EKS-Pod-Definition, die auf den Container verweist, der in Schritt 6 integriert wurde, AWS Marketplace und auf die IAM-Rolle verweist, die Sie in Schritt 6 erstellt haben. Wenn Sie die Protokollierung sehen möchten, aktivieren Sie die AWS CloudTrail Protokollierung in der Aufgabendefinition. 

1. Erstellen Sie einen Amazon ECS- oder Amazon EKS-Cluster, um Ihre Aufgabe oder Ihren Pod auszuführen. Weitere Informationen zum Erstellen eines Amazon ECS-Clusters finden Sie unter [Creating a Cluster](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create_cluster.html) im *Amazon Elastic Container Service Developer Guide*. Weitere Informationen zum Erstellen eines Amazon EKS-Clusters (mit Kubernetes Version 1.1.3.x oder höher) finden Sie unter [Erstellen eines](https://docs.aws.amazon.com/eks/latest/userguide/create_cluster.html) Amazon EKS-Clusters.

1. Konfigurieren Sie den Amazon ECS- oder Amazon EKS-Cluster und starten Sie die Amazon ECS-Aufgabendefinition oder den Amazon EKS-Pod, den Sie in Schritt 8 erstellt haben, in der Region us-east-1 AWS . Nur während dieses Testprozesses, also bevor das Produkt live ist, müssen Sie diese Region verwenden.

1. Wenn Sie `MeterUsage` für jede der für das Produkt veröffentlichten Abmessungen eine gültige Antwort von erhalten haben, können Sie mit der Erstellung Ihres Container-Produkts beginnen. Bei Fragen wenden Sie sich bitte an das [AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us/)-Team. 

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

In den folgenden Codebeispielen wird der AWS SDK für Java und der AWS Marketplace Metering Service verwendet, um den `MeterUsage` Vorgang aufzurufen.

Im folgenden Codebeispiel wird der `MeterUsage` Vorgang ohne Angabe von Daten aufgerufen`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);
    }
}
```

Im folgenden Codebeispiel wird die `MeterUsage` Operation with aufgerufen`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();
    }
```

# Vertragspreise für Containerprodukte mit AWS License Manager
<a name="container-license-manager-integration"></a>

Bei containerbasierten Produkten mit Vertragspreisen können Sie AWS License Manager Lizenzen mit Ihrem Produkt verknüpfen. AWS License Manager ist ein Lizenzverwaltungstool, mit dem Ihre Anwendung Lizenzen (auch als Berechtigungen bezeichnet), die von einem Kunden gekauft wurden, verfolgen und aktualisieren kann. Dieser Abschnitt enthält Informationen darüber, wie Sie Ihr Produkt in integrieren können. AWS License Manager Nach Abschluss der Integration können Sie Ihre Produktliste am veröffentlichen AWS Marketplace.

Wenn Sie License Manager in ein AWS Marketplace for Containers Anywhere-Produkt für Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon Elastic Compute Cloud (Amazon EC2) oder eine lokale Infrastruktur integrieren, folgen Sie den Anweisungen unter. [Integration von an AWS Marketplace for Containers Anywhere mit License Manager](container-anywhere-license-manager-integration.md)

Weitere Informationen zu AWS License Manager finden Sie im [AWS License Manager Benutzerhandbuch](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) und im [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)Abschnitt der *AWS CLI Befehlsreferenz*.

Weitere Informationen zur Integration von AWS License Manager Container-Produkten mit Vertragspreisen finden Sie im Labor „[Integration mit Vorauszahlung](https://catalog.workshops.aws/mpseller/en-US/container/integrate-contract)“ des *AWS Marketplace Verkäuferworkshops*.

**Topics**
+ [Vertragspreise für Containerprodukte](#container-contracts)
+ [Lizenzmodelle](#container-LM-license-models)
+ [AWS License Manager Voraussetzungen für die Integration](#container-LM-prereqs)
+ [Integration eines Containerprodukts mit License Manager](#container-integrate-with-LM)
+ [License Manager Manager-API-Operationen](#container-LM-API-calls)
+ [Verlängerungen und Upgrades von Lizenzen](#container-LM-lic-renew-upgrade)
+ [Integration von an AWS Marketplace for Containers Anywhere mit License Manager](container-anywhere-license-manager-integration.md)

## Vertragspreise für Containerprodukte
<a name="container-contracts"></a>

Bei Produkten auf Containerbasis mit Vertragspreisen stellen Sie Ihren Kunden die AWS Marketplace Rechnung im Voraus oder nach dem von Ihnen festgelegten Zahlungsplan auf der Grundlage des Vertrags zwischen Ihnen und Ihrem Kunden in Rechnung. Ab diesem Zeitpunkt sind sie berechtigt, die Ressourcen zu nutzen. 

Um Ihre Preise festzulegen, wählen Sie eine oder mehrere Vertragslaufzeiten, die Sie Ihren Kunden anbieten. Sie können für jede Vertragslaufzeit unterschiedliche Preise eingeben. Sie haben die Wahl zwischen 1 Monat, 12 Monaten, 24 Monaten und 36 Monaten. Für private Angebote können Sie eine benutzerdefinierte Dauer in Monaten (bis zu 60 Monaten) angeben. 

Wählen Sie die Kategorie, die der Preisgestaltung Ihres Produkts am besten entspricht. Die Preiskategorie wird Kunden auf der AWS Marketplace Website angezeigt. Sie können zwischen **Bandbreite** (GB/s, MB/s), **Daten** (GB, MB, TB), **Hosts**, **Anfragen**, **Stufen** oder **Benutzern** wählen. Wenn keine der vordefinierten Kategorien Ihren Anforderungen entspricht, können Sie die allgemeinere Kategorie **Einheiten** wählen. 

Das Angebot ermöglicht das Hinzufügen von bis zu 24 Dimensionen.


**Beispiel: Anwendung zur Datenspeicherung**  

|   | Preis für 1 Monat | Preis für 12 Monate  | Preis für 24 Monate  | Preis für P36 Monate  | 
| --- | --- | --- | --- | --- | 
|  Unverschlüsselte Daten (GB)  |  1,50 USD/GB  |  16,00 USD/GB  |  30,00 USD/GB  |  60,00 USD/GB  | 
|  Verschlüsselte Daten (GB)  |  1,55 USD/GB  |  16,60 USD/GB  |  31,20 USD/GB  |  61,20 USD/GB  | 


**Beispiel: Produkt zur Protokollüberwachung**  

|   | Preis für 1 Monat | Preis für 12 Monate  | Preis für 24 Monate | Preis für 36 Monate | 
| --- | --- | --- | --- | --- | 
|  Basic (10 überwachte Hosts, 5 überwachte Container)  |  100 USD  |  1000 USD  | 2000 USD  | 4000 USD | 
|  Standard (20 überwachte Hosts, 10 überwachte Container)  |  200 USD  |  2000 USD  | 4000 USD  | 8000\$1 | 
|  Pro (40 überwachte Hosts, 20 überwachte Container)  |  400 USD  |  4000 USD  | 8000\$1  | 16.000\$1 | 
|  Zusätzliche überwachte Hosts pro Stunde  | 10\$1  | 100 USD  |  200 USD | 400 USD | 
|  Zusätzliche überwachte Container pro Stunde  | 10\$1  | 100 USD  |  200 USD | 400 USD | 

**Anmerkung**  
Die Preise können für 1 Monat, 12 Monate, 24 Monate oder 36 Monate festgelegt werden. Sie können eine oder mehrere dieser Optionen für Ihr Produkt anbieten. Die Dauer muss für jede Dimension gleich sein.   

**Example**  
Wenn Sie beispielsweise `AdminUsers` Abmessungen angeben `ReadOnlyUsers` und einen Jahrespreis für anbieten ReadOnlyUsers, müssen Sie auch einen Jahrespreis für `AdminUsers` angeben.


### Automatische Verlängerung
<a name="ami-contracts-automatic-renewals"></a>

 Wenn Kunden Ihr Produkt im Rahmen AWS Marketplace von Container-Verträgen kaufen, können sie sich darauf einigen, die Vertragsbedingungen automatisch zu verlängern. Die Kunden zahlen weiterhin jeden Monat oder für 1, 2 oder 3 Jahre für die Nutzungsrechte. 

Kunden können ihre Verlängerungseinstellungen jederzeit ändern. Weitere Informationen finden Sie im *AWS Marketplace Buyer Guide* unter [Einen bestehenden Vertrag ändern](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-container-contracts.html#modify-existing-contract).

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

AWS Marketplace Integration mit AWS License Manager unterstützt zwei Lizenzmodelle:
+ [Konfigurierbares Lizenzmodell](#container-LM-config-lic-model)
+ [Gestaffeltes Lizenzmodell](#container-LM-tiered-lic-model)

### Konfigurierbares Lizenzmodell
<a name="container-LM-config-lic-model"></a>

Das konfigurierbare Lizenzmodell (auch als quantifizierbares Lizenzmodell bezeichnet) berechtigt einen Käufer zu einer bestimmten Menge an Ressourcen, nachdem er eine Lizenz erworben hat. 

Sie legen eine Preisdimension und einen Preis pro Einheit fest. Anschließend kann der Käufer die Menge der Ressourcen wählen, die er kaufen möchte.

**Example nach Preisdimension und Preis pro Einheit**  
Sie können eine Preisdimension (z. B. Datensicherung) und einen Preis pro Einheit (z. B. 30 USD/Einheit) festlegen.  
Der Käufer kann wählen, ob er 5, 10 oder 20 Einheiten kaufen möchte.   
Ihr Produkt verfolgt und misst den Verbrauch, um die Menge der verbrauchten Ressourcen zu messen.

Beim Konfigurationsmodell werden die Berechtigungen auf eine von zwei Arten gezählt:
+ [Drawdown-Lizenzen](#container-floating-lic)
+ [Floating-Lizenzen](#container-floating-lic) 

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

 Die Lizenz wird bei der Nutzung aus dem Pool der zulässigen Anzahl an Lizenzen entnommen. Diese Berechtigung ist dauerhaft ausgecheckt und kann nicht wieder in den Lizenzpool aufgenommen werden.

**Example der Verarbeitung einer begrenzten Datenmenge**  
Ein Benutzer ist berechtigt, 500 GB Daten zu verarbeiten. Während sie weiterhin Daten verarbeiten, wird die Menge aus dem Pool von 500 GB entnommen, bis alle 500-GB-Lizenzen aufgebraucht sind.

Bei Drawdown-Lizenzen können Sie den `CheckoutLicense` API-Vorgang verwenden, um verbrauchte Lizenzeinheiten (Berechtigungen) auszuchecken. 

**Example von Backups auf Amazon S3 für eine Reihe von Einheiten/Jahr**  
Sie haben ein Speicherprodukt, das die Sicherung von bis zu 1.024 Dateneinheiten auf Amazon Simple Storage Service für ein Jahr ermöglicht. Ihre Anwendung kann mithilfe mehrerer Amazon EC2 EC2-Instances gestartet werden. Ihre Anwendung verfügt über einen Mechanismus zum Verfolgen und Aggregieren von Daten. Ihre Software ruft den `CheckoutLicense` API-Vorgang mit der Produkt-ID bei jedem Backup oder in festen Intervallen auf, um die verbrauchten Mengen zu aktualisieren.   
In diesem Beispiel ruft Ihre Software den `CheckoutLicense` API-Vorgang auf, um 10 Dateneinheiten auszuchecken. Wenn die Gesamtkapazität das vom Kunden gekaufte Backup-Limit erreicht, schlägt der API-Aufruf fehl.

**Anforderung**

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

**Antwort**

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

#### Flexible Lizenzen
<a name="container-floating-lic"></a>

 Die Lizenz wird nach der Verwendung wieder in den Pool mit der zulässigen Anzahl an Lizenzen zurückgeführt.

Bei Floating-Lizenzen checkt die Anwendung die Berechtigungen aus dem Berechtigungspool mithilfe der `CheckoutLicense` API-Operation aus, wenn die Ressource verwendet wird. Die Antwort auf den `CheckoutLicense` API-Vorgang beinhaltet ein Lizenzverbrauchstoken, das eine eindeutige Kennung für den Checkout darstellt. Das Lizenzverbrauchstoken kann verwendet werden, um zusätzliche Aktionen an den ausgecheckten Berechtigungen durchzuführen, z. B. sie wieder in die Lizenz einzuchecken oder den Checkout zu verlängern.

Um die Berechtigung wieder in den Pool einzuchecken, verwenden Sie den `CheckInLicense` API-Vorgang, wenn die Ressource nicht mehr verwendet wird.

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

Falls die Berechtigung nicht eingecheckt werden kann (falls die Anwendung abgestürzt ist), wird die Berechtigung nach 60 Minuten automatisch wieder in den Pool eingecheckt. Wenn die Ressource länger als 60 Minuten genutzt wird, empfiehlt es sich, die Berechtigung mithilfe des `ExtendLicenseConsumption` API-Vorgangs aus dem Pool auszuchecken, solange die Ressource genutzt wird.

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

**Example von der Anzahl der Benutzer ab einer festen Obergrenze**  
Ein Benutzer hat Anspruch auf 500 gleichzeitige Benutzer in der Anwendung. Wenn sich Benutzer an- und abmelden, werden die Benutzer gezogen und wieder dem Pool von 500 Benutzern zugewiesen. Die Anwendung kann jedoch nicht mehr als 500 Benutzer aus dem Pool ziehen, da 500 gleichzeitige Benutzer die feste Obergrenze sind.

Bei variablen Berechtigungen können Sie den `CheckInLicense` API-Vorgang verwenden, um die Lizenzeinheiten an den Berechtigungspool zurückzugeben. 

**Example der Anzahl gleichzeitiger Benutzer für ein Jahr**  
Der Preis Ihres Produkts basiert auf der Anzahl der gleichzeitigen Benutzer. Der Kunde erwirbt eine Lizenz für 10 Benutzer für ein Jahr. Der Kunde startet die Software, indem er AWS Identity and Access Management (IAM-) Berechtigungen erteilt. Wenn sich ein Benutzer anmeldet, ruft Ihre Anwendung den `CheckoutLicense` API-Vorgang auf, um die Menge um 1 zu reduzieren. Wenn sich der Benutzer abmeldet, gibt die Anwendung diese Lizenz an den Pool zurück, indem sie den `CheckInLicense` API-Vorgang aufruft. Wenn Sie nicht anrufen`CheckInLicense`, wird die Lizenzeinheit nach 1 Stunde automatisch eingecheckt.

**Anmerkung**  
In der folgenden Anfrage handelt es sich `key-fingerprint` nicht um einen Platzhalterwert, sondern um den tatsächlichen Wert des Fingerabdrucks, mit dem alle Lizenzen veröffentlicht werden.

**Anforderung**

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

**Antwort**

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

### Gestaffeltes Lizenzmodell
<a name="container-LM-tiered-lic-model"></a>

Das gestaffelte Lizenzmodell berechtigt einen Käufer, eine bestimmte Stufe oder Stufe von Anwendungsfunktionen zu nutzen, nachdem der Käufer eine Lizenz erworben hat. 

Sie erstellen Stufen für Ihr Produkt, z. B. Basic, Intermediate und Premium. Der Käufer wählt dann eine der vordefinierten Stufen aus.

Die Anwendung muss die Nutzung der Anwendung nicht verfolgen oder messen.

Beim abgestuften Lizenzmodell werden die Berechtigungen nicht mitgezählt, sondern stehen für eine vom Kunden bereitgestellte Servicestufe. 

Wenn Sie gebündelte Funktionen anbieten möchten, sind Stufen vorzuziehen. 

**Example der Stufen Basic, Intermediate und Premium**  
Ein Kunde kann einen Vertrag für eine von drei möglichen Stufen der Software unterzeichnen: Basic, Intermediate oder Premium. Jede dieser Stufen hat ihre eigenen Preise. Ihre Software kann die Stufe identifizieren, für die sich der Kunde angemeldet hat, indem sie den `CheckoutLicense` API-Vorgang aufruft und alle möglichen Stufen in der Anfrage angibt.   
Die Antwort auf die Anfrage enthält den Anspruch, der der Stufe entspricht, die der Kunde erworben hat. Auf der Grundlage dieser Informationen kann die Software das entsprechende Kundenerlebnis bieten.

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

#### Antwort
<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 Voraussetzungen für die Integration
<a name="container-LM-prereqs"></a>

Bevor Sie das Produkt veröffentlichen, müssen Sie Folgendes tun:

1. Erstellen Sie ein neues Containerprodukt in der AWS Marketplace Management Portal und notieren Sie sich den zugehörigen Produktcode.

   Weitere Informationen finden Sie unter [Überblick: Erstellen Sie ein Container-Produkt](container-product-getting-started.md#create-container-product).

1. Verwenden Sie eine IAM-Rolle für die Aufgabe oder den Pod, auf dem Ihre Anwendung ausgeführt wird, mit den IAM-Berechtigungen, die zum Aufrufen der `CheckoutLicense` `CheckInLicense` API-Operationen`ExtendLicenseConsumption`, und erforderlich sind.

   Die erforderlichen IAM-Berechtigungen werden in der folgenden IAM-Richtlinie detailliert beschrieben.

------
#### [ 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. Führen Sie einen Testaufruf für den `RegisterUsage` API-Vorgang mit einem Datensatz für alle von Ihnen definierten Preisdimensionen durch.

## Integration eines Containerprodukts mit License Manager
<a name="container-integrate-with-LM"></a>

**Um Ihr containerbasiertes Produkt mit License Manager zu integrieren**

1. Legen Sie die IAM-Berechtigungen fest, um License Manager aufzurufen. Weitere Informationen finden Sie unter [AWS License Manager Voraussetzungen für die Integration](#container-LM-prereqs).

1. Laden Sie das AWS SDK herunter.
**Anmerkung**  
Konfigurieren Sie keine AWS Anmeldeinformationen in Ihrer Software. AWS Anmeldeinformationen für den Käufer werden automatisch zur Laufzeit abgerufen, wenn Ihr Container in einer Amazon EC2-Instance, einer Amazon ECS-Aufgabe oder einem Amazon EKS-Pod ausgeführt wird.

1. Fügen Sie Ihrem Produkt Lizenzprüfungen hinzu.

   Ihr Produkt kann den `CheckoutLicense` API-Vorgang überall dort aufrufen, wo die Lizenzprüfung durchgeführt werden soll. Um die Lizenz zu überprüfen, muss Ihr Produkt Folgendes wissen:

   1. Der vertrauenswürdige Aussteller der Lizenz ()AWS Marketplace

   1. Die Produkt-SKU (Produkt-ID) der Anwendung

   1. Das Recht, nach dieser Anwendung zu suchen

   Die API-Aufrufe variieren je nachdem, welche Preislizenzen Sie einrichten.

1. Veröffentlichen Sie Ihre Produktliste am AWS Marketplace.

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

Um die im License Manager-Konto des Kunden gespeicherten Lizenzen zu verwalten, kann Ihre Software die folgenden API-Operationen verwenden:
+ `GetLicense`— Eine API, die die Software abfragen kann. Es ruft den Status einer gekauften Lizenz ab (d. h. abgelaufen oder läuft bald ab) und sendet eine Statusbenachrichtigung an den Kunden.
+ `CheckoutLicense`— Erkennt Lizenzen, die der Benutzer gekauft hat. Sie können den `CheckoutLicense` API-Vorgang auch verwenden, um die Lizenzmenge zu aktualisieren, wenn der Benutzer eine bestimmte Anzahl von Lizenzen verbraucht hat. Mit `CheckoutLicense` können Sie immer wieder die Anzahl der vom Kunden verwendeten Lizenzen überprüfen. Wenn der Kunde alle Lizenzen aufgebraucht hat, gibt dieser Aufruf einen Fehler zurück. Informationen zur empfohlenen Schrittfrequenz finden Sie `CheckoutLicense` unter. [Verlängerungen und Upgrades von Lizenzen](#container-LM-lic-renew-upgrade)
+ `ExtendLicenseConsumption`— Bei variablen Dimensionen wird die Lizenz beim Auschecken einer Lizenz durch die Software nach 60 Minuten automatisch wieder in den Pool aufgenommen. Wenn Sie die Zeit verlängern möchten, für die die Lizenz ausgecheckt bleibt, verwenden Sie den `ExtendLicenseConsumption` API-Vorgang, um die Lizenz um weitere 60 Minuten zu verlängern.
+ `CheckInLicense`— Wenn Sie bei variablen Dimensionen die Lizenz an den Berechtigungspool zurückgeben möchten, verwenden Sie den `CheckInLicense` API-Vorgang.
+ `ListReceivedLicenses`API — Listet die vom Käufer gekauften Lizenzen auf.

## Verlängerungen und Upgrades von Lizenzen
<a name="container-LM-lic-renew-upgrade"></a>

Kunden können ihre Lizenzen auf der verlängern oder aktualisieren. AWS Marketplace Management Portal AWS Marketplace Generiert nach einem zusätzlichen Kauf eine neue Version der Lizenz, die die neuen Rechte widerspiegelt. Ihre Software liest die neuen Berechtigungen mithilfe derselben API-Operationen. Sie müssen bei der License Manager Manager-Integration nichts anderes tun, um Verlängerungen und Upgrades abzuwickeln.

Aufgrund von Lizenzverlängerungen, Upgrades, Stornierungen usw. empfehlen wir, dass Ihr Produkt den `CheckoutLicense` API-Vorgang in regelmäßigen Abständen aufruft, während das Produkt verwendet wird. Durch die regelmäßige Nutzung des `CheckoutLicense` API-Vorgangs kann das Produkt Änderungen an Berechtigungen erkennen, z. B. Upgrades und deren Ablauf.

Wir empfehlen, den `CheckoutLicense` API-Aufruf alle 15 Minuten durchzuführen. 

# Integration von an AWS Marketplace for Containers Anywhere mit License Manager
<a name="container-anywhere-license-manager-integration"></a>

Als AWS Marketplace Verkäufer können Sie eine Integration in AWS License Manager ein AWS Marketplace for Containers Anywhere-Produkt für Amazon EKS Anywhere, Amazon ECS Anywhere, Amazon EC2 oder eine lokale Infrastruktur vornehmen. Die folgenden Abschnitte enthalten Anweisungen für diese Integration.

Allgemeine Informationen zur License Manager Manager-Integration mit AWS Marketplace, einschließlich verfügbarer Lizenzmodelle, finden Sie unter[Vertragspreise für Containerprodukte mit AWS License Manager](container-license-manager-integration.md). Weitere Informationen AWS License Manager dazu finden Sie im [AWS License Manager Benutzerhandbuch](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html) und im [AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)Abschnitt der *AWS CLI Befehlsreferenz*.

**Topics**
+ [Integration eines AWS Marketplace for Containers Anywhere-Produkts mit License Manager](#containers-anywhere-integrate-with-LM)
+ [Die License Manager Manager-Integration lokal testen](#container-testing-LM-integration-locally)
+ [Testen der License Manager Manager-Integration auf Amazon EKS](#container-testing-LM-integration-EKS)
+ [Flexible Lizenzberechtigungen mit License Manager](#container-LM-floating-license)
+ [Bewährte Methoden für die Integration mit License Manager für lokale Bereitstellungen](#container-LM-best-practices-on-prem)
+ [`LicenseManagerCredentialsProvider`- Java-Implementierung](#container-license-manager-cred-provider-java)
+ [`LicenseManagerCredentialsProvider``Golang`- Implementierung](#container-license-manager-cred-provider-golang)

## Integration eines AWS Marketplace for Containers Anywhere-Produkts mit License Manager
<a name="containers-anywhere-integrate-with-LM"></a>

Verwenden Sie die folgenden Anweisungen, um Ihr AWS Marketplace for Containers Anywhere-Produkt in zu integrieren AWS License Manager.

**Um Ihr AWS Marketplace for Containers Anywhere-Produkt mit License Manager zu integrieren**

1. Öffnen Sie einen Webbrowser, und melden Sie sich am [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) an.

1. Erstellen Sie eine Produkt-ID für Ihr Container-Produkt, indem Sie die folgenden Schritte ausführen. Sie werden diese ID in Ihrem Container-Image für Lizenzprüfungen in einem späteren Schritt verwenden.

   1. Erweitern Sie in der Menüleiste **Assets (Objekte)** und wählen Sie **Container**.

   1. Geben Sie einen kundenorientierten Namen für Ihr Produkt ein und wählen Sie **Create**. Sie können diesen Namen später ändern.

   1. Notieren Sie sich die **Produkt-ID**. Sie werden sie verwenden, wenn Sie die Produktpreisdetails erstellen oder aktualisieren.
**Tipp**  
Wenn Sie Ihre Produkt-ID verlieren, finden Sie sie in der, AWS Marketplace Management Portal indem Sie im **Assets-Menü** die Option **Container** auswählen. Auf der Seite „**Container**“ wird eine Liste Ihrer Produkte mit dem zugehörigen Produkt angezeigt IDs.

1. Laden Sie das neueste öffentliche AWS SDK herunter und installieren Sie es dann in Ihrer Container-Anwendung. Installationsanweisungen für Ihr bevorzugtes AWS SDK finden Sie unter [Tools to Build on AWS](https://aws.amazon.com/tools/).
**Anmerkung**  
Um die License Manager Manager-API-Operationen von Amazon EKS Anywhere oder einem Kubernetes-Cluster aufzurufen, der nicht von bereitgestellt wird AWS, müssen Sie ein unterstütztes AWS SDK verwenden. Eine Liste der unterstützten SDKs finden Sie AWS SDKs unter [Ein unterstütztes AWS SDK verwenden](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html).

1. Erstellen Sie einen AWS License Manager Client mit einem benutzerdefinierten Anmeldeinformationsanbieter, sodass er Anmeldeinformationen für die sowohl lokal AWS als auch lokal bereitgestellte Containeranwendung bereitstellen kann. Den vollständigen Quellcode für einen benutzerdefinierten Anmeldeinformationsanbieter finden Sie in den `LicenseCredentialProvider` folgenden Abschnitten:
   + [`LicenseManagerCredentialsProvider`- Java-Implementierung](#container-license-manager-cred-provider-java)
   + [`LicenseManagerCredentialsProvider``Golang`- Implementierung](#container-license-manager-cred-provider-golang)

    `LicenseCredentialsProvider`erweitert die standardmäßige Anbieterkette für Anmeldeinformationen des AWS SDK für die lokale Verwendung um Folgendes: `LicenseManagerTokenCredentialsProvider` Dadurch werden Anmeldeinformationen mithilfe von License Manager OIDC ausgestellten Identitätstoken in lokalen Umgebungen bereitgestellt. Sie müssen den Quellcode für `LicenseCredentialsProvider` in den Klassenpfad Ihrer Anwendung aufnehmen.
**Anmerkung**  
`DefaultCredentialsProvider`Durch die Erweiterung kann dieselbe Containeranwendung Anmeldeinformationen abrufen, wenn sie in AWS und in einer lokalen Umgebung ausgeführt wird. Wenn die Containeranwendung bereits eine benutzerdefinierte Anbieterkette anstelle der Standardanbieterkette verwendet, kann sie auch erweitert werden, indem sie der benutzerdefinierten Kette `LicenseManagerTokenCredentialsProvider` hinzugefügt wird.

   Der folgende Codeausschnitt ist ein Beispiel für die Erstellung eines AWS License Manager Clients mit Java.

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

1. Rufen Sie den `CheckoutLicense` API-Vorgang auf, indem Sie den `aws license-manager checkout-license` Befehl für jedes kostenpflichtige Container-Image in Ihrem Produktangebot verwenden. Dadurch wird überprüft, ob der Käufer berechtigt ist, eine Lizenz für Ihre Anwendung zu verwenden. Wenn der Käufer Anspruch auf den Antrag hat, ist er `CheckoutLicense` erfolgreich und gibt die angeforderten Rechte und deren Wert zurück. Wenn der Käufer keinen Anspruch auf den Antrag hat, wird eine Ausnahme `CheckoutLicense` ausgelöst.

   Die folgenden Parameter sind beim Aufrufen des `CheckoutLicense` API-Vorgangs erforderlich:
   + `CheckoutType`— Die gültigen Werte sind `PROVISIONAL` oder`PERPETUAL`:
     + Verwenden Sie diese Option`PERPETUAL`, wenn die Anzahl der ausgecheckten Berechtigungen aus dem Pool erschöpft sein wird.

       Beispiel: Der Käufer ist berechtigt, 500 GB an Daten zu verarbeiten. Bei der weiteren Verarbeitung der Daten wird die Menge aus dem Pool von 500 GB entnommen und ausgeschöpft.
     + Wird `PROVISIONAL` für variable Lizenzberechtigungen verwendet, bei denen die Berechtigungen aus dem Pool ausgecheckt und nach Gebrauch zurückgegeben werden.

       Beispiel: Der Benutzer hat Anspruch auf 500 gleichzeitige Benutzer in der Anwendung. Wenn sich Benutzer an- oder abmelden, werden die Benutzer aus dem Pool von 500 Benutzern gezogen oder wieder aufgenommen. Weitere Informationen zu variablen Lizenzberechtigungen finden Sie unter[Flexible Lizenzberechtigungen mit License Manager](#container-LM-floating-license).
   + `ClientToken`— Eine eindeutige Kennung, bei der Groß- und Kleinschreibung berücksichtigt wird. Wir empfehlen, für jede eindeutige Anfrage eine zufällige UUID zu verwenden.
   + `Entitlements`— Eine Liste von Berechtigungen, die ausgecheckt werden müssen.
     + Geben Sie für Funktionsberechtigungen die `Unit` Eigenschaften `Name` und wie folgt an.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "None"
       }
       ```
     + Geben Sie für gezählte Berechtigungen die `Count` Eigenschaften `Name``Unit`, und wie folgt an.

       ```
       {
         "Name": "<Entitlement_Name>",
         "Unit": "<Entitlement_Unit>",
         "Value": <Desired_Count>
       }
       ```
   + `KeyFingerprint`— Der wichtigste Fingerabdruck für Lizenzen, die von AWS Marketplace uns ausgestellt wurden. `aws:294406891311:AWS/Marketplace:issuer-fingerprint` Durch die Verwendung dieses Schlüssel-Fingerabdrucks wird sichergestellt, dass die Lizenz von einer unzuverlässigen Stelle ausgestellt wurde AWS Marketplace und nicht von einer unzuverlässigen Stelle.
   + `ProductSKU`— Die Produkt-ID, die AWS Marketplace Management Portal in den vorherigen Schritten generiert wurde.

   Das folgende Snippet ist ein Beispiel für einen Aufruf unter Verwendung der `CheckoutLicense` API-Operation unter Verwendung von. 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"
   ```
**Anmerkung**  
Um Lizenzen zu überprüfen, benötigen Containeranwendungen ausgehenden Netzwerkzugriff, um License Manager verwenden zu können. Bei lokal bereitgestellten Anwendungen kann es zu einem unzuverlässigen oder langsamen ausgehenden Netzwerkzugriff kommen. Diese Anwendungen sollten angemessene Wiederholungsversuche beim Aufrufen von License Manager beinhalten. Weitere Informationen finden Sie unter [Bewährte Methoden für die Integration mit License Manager für lokale Bereitstellungen](#container-LM-best-practices-on-prem).

1. Rufen Sie den `CheckoutLicense` API-Vorgang in regelmäßigen Abständen auf, um etwaige Änderungen an den Kundenlizenzen aufgrund von Verlängerungen, Upgrades oder Stornierungen am zu ermitteln. AWS Marketplace Die Schrittfrequenz hängt von der Anwendung ab. Wir empfehlen, die Lizenzen einmal täglich zu überprüfen, damit Änderungen automatisch und ohne Eingreifen des Käufers übernommen werden.

   Eine lokal bereitgestellte Anwendung verfügt möglicherweise über einen unzuverlässigen ausgehenden Netzwerkzugriff, um die Lizenzen regelmäßig zu überprüfen. In solchen Fällen sollte die Anwendung zwischengespeicherte Lizenzen verwenden, um eine ausreichende Ausfallsicherheit zu gewährleisten. Weitere Informationen finden Sie unter [Bewährte Methoden für die Integration mit License Manager für lokale Bereitstellungen](#container-LM-best-practices-on-prem).

1. Nachdem Sie den `CheckoutLicense` Aufruf in Ihre Container-Anwendung integriert haben, erstellen Sie eine neue Version Ihres Docker-Container-Images mit den Änderungen.

1. Aktualisieren Sie das Helm-Diagramm Ihrer Anwendung, sodass ein Kubernetes-Secret als optionale Eingabe akzeptiert wird, das die Konfiguration für den Zugriff auf Lizenzen mit License Manager enthält. APIs Das Konfigurationsgeheimnis enthält ein von License Manager ausgestelltes Identitätstoken und eine AWS Identity and Access Management Rolle, die von dem zuvor beschriebenen Anbieter für benutzerdefinierte Anmeldeinformationen verwendet wird, um AWS Anmeldeinformationen für den Aufruf von License Manager abzurufen, APIs wenn die Containeranwendung lokal bereitgestellt wird. Fügen Sie außerdem den AWS-Region als Eingabe mit dem Standardwert hinzu. `us-east-1`

   Käufer, die die Container-Anwendung vor Ort einsetzen, können das Kubernetes-Geheimnis über das AWS Marketplace Einkaufserlebnis für Container-Produkte erstellen. Geben Sie den geheimen Namen von Kubernetes als Eingabe für den Befehl ein. `helm install` Das Konfigurationsgeheimnis ist im folgenden Format konfiguriert.

   ```
   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. Aktualisieren Sie die Vorlage für die Anwendungsbereitstellung im Helm-Diagramm für in integrierte Container-Images AWS License Manager , sodass sie Folgendes enthält:
   + Servicekonto für Pod — Das Servicekonto ist für Helm-Bereitstellungen auf Amazon EKS erforderlich. Es wird verwendet, um Berechtigungen zum Aufrufen von License Manager Manager-API-Vorgängen zu erhalten, indem IAM-Rollen für das Dienstkonto auf dem Container-Image eingerichtet werden. Weitere Informationen zu IAM-Rollen für Dienstkonten finden Sie unter [IAM-Rollen für](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) Dienstkonten.
   + Lizenzzugriff für lokale Bereitstellungen — Das geheime Lizenzkonfigurationsgeheimnis ist erforderlich, um Anmeldeinformationen und entsprechende Berechtigungen zum Aufrufen von License Manager Manager-API-Vorgängen für Helm-Bereitstellungen in lokalen Umgebungen bereitzustellen. Käufer werden das Lizenzgeheimnis anhand der Kundenerfahrung generieren und Helm zur Verfügung stellen. AWS Marketplace 

   Der folgende Codeausschnitt ist ein Beispiel für eine Bereitstellungsspezifikation mit dem Dienstkonto, der Lizenzkonfiguration und dem 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 }}
   ```
**Anmerkung**  
Das geheime Lizenzkonfigurationsgeheimnis ist optional. Käufer verwenden den Wert nur für Bereitstellungen vor Ort. Für AWS Bereitstellungen muss die Bereitstellungsspezifikation ein Dienstkonto für die integrierten License Manager Manager-Images enthalten.

1. Testen Sie die License Manager Manager-Integration lokal und auf Amazon EKS, indem Sie die Schritte in den folgenden Abschnitten ausführen:

   1. [Die License Manager Manager-Integration lokal testen](#container-testing-LM-integration-locally)

   1. [Testen der License Manager Manager-Integration auf Amazon EKS](#container-testing-LM-integration-EKS)

1. Nachdem Sie die License Manager Manager-Integration sowohl vor Ort AWS als auch vor Ort erfolgreich verifiziert haben, können Sie Ihre Container-Produktliste erstellen, indem Sie die Schritte unter befolgen. [Überblick: Erstellen Sie ein Container-Produkt](container-product-getting-started.md#create-container-product)

## Die License Manager Manager-Integration lokal testen
<a name="container-testing-LM-integration-locally"></a>

Sie können Minikube oder ein anderes Setup verwenden, um die License Manager Manager-Integration auf einem beliebigen Kubernetes-Cluster lokal zu testen. Stellen Sie sicher, dass der Kubernetes-Cluster über einen ausgehenden Internetzugang verfügt, um License Manager Manager-API-Operationen aufzurufen.

**Um eine License Manager Manager-Integration lokal zu testen**

1. Erstellen Sie eine Testlizenz in einem Testverkäuferkonto mit den gewünschten Berechtigungen. Informationen zum Einrichten einer Testlizenz finden Sie [CreateLicense](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html)in der *AWS License Manager API-Referenz.* Oder verwenden Sie das folgende Skript, um eine Testlizenz zu erstellen und anschließend einem Testkäuferkonto eine Lizenz zu gewähren, um die Lizenz zu nutzen. Das folgende Skript verwendet Anmeldeinformationen für das Testverkäuferkonto.

   ```
   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. Erstellen Sie ein Kubernetes-Secret mit dem Lizenz-Token und der IAM-Rolle und verwenden Sie dabei das zuvor definierte geheime Format. Verwenden Sie den License Manager `CreateToken` API-Vorgang, um ein Lizenztoken zu generieren. Verwenden Sie dann den `CreateRole` IAM-API-Vorgang, um eine IAM-Rolle mit Berechtigungen und einer Vertrauensrichtlinie zu erstellen. Sehen Sie sich das Beispiel im folgenden Skript an. Das folgende Skript verwendet Anmeldeinformationen für das Testkäuferkonto.

   ```
   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. Richten Sie einen beliebigen Kubernetes-Cluster ein, der außerhalb gehostet wird. AWS Testen Sie damit, ob die Containeranwendungen von anderen Umgebungen aus eine Verbindung zur AWS License Manager API herstellen können AWS und ob der Anbieter für benutzerdefinierte Anmeldeinformationen gut in die Anwendung integriert ist.

1. Stellen Sie das zuvor generierte Lizenz-Token und die IAM-Rolle im lokalen Kubernetes-Cluster bereit.

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

1. Stellen Sie Ihre Anwendung über Helm mit dem geheimen Namen als Eingabe bereit und stellen Sie sicher, dass die Anwendung License Manager Manager-API-Operationen aufrufen kann, um Berechtigungsprüfungen durchzuführen. Informationen zu Änderungen der Helm- und Bereitstellungsspezifikationen finden Sie in [Integration eines AWS Marketplace for Containers Anywhere-Produkts mit License Manager](#containers-anywhere-integrate-with-LM) Schritt 9 unter.

## Testen der License Manager Manager-Integration auf Amazon EKS
<a name="container-testing-LM-integration-EKS"></a>

Sie können die License Manager Manager-Integration auch auf Amazon EKS testen. Testen Sie, ob die Anwendung License Manager Manager-API-Operationen ohne den geheimen Lizenzkonfigurationsschlüssel aufrufen kann. Stellen Sie außerdem sicher, dass das Dienstkonto zur Einrichtung von IAM-Rollen für Dienstkonten (IRSA) und zur Bereitstellung relevanter Anmeldeinformationen für die Anwendung verwendet werden kann.

**Um eine License Manager Manager-Integration auf Amazon EKS zu testen**

1. Erstellen Sie eine Testlizenz in einem Testverkäuferkonto mit den gewünschten Berechtigungen. Informationen zur Einrichtung Ihrer Testlizenz finden Sie in der [CreateLicense API-Referenz](https://docs.aws.amazon.com/license-manager/latest/APIReference/API_CreateLicense.html) oder verwenden Sie das folgende Skript, um eine Lizenz zu erstellen und einem Testkäuferkonto eine Lizenz zu gewähren, um die Lizenz zu nutzen. Das folgende Skript verwendet Anmeldeinformationen für das Testverkäuferkonto.

   ```
   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. Erstellen Sie einen Amazon EKS-Testcluster mit den gewünschten Konfigurationen oder führen Sie die folgenden Befehle aus, um eine Standardkonfiguration zu verwenden.

   ```
   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. Erstellen Sie ein Dienstkonto für einen vorhandenen Cluster und ordnen Sie ihn einer IAM-Rolle zu. Der folgende Befehl erstellt eine IAM-Rolle mit der. `AWSLicenseManagerConsumptionPolicy` Anschließend fügt der Befehl es dem `test_sa` Servicekonto des Amazon EKS-Clusters hinzu, auf dem die integrierten License Manager Manager-Images bereitgestellt werden sollen. Dadurch kann das Dienstkonto die entsprechenden Anmeldeinformationen für den Aufruf von License Manager Manager-API-Vorgängen abrufen.

   ```
   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. Stellen Sie die Anwendung über Helm in dem Dienstkonto bereit, dem die IAM-Rolle aus dem vorherigen Befehl zugeordnet ist. Stellen Sie sicher, dass die Anwendung License Manager Manager-API-Operationen aufrufen kann, um Berechtigungsprüfungen durchzuführen.

## Flexible Lizenzberechtigungen mit License Manager
<a name="container-LM-floating-license"></a>

Bei Floating-Lizenzen wird, wenn sich Benutzer bei der Anwendung anmelden, eine Lizenz aus dem Pool verfügbarer Lizenzen abgerufen. Wenn sich Benutzer abmelden, werden die Lizenzen wieder dem Pool verfügbarer Lizenzen hinzugefügt.

Bei Floating-Lizenzen verwendet die Anwendung den `CheckoutLicense` API-Vorgang, um Berechtigungen aus dem Berechtigungspool auszuchecken, wenn die Ressource verwendet wird. Die Antwort auf den `CheckoutLicense` API-Vorgang beinhaltet ein Lizenzverbrauchstoken, das eine eindeutige Kennung für den Checkout darstellt. Mit dem Lizenzverbrauchstoken können zusätzliche Aktionen für die ausgecheckten Berechtigungen ausgeführt werden, z. B. sie wieder in den Lizenzpool eingecheckt oder das Auschecken verlängert werden.

Wenn die Ressource nicht mehr verwendet wird, verwendet die Anwendung den `CheckInLicense` API-Vorgang, um die Berechtigung wieder in den Pool einzuchecken.

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

Wenn das erneute Einchecken einer Lizenz in den Pool fehlschlägt, z. B. wenn die Anwendung während des Vorgangs abstürzt, wird die Berechtigung nach 60 Minuten automatisch wieder in den Pool eingecheckt. Wenn die Ressource länger als 60 Minuten genutzt wird, ist es daher eine bewährte Methode, die Berechtigung aus dem Pool auszuchecken. Verwenden Sie dazu den `ExtendLicenseConsumption` API-Vorgang, solange die Ressource verwendet wird.

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

## Bewährte Methoden für die Integration mit License Manager für lokale Bereitstellungen
<a name="container-LM-best-practices-on-prem"></a>

Bei der Bereitstellung von Containeranwendungen in einer lokalen Umgebung kann es zu einem unzuverlässigen ausgehenden Netzwerkzugriff kommen. Verwenden Sie die folgenden bewährten Methoden, um die Ausfallsicherheit zu erhöhen und Serviceunterbrechungen für Käufer aufgrund potenzieller Probleme aufgrund schlechter Internetkonnektivität zu vermeiden:
+ **Angemessener Wiederholungsversuch** — Vorübergehende Netzwerkprobleme können dazu führen, dass Ihre Anwendung keine Verbindung zu Ihnen herstellt. AWS License Manager Implementieren Sie Wiederholungsversuche für bis zu 30 Minuten mit exponentiellem Back-up. Dies kann helfen, kurzfristige Ausfälle oder Netzwerkprobleme zu vermeiden.
+ **Vermeiden Sie feste Grenzwerte** — Anwendungen, die in verbundenen Clustern bereitgestellt werden, können Lizenzen regelmäßig überprüfen, um festzustellen, ob Änderungen aufgrund von Upgrades oder Verlängerungen vorgenommen wurden. Bei unzuverlässigem ausgehendem Zugriff ist die Anwendung möglicherweise nicht in der Lage, diese Änderungen zu erkennen. Wann immer möglich, sollte die Anwendung verhindern, dass der Service für Käufer unterbrochen wird, weil Lizenzen nicht über den License Manager überprüft werden können. Wenn die Lizenz abläuft, können Anwendungen auf eine kostenlose Testversion oder eine Open-Source-Version zurückgreifen und sie können nicht überprüfen, ob eine Lizenz gültig ist.
+ **Kunden benachrichtigen** — Wenn Sie eine zwischengespeicherte Lizenz verwenden, wirken sich Änderungen an der Lizenz (einschließlich Verlängerungen oder Upgrades) nicht automatisch auf den laufenden Workload aus. Informieren Sie Ihre Kunden (dass sie vorübergehend wieder ausgehenden Zugriff auf die Anwendung zulassen müssen), damit die Anwendung ihre zwischengespeicherte Lizenz aktualisieren kann. Informieren Sie Kunden beispielsweise über die Anwendung selbst oder über die zugehörige Dokumentation. Ebenso sollten Sie Kunden, wenn Sie auf einen niedrigeren Funktionsumfang zurückgreifen, darüber informieren, dass ihre Rechte erschöpft sind oder die Lizenz abgelaufen ist. Anschließend können sie wählen, ob sie ein Upgrade oder eine Verlängerung durchführen möchten.

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

`LicenseCredentialsProvider`erweitert die standardmäßige Anbieterkette für Anmeldeinformationen des AWS SDK für die lokale Verwendung um Folgendes: `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`stellt Anmeldeinformationen mithilfe von License Manager OIDC ausgestellten Identitätstoken in lokalen Umgebungen bereit. Sie müssen den Quellcode für `LicenseCredentialsProvider` in den Klassenpfad Ihrer Anwendung aufnehmen.

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

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

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

public class LicenseManagerTokenCredentialsProvider implements AwsCredentialsProvider, SdkAutoCloseable {

    private final StsAssumeRoleWithWebIdentityCredentialsProvider credentialsProvider;
    private final RuntimeException loadException;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        private String systemProperty;
        private String defaultValue = null;

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

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

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

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

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

**`LicenseCredentialsProvider`**

`LicenseCredentialsProvider`erweitert die standardmäßige Anbieterkette für Anmeldeinformationen des AWS SDK für die lokale Verwendung um Folgendes: `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`stellt Anmeldeinformationen mithilfe von License Manager OIDC ausgestellten Identitätstoken in lokalen Umgebungen bereit. Sie müssen den Quellcode für `LicenseCredentialsProvider` in den Klassenpfad Ihrer Anwendung aufnehmen.

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

# Amazon SNS SNS-Benachrichtigungen für Containerprodukte
<a name="container-notification"></a>

Um Benachrichtigungen zu erhalten, können Sie die Themen des Amazon Simple Notification Service (Amazon SNS) abonnieren, die Ihnen bei der Produkterstellung zur AWS Marketplace Verfügung gestellt werden. Die Themen enthalten Benachrichtigungen über Änderungen an den Abonnements Ihrer Kunden für Ihre Produkte. Sie können diese Benachrichtigungen beispielsweise verwenden, um zu erfahren, wann Kunden ein privates Angebot annehmen. 

**Anmerkung**  
Während der Produkterstellung wird ein Amazon SNS SNS-Thema für Ihr Produkt erstellt. Um Benachrichtigungen zu abonnieren, benötigen Sie den Amazon-Ressourcennamen (ARN) des Amazon SNS-Themas (z. B.`arn:aws:sns:us-east-1:123456789012:aws-mp-subscription-notification-PRODUCTCODE`). Die ARN ist im Verkäuferportal für Serverprodukte nicht verfügbar. Wenden Sie sich an das [AWS Marketplace Betriebsteam](https://aws.amazon.com/marketplace/management/contact-us), um den ARN anzufordern.

Das folgende Amazon SNS SNS-Thema ist für Containerprodukte verfügbar:
+ [Amazon SNS SNS-Thema: `aws-mp-subscription-notification`](#container-sns-subscription-message-body)— Dieses Thema benachrichtigt Sie, wenn ein Käufer ein Produkt abonniert oder abbestellt. Dies ist für stündliche Preismodelle verfügbar, einschließlich stündlicher und stündlicher Preismodelle mit langfristiger Laufzeit.

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

Jede Nachricht im `aws-mp-subscription-notification` Thema hat das folgende Format.

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

Das *<action-name>* hängt von der Benachrichtigung ab. Mögliche Aktionen sind:
+ `subscribe-success`
+ `subscribe-fail`
+ `unsubscribe-pending`
+ `unsubscribe-success`

Das `offer-identifier` ist nur dann in der Benachrichtigung enthalten, wenn die Aktion `subscribe-success` oder ist`subscribe-fail`. Es ist nicht in Benachrichtigungen enthalten, wenn die Aktion `unsubscribe-pending` oder ist`unsubscribe-success`. Bei Angeboten, die vor Januar 2024 erstellt wurden, ist diese Kennung nur für private Angebote in der Benachrichtigung enthalten. Bei Angeboten, die im Januar 2024 und später erstellt wurden, ist diese Kennung in den Benachrichtigungen für alle Angebote enthalten, sowohl für private als auch für öffentliche Angebote.

Informationen zu Angebotstypen finden Sie in der Antwort von [DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity) oder unter der Sichtbarkeit eines Vertrags im [Dashboard für Vertragsverlängerungen](https://docs.aws.amazon.com//marketplace/latest/userguide/agreements-renewals-dashboard.html).

**Anmerkung**  
 Bei [DescribeEntity API](https://docs.aws.amazon.com//marketplace/latest/APIReference/work-with-private-offers.html#describe-entity) gilt: Wenn Sie AWS-Konto in der Targeting-Facette des Accounts eine Regel für dieses Angebot finden, handelt es sich um ein privates Angebot. Wenn es für dieses Angebot keine Regel für die Ausrichtung des Accounts AWS-Konto im Targeting-Bereich gibt, handelt es sich um ein öffentliches Angebot.

## Abonnieren einer Amazon SQS SQS-Warteschlange für das Amazon SNS SNS-Thema
<a name="subscribing-sqs-queue-to-sns-topic"></a>

Wir empfehlen, eine Amazon SQS SQS-Warteschlange für die bereitgestellten SNS-Themen zu abonnieren. Ausführliche Anweisungen zum Erstellen einer SQS-Warteschlange und zum Abonnieren der Warteschlange für ein Thema finden Sie unter [Amazon SQS SQS-Warteschlange für Amazon SNS abonnieren im *Amazon Simple* Notification](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html) Service Developer Guide.

**Anmerkung**  
Sie können nur AWS Marketplace SNS-Themen abonnieren, die zum Verkauf der AWS-Konto Produkte verwendet wurden. Sie können die Nachrichten jedoch an ein anderes Konto weiterleiten. Weitere Informationen finden Sie unter [Senden von Amazon SNS SNS-Nachrichten an eine Amazon SQS SQS-Warteschlange in einem anderen Konto](https://docs.aws.amazon.com/sns/latest/dg/sns-send-message-to-sqs-cross-account.html) im *Amazon Simple Notification Service Developer Guide*.

### Abfrage der SQS-Warteschlange auf Benachrichtigungen
<a name="polling-the-sqs-for-notifications"></a>

Nachdem Sie Ihre SQS-Warteschlange für ein SNS-Thema abonniert haben, werden die Nachrichten in SQS gespeichert. Sie müssen einen Dienst definieren, der die Warteschlange kontinuierlich abfragt, nach Nachrichten sucht und diese entsprechend verarbeitet.