Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Integrar su producto de contenedor mediante una medición personalizada con y AWS Marketplace Metering ServiceAWS SDK for Java
AWS Marketplace Los productos en contenedores pueden tener una medición personalizada en hasta 24 dimensiones de precios diferentes por producto. Para habilitar la medición personalizada, integre el producto de contenedor en el AWS Marketplace Metering Service. Puede definir sus propias unidades de precios y una medición personalizada para ese uso de AWS
para facturar mediante la operación de API MeterUsage
. El siguiente ejemplo describe una implementación que utiliza la AWS SDK for Java para integrarse con la operación del servicio MeterUsage
de AWS Marketplace medición.
Para ver todos los detalles, consulte Ejemplos de Java MeterUsage. Muchos de los siguientes pasos se aplican independientemente del lenguaje.
Ejemplo: integración del AWS Marketplace servicio de medición
-
Inicie sesión en la AWS Marketplace Management Portal
. -
En Recursos, elija Contenedores para comenzar a crear un nuevo producto de contenedor. Cuando se crea un producto, se genera un código para que dicho producto pueda integrarse con la imagen del contenedor. Para obtener información sobre cómo configurar los permisos AWS Identity and Access Management (IAM), consulte. AWS Marketplace permisos de API de medición y asignación de derechos
-
Descargue el AWS Java SDK
público. importante
Para llamar a las operaciones de la API de medición desde Amazon Elastic Kubernetes Service (Amazon EKS), debe usar un SDK de AWS compatible y ejecutarlo en un clúster de Amazon EKS que ejecute Kubernetes 1.13 o una versión posterior.
-
Llame la acción de
MeterUsage
desde la tarea o pod una vez cada hora para el uso de cada dimensión. La operación de la API acepta un registro de medición para una combinación única deDimension
,Resource
yHour
. El recurso es una tarea de Amazon Elastic Container Service (Amazon ECS) o un pod de Amazon EKS.{ "ProductCode" : "string", // (required) "UsageDimension" : "string", // (required) "UsageQuantity": int, // (optional) Default is 0. Acceptable value from [0, 2147483647 (INT_MAX)] "Timestamp": Date, // (required) Timestamp in UTC. Value can be one hour in the past. "UsageAllocations": List<UsageAllocation> // (optional) UsageAllocations across 1 or more tags. }
nota
Es posible detectar problemas transitorios al conectarse al. AWS Marketplace Metering Service AWS Marketplace recomienda encarecidamente implementar los reintentos durante un máximo de 30 minutos, con una reducción exponencial, para evitar interrupciones a corto plazo o problemas de red.
-
Vuelva a crear una nueva versión de la imagen de contenedor que incluya la llamada a
MeterUsage
, etiquete el contenedor y envíelo a cualquier registro de Docker que sea compatible con Amazon ECS o Amazon EKS, como Amazon Elastic Container Registry (Amazon ECR). Si utiliza Amazon ECR, asegúrese de que la cuenta que va a lanzar la tarea de Amazon ECS o el pod de Amazon EKS tiene permisos en el repositorio de Amazon ECR. De lo contrario, la operación no se llevará a cabo correctamente. -
Cree un rol de IAM
que conceda permiso al contenedor para llamar a MeterUsage
, tal y como se define en el siguiente ejemplo de código. Debe proporcionar esta función AWS Identity and Access Management (IAM) en el parámetro Función de tarea de la definición de la tarea de Amazon ECS o del pod de Amazon EKS.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:MeterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
-
Cree una definición de tarea de Amazon ECS o de pod de Amazon EKS que haga referencia al contenedor que se ha integrado AWS Marketplace y haga referencia a la función de IAM que creó en el paso 6. Si desea ver el registro, active el AWS CloudTrail registro en la definición de la tarea.
-
Cree un clúster de Amazon ECS o Amazon EKS para ejecutar la tarea o el pod. Para obtener más información acerca de cómo crear un clúster de Amazon ECS, consulte Creación de un clúster en la Guía para desarrolladores de Amazon Elastic Container Service. Para obtener más información acerca de la creación de un clúster de Amazon EKS (con Kubernetes versión 1.1.3.x o posterior), consulte Creación de un clúster de Amazon EKS.
-
Configure el clúster de Amazon ECS o Amazon EKS y lance la definición de tareas de Amazon ECS o el pod de Amazon EKS que creó en el paso 8, en la región AWS us-east-1. Es solo durante este proceso de prueba, antes de que el producto esté en funcionamiento, cuando debe utilizar esta región.
-
Cuando reciba una respuesta válida de
MeterUsage
para cada una de las dimensiones que se publican para el producto, puede comenzar a crear el producto contenedor. Si tiene alguna pregunta, póngase en contacto con el equipo de Operaciones de vendedores de AWS Marketplace.
Ejemplos de Java MeterUsage
Los siguientes ejemplos de código utilizan AWS Marketplace Metering Service para llamar a la MeterUsage
operación. AWS SDK for Java
El siguiente código de ejemplo realiza llamadas a la operación de MeterUsage
sin ningún 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); } }
El siguiente código de ejemplo realiza llamadas a la operación de MeterUsage
con UsageAllocations
.
private static String callMeterUsageWithAllocationsByTag(AWSMarketplaceMetering marketplaceMetering) { // Tag Keys for the product String tagKey1 = "Key1"; String tagKey2 = "Key2"; String tagKey3 = "Key3"; // 1st Usage Allocation bucket which has two Tags [{Key1, Key1Value1},{Key2, Key2Value1}] List<Tag> tagsForUsageAllocation1 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value1"), new Tag().withKey(tagKey2).withValue("Key2Value1")); UsageAllocation usageAllocation1 = new UsageAllocation() .withTags(tagsForUsageAllocation1) .withAllocatedUsageQuantity(20); // 2nd Usage Allocation bucket which has two Tags [{Key1, Key1Value2},{Key2, Key2Value1}] List<Tag> tagsForUsageAllocation2 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value2"), new Tag().withKey(tagKey2).withValue("Key2Value1")); UsageAllocation usageAllocation2 = new UsageAllocation() .withTags(tagsForUsageAllocation2) .withAllocatedUsageQuantity(20); // 3rd Usage Allocation bucket which has two Tags [{Key1, Key1Value2},{Key2, Key2Value2},{Key3, Key3Value1}] List<Tag> tagsForUsageAllocation3 = Arrays.asList(new Tag().withKey(tagKey1).withValue("Key1Value2"), new Tag().withKey(tagKey2).withValue("Key2Value2"), new Tag().withKey(tagKey3).withValue("Key3Value1")); UsageAllocation usageAllocation3 = new UsageAllocation() .withTags(tagsForUsageAllocation3) .withAllocatedUsageQuantity(15); // 4th Usage Allocation bucket with no tags UsageAllocation usageAllocation4 = new UsageAllocation() .withAllocatedUsageQuantity(15); List<UsageAllocation> usageAllocationList = Arrays.asList(usageAllocation1, usageAllocation2, usageAllocation3, usageAllocation4); MeterUsageRequest meterUsageRequest = new MeterUsageRequest() .withProductCode("TestProductCode") .withUsageDimension("Dimension1") .withTimestamp(new Date()) //UsageQuantity value must match with sum of all AllocatedUsageQuantity .withUsageQuantity(70) .withUsageAllocations(usageAllocationList); MeterUsageResult meterUsageResult; try { meterUsageResult = marketplaceMetering.meterUsage(meterUsageRequest); } catch (Exception e) { // Log Error throw e; } return meterUsageResult.getMeteringRecordId(); }