コンテナ製品をAWS Marketplace Metering Serviceを使用したの呼び出しAWSSDK for Java - AWS Marketplace

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンテナ製品をAWS Marketplace Metering Serviceを使用したの呼び出しAWSSDK for Java

次の例は、を使用する実装の概要を示しています。AWS SDK for Javaと統合するにはAWS MarketplaceMetering Service MeterUsageオペレーション. 詳細については、「」を参照してください。MeterUsageJava の例。次の手順の多くは、言語にかかわらず適用されます。

例: AWS Marketplace Metering Service の統合

  1. AWS Marketplace 管理ポータルにサインインします。

  2. 送信元アセット、選択コンテナをクリックして、新しいコンテナ製品の作成を開始します。製品を作成すると、製品とコンテナイメージを統合するための製品コードが生成されます。公開の詳細については、「コンテナ製品の公開」を参照してください。の設定についてはAWS Identity and Access Management(IAM) 権限、「」を参照してくださいAWS Marketplace での Metering API および Entitlement API のアクセス許可

  3. 公開 AWS Java SDK をダウンロードします。

    重要

    Amazon Elastic Kubernetes Service (Amazon EKS) から計測 API オペレーションを呼び出すには、次の操作を行う必要があります。サポートされるAWSSDKを実行して、Kubernetes 1.13 以降を実行している Amazon EKS クラスターで実行します。

  4. を呼び出します。MeterUsage各ディメンションの使用状況について、1 時間に 1 回ごとにタスクまたはポッドからオペレーションを実行します。API オペレーションは、の一意の組み合わせに対して 1 つの計測レコードを受け入れます。Dimension,Resource, およびHour。リソースは、Amazon Elastic Container Service (Amazon ECS) タスクまたは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. }
    注記

    接続時に一時的な問題が見られる可能性がありますAWS Marketplace Metering Service。AWS Marketplace短期間の停止やネットワークの問題を避けるために、指数関数的にバックオフした状態で最大 30 分間の再試行を実装することを強く推奨します。

  5. を含むコンテナイメージの新しいバージョンを再構築します。MeterUsageを呼び出し、コンテナにタグ付けして、Amazon ECS またはAmazon EKS と互換性がある任意の Docker レジストリにプッシュします。たとえば、Amazon Elastic Container Registry (Amazon ECR) にプッシュします。Amazon ECR を使用している場合は、Amazon ECS タスクまたはAmazon EKS ポッドを起動するアカウントに Amazon ECR リポジトリへのアクセス許可があることを確認します。それ以外の場合は、このオペレーションは失敗します。

  6. を作成するIAMルールをコンテナに呼び出すためのアクセス許可をコンテナに付与しますMeterUsage、次のコード例で定義されています。これを指定する必要がありますAWS Identity and Access Managementの (IAM) ロールタスクロールAmazon ECS タスクまたはAmazon EKS ポッド定義のパラメータ。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:MeterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  7. と統合されているコンテナを参照する Amazon ECS タスクまたはAmazon EKS ポッド定義を作成するAWS Marketplaceおよびは、ステップ 6 で作成した IAM ロールを参照します。ロギングを確認するには、を有効にします。AWS CloudTrailタスク定義にログオンします。

  8. Amazon ECS クラスターまたはAmazon EKS クラスターを作成して、タスクまたはポッドを実行します。Amazon ECS クラスター作成の詳細については、「」を参照してください。クラスターの作成Amazon Elastic Container Service。Amazon EKS クラスターの作成 (Kubernetes バージョン 1.1.3.x 以降を使用) の詳細については、「」を参照してください。Amazon EKS クラスターの作成

  9. Amazon ECS クラスターまたはAmazon EKS クラスターを設定し、ステップ 8 で作成した Amazon ECS タスク定義またはステップ 8 で作成した Amazon EKS ポッドを us-east-1 で起動します。AWSリージョン。製品が本番稼働になる前のこのテストプロセス中にのみ、このリージョンを使用する必要があります。

  10. から有効な回答が得られたときMeterUsageプロダクトに対して発行されるディメンションごとに、コンテナプロダクトの作成を開始することができます。ご質問がある場合は、AWS Marketplace Seller Operations チームまでお問い合わせください。

MeterUsageJava の例

次のコード例では、AWS SDK for Javaと AWS Marketplace Metering Service がMeterUsageオペレーション.

次のコード例では、を呼び出します。MeterUsage何もない操作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); } }

次のコード例では、を呼び出します。MeterUsageを使用したのオペレーション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 matach 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(); }