Intégration de votre produit en conteneur à l'aide d'un dosage personnalisé avec le et AWS Marketplace Metering ServiceAWS SDK for 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 en conteneur à l'aide d'un dosage personnalisé avec le et AWS Marketplace Metering ServiceAWS SDK for Java

AWS Marketplace les produits en conteneur peuvent être mesurés sur mesure pour un maximum de 24 dimensions de prix différentes par produit. Pour activer le comptage personnalisé, vous intégrez votre produit conteneur à AWS Marketplace Metering Service. Vous pouvez définir vos propres unités de tarification et des mesures personnalisées pour cette utilisation ou pour la facturation à AWS l'aide de l'opération MeterUsageAPI. 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 la définition des autorisations AWS Identity and Access Management (IAM), consultezAWS Marketplace autorisations de l'API de mesure et d'autorisation.

  3. Téléchargez le kit Java SDK AWS public.

    Important

    Pour appeler les opérations de l'API de mesure depuis Amazon Elastic Kubernetes Service (Amazon EKS), vous devez AWS utiliser un SDK compatible et exécuter sur un cluster Amazon EKS 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'opération d'API accepte un enregistrement de mesure pour une combinaison unique de DimensionResource, etHour. La ressource est soit une tâche Amazon Elastic Container Service (Amazon ECS), soit un pod Amazon EKS.

    { "ProductCode" : "string", // (required) "UsageDimension" : "string", // (required) "UsageQuantity": int, // (optional) Default is 0. Acceptable value from [0, 2147483647 (INT_MAX)] "Timestamp": Date, // (required) Timestamp in UTC. Value can be one hour in the past. "UsageAllocations": List<UsageAllocation> // (optional) UsageAllocations across 1 or more tags. }
    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 Amazon EKS, tel qu'Amazon Elastic Container Registry (Amazon ECR). Si vous utilisez Amazon ECR, assurez-vous que le compte qui lance la tâche Amazon ECS ou le pod Amazon EKS dispose d'autorisations sur le référentiel Amazon ECR. Sinon, l'opération échoue.

  6. Créez un rôle IAM 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 tâche Amazon ECS ou de la définition du pod Amazon EKS.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:MeterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  7. Créez une tâche Amazon ECS ou une définition de module Amazon EKS qui fait référence au conteneur intégré AWS Marketplace et au rôle IAM 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 cluster Amazon ECS ou Amazon EKS pour exécuter votre tâche ou votre pod. Pour plus d'informations sur la création d'un cluster Amazon ECS, 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 cluster Amazon EKS (à l'aide de Kubernetes version 1.1.3.x ou ultérieure), consultez Création d'un cluster Amazon EKS.

  9. Configurez le cluster Amazon ECS ou Amazon EKS et lancez la définition de tâche Amazon ECS ou le pod Amazon EKS 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 et 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(); }