Integrieren Sie Ihr Container-Produkt mit der AWS Marketplace Metering Service Verwendung von AWS SDK for Java - AWS Marketplace

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.

Integrieren Sie Ihr Container-Produkt mit der AWS Marketplace Metering Service Verwendung von AWS SDK for Java

Das folgende Beispiel beschreibt eine Implementierung, die den AWS SDK for Java zur Integration in den AWS Marketplace Metering Service MeterUsage verwendet. Vollständige Details finden Sie unter MeterUsageJava-Beispiele. 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 an.

  2. 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 unterAWS Marketplace Mess- und Berechtigungs-API-Berechtigungen.

  3. Laden Sie das öffentliche AWSJava herunterSDK.

    Wichtig

    Um die API Messvorgänge von Amazon Elastic Kubernetes Service (AmazonEKS) aus aufzurufen, müssen Sie einen unterstützten AWS SDK und auf einem EKS Amazon-Cluster mit Kubernetes 1.13 oder höher ausführen.

  4. 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 DimensionResource, undHour. Die Ressource ist entweder eine Amazon Elastic Container Service (AmazonECS) -Aufgabe oder ein EKS Amazon-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.

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

  6. Erstellen Sie eine IAMRolle, die Ihrem Container die Berechtigung zum Aufrufen erteiltMeterUsage, wie im folgenden Codebeispiel definiert. Sie müssen diese Rolle AWS Identity and Access Management (IAM) im Parameter Task Role der ECS Amazon-Aufgaben- oder EKS Amazon-Pod-Definition angeben.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:MeterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  7. Erstellen Sie eine ECS Amazon-Aufgabe oder EKS Amazon-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.

  8. Erstellen Sie einen Amazon ECS - oder EKS Amazon-Cluster, um Ihre Aufgabe oder Ihren Pod auszuführen. Weitere Informationen zum Erstellen eines ECS Amazon-Clusters finden Sie unter Creating a Cluster im Amazon Elastic Container Service Developer Guide. Weitere Informationen zum Erstellen eines EKS Amazon-Clusters (mit Kubernetes Version 1.1.3.x oder höher) finden Sie unter Amazon-Cluster erstellen. EKS

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

  10. 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-Team.

MeterUsageJava-Beispiele

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

Im folgenden Codebeispiel wird die MeterUsage Operation ohne jegliche Angabe aufgerufenUsageAllocations.

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 aufgerufenUsageAllocations.

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