Intégration de votre produit conteneur à l' AWS Marketplace Metering Service utilisation du AWS SDK pour Java - AWS Marketplace

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Intégration de votre produit conteneur à l' AWS Marketplace Metering Service utilisation du AWS SDK pour Java

L'exemple suivant décrit une implémentation qui utilise le AWS SDK for Java pour s'intégrer au MeterUsage fonctionnement du AWS Marketplace service de mesure. Consultez MeterUsageExemples Java pour plus de détails. La plupart des étapes suivantes s'appliquent quelle que soit la langue.

Exemple : intégration AWS Marketplace du service de mesure
  1. Connectez-vous à la Portail de gestion AWS Marketplace.

  2. Dans Ressources, choisissez Conteneurs pour commencer à créer un nouveau produit conteneur. La création du produit génère le code produit pour l'intégration du produit à votre image de conteneur. Pour plus d'informations sur les autorisations setting AWS Identity and Access Management (IAM), consultezAWS Marketplace autorisations de l'API de mesure et d'autorisation.

  3. Téléchargez le AWSJava publicSDK.

    Important

    Pour appeler les API opérations de mesure depuis Amazon Elastic Kubernetes Service EKS (Amazon), vous devez AWS SDK utiliser un cluster Amazon compatible et exécuter sur EKS un cluster Amazon exécutant Kubernetes 1.13 ou version ultérieure.

  4. Appelez l'MeterUsageopération depuis la tâche ou le module une fois par heure pour chaque dimension d'utilisation. L'APIopération accepte un enregistrement de mesure pour une combinaison unique de DimensionResource, etHour. La ressource est soit une tâche Amazon Elastic Container Service (AmazonECS), soit un EKS module Amazon.

    { "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. }
    Note

    Il est possible de rencontrer des problèmes transitoires lors de la connexion au AWS Marketplace Metering Service. AWS Marketplace recommande vivement d'implémenter des tentatives d'une durée maximale de 30 minutes, avec des interruptions exponentielles, afin d'éviter les pannes de courte durée ou les problèmes de réseau.

  5. Reconstruisez une nouvelle version de l'image de votre conteneur qui inclut l'MeterUsageappel, balisez le conteneur et envoyez-la vers n'importe quel registre Docker compatible avec Amazon ECS ou AmazonEKS, tel qu'Amazon Elastic Container Registry (AmazonECR). Si vous utilisez AmazonECR, assurez-vous que le compte qui lance la ECS tâche Amazon ou le EKS pod Amazon dispose d'autorisations sur le ECR référentiel Amazon. Sinon, l'opération échoue.

  6. Créez un IAMrôle qui autorise votre conteneur à appelerMeterUsage, comme défini dans l'exemple de code suivant. Vous devez fournir ce rôle AWS Identity and Access Management (IAM) dans le paramètre Task Role de la ECS tâche Amazon ou de la définition du EKS pod Amazon.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:MeterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  7. Créez une définition de ECS tâche Amazon ou d'un EKS module Amazon qui fait référence au conteneur intégré AWS Marketplace et au IAM rôle que vous avez créé à l'étape 6. Si vous souhaitez voir la journalisation, activez-la AWS CloudTrail dans la définition de la tâche.

  8. Créez un Amazon ECS ou un EKS cluster Amazon pour exécuter votre tâche ou votre pod. Pour plus d'informations sur la création d'un ECS cluster Amazon, consultez la section Création d'un cluster dans le manuel Amazon Elastic Container Service Developer Guide. Pour plus d'informations sur la création d'un EKS cluster Amazon (à l'aide de Kubernetes version 1.1.3.x ou ultérieure), consultez Création d'un cluster Amazon. EKS

  9. Configurez le EKS cluster Amazon ECS ou Amazon et lancez la définition de ECS tâche Amazon ou le EKS pod Amazon que vous avez créé à l'étape 8, dans la région us-east-1 AWS . Ce n'est que pendant ce processus de test, avant la mise en ligne du produit, que vous devez utiliser cette région.

  10. Lorsque vous obtenez une réponse valide MeterUsage pour chacune des dimensions publiées pour le produit, vous pouvez commencer à créer votre produit conteneur. Pour toute question, contactez l’équipe responsable des opérations vendeur AWS Marketplace.

MeterUsageExemples Java

Les exemples de code suivants utilisent le service AWS SDK for Java and AWS Marketplace Metering pour appeler l'MeterUsageopération.

L'exemple de code suivant appelle l'MeterUsageopération sans aucuneUsageAllocations.

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

L'exemple de code suivant appelle l'MeterUsageopération avecUsageAllocations.

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