View a markdown version of this page

SaaS 使用量ベースの料金条件を置き換え、 AWS SDK を使用して以前の契約をキャンセルする - AWS SDK コードの例

Doc AWS SDK Examples GitHub リポジトリには、他にも SDK の例があります。 AWS

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

SaaS 使用量ベースの料金条件を置き換え、 AWS SDK を使用して以前の契約をキャンセルする

次のコード例は、SaaS 使用量ベースの料金条件を置き換え、以前の契約をキャンセルする方法を示しています。

Java
SDK for Java 2.x
注記

GitHub には、その他のリソースもあります。AWS Marketplace API リファレンスコードライブラリリポジトリで完全な例を見つけて、設定と実行の方法を確認してください。

package com.example.awsmarketplace.agreementapi.buyer; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.marketplaceagreement.MarketplaceAgreementClient; import software.amazon.awssdk.services.marketplaceagreement.model.AcceptAgreementRequestRequest; import software.amazon.awssdk.services.marketplaceagreement.model.AcceptAgreementRequestResponse; import software.amazon.awssdk.services.marketplaceagreement.model.CreateAgreementRequestRequest; import software.amazon.awssdk.services.marketplaceagreement.model.CreateAgreementRequestResponse; import software.amazon.awssdk.services.marketplaceagreement.model.CancelAgreementRequest; import software.amazon.awssdk.services.marketplaceagreement.model.GetAgreementEntitlementsResponse; import software.amazon.awssdk.services.marketplaceagreement.model.Intent; import software.amazon.awssdk.services.marketplaceagreement.model.RequestedTerm; import utils.AgreementApiUtils; /** * Demonstrates how to create a SaaS agreement with usageBasedPricingTerm (UBPT) and then replace it * with a new offer using the AWS Marketplace Agreement Service APIs. * * <p>Scenario: A buyer subscribes to a SaaS product with UsageBasedPricingTerm. * The buyer then converts to a different offer by replacing the existing agreement. * * <p>Flow: * <ol> * <li>Create and accept the initial agreement request with UBPT.</li> * <li>Wait for entitlements to become active.</li> * <li>Replace the agreement with a new offer using Intent.REPLACE.</li> * <li>Cancel the new agreement using CancelAgreement.</li> * </ol> * * <p>Before running this sample, replace the placeholder constants below with values from * your AWS Marketplace offers: * <ul> * <li>{@code AGREEMENT_PROPOSAL_IDENTIFIER} — the agreementProposalId from the initial offer.</li> * <li>{@code NEW_AGREEMENT_PROPOSAL_IDENTIFIER} — the agreementProposalId from the new offer to replace to.</li> * <li>Term IDs (starting with {@code term-}) — found in each offer's term list.</li> * </ul> */ public class ReplaceSaaSUsageBasedPricingTermAndCancel { // The agreementProposalId from the initial offer. private static final String AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>"; // Term ID for the UsageBasedPricingTerm in the initial offer. private static final String USAGE_BASED_PRICING_TERM_ID = "<your-usage-based-pricing-term-id>"; // Term ID for the ValidityTerm in the initial offer. private static final String VALIDITY_TERM_ID = "<your-validity-term-id>"; // Term ID for the LegalTerm in the initial offer. private static final String LEGAL_TERM_ID = "<your-legal-term-id>"; // The agreementProposalId from the new offer to replace to. private static final String NEW_AGREEMENT_PROPOSAL_IDENTIFIER = "<your-new-agreement-proposal-identifier>"; // Term ID for the UsageBasedPricingTerm in the new offer. private static final String NEW_USAGE_BASED_PRICING_TERM_ID = "<your-new-usage-based-pricing-term-id>"; // Term ID for the ValidityTerm in the new offer. private static final String NEW_VALIDITY_TERM_ID = "<your-new-validity-term-id>"; // Term ID for the LegalTerm in the new offer. private static final String NEW_LEGAL_TERM_ID = "<your-new-legal-term-id>"; public static void main(String[] args) { replaceSaaSUbptAndCancel(); } /** * Full end-to-end flow: * 1. Create and accept the initial agreement request with UsageBasedPricingTerm. * 2. Wait for entitlements to become active. * 3. Replace the agreement with a new offer. * 4. Cancel the new agreement. */ private static void replaceSaaSUbptAndCancel() { MarketplaceAgreementClient marketplaceAgreementClient = MarketplaceAgreementClient.builder() .httpClient(ApacheHttpClient.builder().build()) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); RequestedTerm usageBasedPricingTerm = RequestedTerm.builder().id(USAGE_BASED_PRICING_TERM_ID).build(); RequestedTerm validityTerm = RequestedTerm.builder().id(VALIDITY_TERM_ID).build(); RequestedTerm legalTerm = RequestedTerm.builder().id(LEGAL_TERM_ID).build(); // --- Step 1: Create and accept the initial UBPT agreement request --- CreateAgreementRequestRequest createAgreementRequestRequest = CreateAgreementRequestRequest.builder() .clientToken(AgreementApiUtils.generateClientToken()) .intent(Intent.NEW) .requestedTerms(usageBasedPricingTerm, validityTerm, legalTerm) .agreementProposalIdentifier(AGREEMENT_PROPOSAL_IDENTIFIER) .build(); CreateAgreementRequestResponse createAgreementRequestResponse = marketplaceAgreementClient.createAgreementRequest(createAgreementRequestRequest); System.out.println("Agreement request with UBPT created. AgreementRequestId: " + createAgreementRequestResponse.agreementRequestId()); AcceptAgreementRequestRequest acceptAgreementRequestRequest = AcceptAgreementRequestRequest.builder() .agreementRequestId(createAgreementRequestResponse.agreementRequestId()) .build(); AcceptAgreementRequestResponse acceptAgreementRequestResponse = marketplaceAgreementClient.acceptAgreementRequest(acceptAgreementRequestRequest); System.out.println("Agreement request with UBPT accepted. AgreementId: " + acceptAgreementRequestResponse.agreementId()); // Wait for entitlements to become active before replacing. System.out.println("Waiting for entitlements to become active..."); GetAgreementEntitlementsResponse entitlementsResponse = AgreementApiUtils.pollUntilEntitlementsAvailable( marketplaceAgreementClient, acceptAgreementRequestResponse.agreementId()); System.out.println("Entitlements are now active."); AgreementApiUtils.formatOutput(entitlementsResponse); // --- Step 2: Replace the UBPT agreement with a new offer --- // Use Intent.REPLACE and sourceAgreementIdentifier to replace the existing agreement. RequestedTerm newUsageBasedPricingTerm = RequestedTerm.builder().id(NEW_USAGE_BASED_PRICING_TERM_ID).build(); RequestedTerm newValidityTerm = RequestedTerm.builder().id(NEW_VALIDITY_TERM_ID).build(); RequestedTerm newLegalTerm = RequestedTerm.builder().id(NEW_LEGAL_TERM_ID).build(); CreateAgreementRequestRequest carRequest = CreateAgreementRequestRequest.builder() .clientToken(AgreementApiUtils.generateClientToken()) .intent(Intent.REPLACE) .requestedTerms(newUsageBasedPricingTerm, newValidityTerm, newLegalTerm) .agreementProposalIdentifier(NEW_AGREEMENT_PROPOSAL_IDENTIFIER) .sourceAgreementIdentifier(acceptAgreementRequestResponse.agreementId()) .build(); CreateAgreementRequestResponse carResponse = marketplaceAgreementClient.createAgreementRequest(carRequest); System.out.println("Replace agreement request created. AgreementRequestId: " + carResponse.agreementRequestId()); AcceptAgreementRequestRequest aarRequest = AcceptAgreementRequestRequest.builder() .agreementRequestId(carResponse.agreementRequestId()) .build(); AcceptAgreementRequestResponse aarResponse = marketplaceAgreementClient.acceptAgreementRequest(aarRequest); final String agreementIdWithTheNewOffer = aarResponse.agreementId(); System.out.println("UBPT agreement replaced. New AgreementId: " + agreementIdWithTheNewOffer); // --- Step 3: Cancel the new agreement --- CancelAgreementRequest cancelAgreementRequest = CancelAgreementRequest.builder() .agreementId(agreementIdWithTheNewOffer) .build(); marketplaceAgreementClient.cancelAgreement(cancelAgreementRequest); System.out.println("The new agreement has been cancelled. AgreementId: " + agreementIdWithTheNewOffer); } }
  • API の詳細については、AWS SDK for Java 2.x 「 API リファレンス」の「CreateAgreementRequest」を参照してください。

JavaScript
SDK for JavaScript (v3)
注記

GitHub には、その他のリソースもあります。AWS Marketplace API リファレンスコードライブラリリポジトリで完全な例を見つけて、設定と実行の方法を確認してください。

const { MarketplaceAgreementClient, CreateAgreementRequestCommand, AcceptAgreementRequestCommand, CancelAgreementCommand, } = require("@aws-sdk/client-marketplace-agreement"); const { generateClientToken, formatOutput, pollUntilEntitlementsAvailable } = require("./utils/AgreementApiUtils"); /** * Demonstrates how to create a SaaS agreement with usageBasedPricingTerm (UBPT) and then replace it * with a new offer using the AWS Marketplace Agreement Service APIs. * * Scenario: A buyer subscribes to a SaaS product with UsageBasedPricingTerm. * The buyer then converts to a different offer by replacing the existing agreement. * * Flow: * 1. Create and accept the initial agreement request with UBPT. * 2. Wait for entitlements to become active. * 3. Replace the agreement with a new offer using Intent.REPLACE. * 4. Cancel the new agreement using CancelAgreement. * * Before running this sample, replace the placeholder constants below with values from * your AWS Marketplace offers: * - AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the initial offer. * - NEW_AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the new offer to replace to. * - Term IDs (starting with "term-") — found in each offer's term list. */ // The agreementProposalId from the initial offer. const AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>"; // Term ID for the UsageBasedPricingTerm in the initial offer. const USAGE_BASED_PRICING_TERM_ID = "<your-usage-based-pricing-term-id>"; // Term ID for the ValidityTerm in the initial offer. const VALIDITY_TERM_ID = "<your-validity-term-id>"; // Term ID for the LegalTerm in the initial offer. const LEGAL_TERM_ID = "<your-legal-term-id>"; // The agreementProposalId from the new offer to replace to. const NEW_AGREEMENT_PROPOSAL_IDENTIFIER = "<your-new-agreement-proposal-identifier>"; // Term ID for the UsageBasedPricingTerm in the new offer. const NEW_USAGE_BASED_PRICING_TERM_ID = "<your-new-usage-based-pricing-term-id>"; // Term ID for the ValidityTerm in the new offer. const NEW_VALIDITY_TERM_ID = "<your-new-validity-term-id>"; // Term ID for the LegalTerm in the new offer. const NEW_LEGAL_TERM_ID = "<your-new-legal-term-id>"; /** * Full end-to-end flow: * 1. Create and accept the initial agreement request with UsageBasedPricingTerm. * 2. Wait for entitlements to become active. * 3. Replace the agreement with a new offer. * 4. Cancel the new agreement. */ async function replaceSaaSUbptAndCancel() { const client = new MarketplaceAgreementClient(); const usageBasedPricingTerm = { id: USAGE_BASED_PRICING_TERM_ID }; const validityTerm = { id: VALIDITY_TERM_ID }; const legalTerm = { id: LEGAL_TERM_ID }; // --- Step 1: Create and accept the initial UBPT agreement request --- const createAgreementRequestResponse = await client.send( new CreateAgreementRequestCommand({ clientToken: generateClientToken(), intent: "NEW", requestedTerms: [usageBasedPricingTerm, validityTerm, legalTerm], agreementProposalIdentifier: AGREEMENT_PROPOSAL_IDENTIFIER, }) ); console.log("Agreement request with UBPT created. AgreementRequestId: " + createAgreementRequestResponse.agreementRequestId); const acceptAgreementRequestResponse = await client.send( new AcceptAgreementRequestCommand({ agreementRequestId: createAgreementRequestResponse.agreementRequestId, }) ); console.log("Agreement request with UBPT accepted. AgreementId: " + acceptAgreementRequestResponse.agreementId); // Wait for entitlements to become active before replacing. console.log("Waiting for entitlements to become active..."); const entitlementsResponse = await pollUntilEntitlementsAvailable(client, acceptAgreementRequestResponse.agreementId); console.log("Entitlements are now active."); formatOutput(entitlementsResponse); // --- Step 2: Replace the UBPT agreement with a new offer --- // Use Intent.REPLACE and sourceAgreementIdentifier to replace the existing agreement. const newUsageBasedPricingTerm = { id: NEW_USAGE_BASED_PRICING_TERM_ID }; const newValidityTerm = { id: NEW_VALIDITY_TERM_ID }; const newLegalTerm = { id: NEW_LEGAL_TERM_ID }; const carResponse = await client.send( new CreateAgreementRequestCommand({ clientToken: generateClientToken(), intent: "REPLACE", requestedTerms: [newUsageBasedPricingTerm, newValidityTerm, newLegalTerm], agreementProposalIdentifier: NEW_AGREEMENT_PROPOSAL_IDENTIFIER, sourceAgreementIdentifier: acceptAgreementRequestResponse.agreementId, }) ); console.log("Replace agreement request created. AgreementRequestId: " + carResponse.agreementRequestId); const aarResponse = await client.send( new AcceptAgreementRequestCommand({ agreementRequestId: carResponse.agreementRequestId, }) ); const agreementIdWithTheNewOffer = aarResponse.agreementId; console.log("UBPT agreement replaced. New AgreementId: " + agreementIdWithTheNewOffer); // --- Step 3: Cancel the new agreement --- await client.send( new CancelAgreementCommand({ agreementId: agreementIdWithTheNewOffer, }) ); console.log("The new agreement has been cancelled. AgreementId: " + agreementIdWithTheNewOffer); } replaceSaaSUbptAndCancel();
  • API の詳細については、AWS SDK for JavaScript 「 API リファレンス」の「CreateAgreementRequest」を参照してください。

Python
SDK for Python (Boto3)
注記

GitHub には、その他のリソースもあります。AWS Marketplace API リファレンスコードライブラリリポジトリで完全な例を見つけて、設定と実行の方法を確認してください。

""" Demonstrates how to create a SaaS agreement with usageBasedPricingTerm (UBPT) and then replace it with a new offer using the AWS Marketplace Agreement Service APIs. Scenario: A buyer subscribes to a SaaS product with UsageBasedPricingTerm. The buyer then converts to a different offer by replacing the existing agreement. Flow: 1. Create and accept the initial agreement request with UBPT. 2. Wait for entitlements to become active. 3. Replace the agreement with a new offer using Intent.REPLACE. 4. Cancel the new agreement using CancelAgreement. Before running this sample, replace the placeholder constants below with values from your AWS Marketplace offers: - AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the initial offer. - NEW_AGREEMENT_PROPOSAL_IDENTIFIER — the agreementProposalId from the new offer to replace to. - Term IDs (starting with term-) — found in each offer's term list. """ import boto3 from utils.agreement_api_utils import ( format_output, generate_client_token, poll_until_entitlements_available, ) class ReplaceSaaSUsageBasedPricingTermAndCancel: # The agreementProposalId from the initial offer. AGREEMENT_PROPOSAL_IDENTIFIER = "<your-agreement-proposal-identifier>" # Term ID for the UsageBasedPricingTerm in the initial offer. USAGE_BASED_PRICING_TERM_ID = "<your-usage-based-pricing-term-id>" # Term ID for the ValidityTerm in the initial offer. VALIDITY_TERM_ID = "<your-validity-term-id>" # Term ID for the LegalTerm in the initial offer. LEGAL_TERM_ID = "<your-legal-term-id>" # The agreementProposalId from the new offer to replace to. NEW_AGREEMENT_PROPOSAL_IDENTIFIER = "<your-new-agreement-proposal-identifier>" # Term ID for the UsageBasedPricingTerm in the new offer. NEW_USAGE_BASED_PRICING_TERM_ID = "<your-new-usage-based-pricing-term-id>" # Term ID for the ValidityTerm in the new offer. NEW_VALIDITY_TERM_ID = "<your-new-validity-term-id>" # Term ID for the LegalTerm in the new offer. NEW_LEGAL_TERM_ID = "<your-new-legal-term-id>" @staticmethod def replace_saas_ubpt_and_cancel(): """ Full end-to-end flow: 1. Create and accept the initial agreement request with UsageBasedPricingTerm. 2. Wait for entitlements to become active. 3. Replace the agreement with a new offer. 4. Cancel the new agreement. """ client = boto3.client("marketplace-agreement") cls = ReplaceSaaSUsageBasedPricingTermAndCancel usage_based_pricing_term = {"id": cls.USAGE_BASED_PRICING_TERM_ID} validity_term = {"id": cls.VALIDITY_TERM_ID} legal_term = {"id": cls.LEGAL_TERM_ID} # --- Step 1: Create and accept the initial UBPT agreement request --- create_response = client.create_agreement_request( clientToken=generate_client_token(), intent="NEW", requestedTerms=[usage_based_pricing_term, validity_term, legal_term], agreementProposalIdentifier=cls.AGREEMENT_PROPOSAL_IDENTIFIER, ) agreement_request_id = create_response["agreementRequestId"] print("Agreement request with UBPT created. AgreementRequestId: " + agreement_request_id) accept_response = client.accept_agreement_request( agreementRequestId=agreement_request_id ) agreement_id = accept_response["agreementId"] print("Agreement request with UBPT accepted. AgreementId: " + agreement_id) # Wait for entitlements to become active before replacing. print("Waiting for entitlements to become active...") entitlements_response = poll_until_entitlements_available(client, agreement_id) print("Entitlements are now active.") format_output(entitlements_response) # --- Step 2: Replace the UBPT agreement with a new offer --- # Use Intent.REPLACE and sourceAgreementIdentifier to replace the existing agreement. new_usage_based_pricing_term = {"id": cls.NEW_USAGE_BASED_PRICING_TERM_ID} new_validity_term = {"id": cls.NEW_VALIDITY_TERM_ID} new_legal_term = {"id": cls.NEW_LEGAL_TERM_ID} car_response = client.create_agreement_request( clientToken=generate_client_token(), intent="REPLACE", requestedTerms=[new_usage_based_pricing_term, new_validity_term, new_legal_term], agreementProposalIdentifier=cls.NEW_AGREEMENT_PROPOSAL_IDENTIFIER, sourceAgreementIdentifier=agreement_id, ) print("Replace agreement request created. AgreementRequestId: " + car_response["agreementRequestId"]) aar_response = client.accept_agreement_request( agreementRequestId=car_response["agreementRequestId"] ) agreement_id_with_new_offer = aar_response["agreementId"] print("UBPT agreement replaced. New AgreementId: " + agreement_id_with_new_offer) # --- Step 3: Cancel the new agreement --- client.cancel_agreement(agreementId=agreement_id_with_new_offer) print("The new agreement has been cancelled. AgreementId: " + agreement_id_with_new_offer) if __name__ == "__main__": ReplaceSaaSUsageBasedPricingTermAndCancel.replace_saas_ubpt_and_cancel()
  • API の詳細については、 AWS SDK for Python (Boto3) API リファレンスのCreateAgreementRequest」を参照してください。