You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用AWS Price List Service API获取数据报错,求Java SDK解决方案

Troubleshooting AWS Price List Service API Error in Java SDK

Hey Leo, sorry to hear you're hitting a snag with the AWS Price List Service API in your Java code. Let's walk through the most common issues that cause errors at the getProducts(request) call, along with fixes and examples to get you back on track.

Common Causes & Fixes

1. Missing or Incorrect IAM Permissions

The AWS Price List Service requires explicit IAM permissions to call pricing:GetProducts. If your IAM user/role doesn't have this permission, you'll get an AccessDeniedException.

Fix: Add this policy statement to your IAM entity's permissions:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "pricing:GetProducts",
            "Resource": "*"
        }
    ]
}

Double-check that you're not relying on EC2-only permissions—this API needs its own specific access.

2. Wrong Region Configuration

Unlike many AWS services, the Price List API is global but requires you to specify a supported region (most commonly us-east-1). If your client is configured with an unsupported region or no region at all, you'll get endpoint-related errors.

Fix: Ensure your client is initialized with a valid region for the Price List Service. For example:

AmazonPricing awsPricing = AmazonPricingClientBuilder.standard()
        .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
        .withRegion(Regions.US_EAST_1) // Critical for Price List API
        .build();

3. Malformed Request Parameters

From your code snippet, it looks like you're creating filters—but if you don't properly assemble them into the request, or use invalid filter fields/values, you'll get an InvalidParameterException.

Key Checks:

  • Make sure you add all filters to a list and attach it to the GetProductsRequest.
  • Verify the ServiceCode value is correct (e.g., "AmazonEC2" is valid, but typos like "AmazonEc2" will fail).
  • Ensure filter types are set to "TERM_MATCH" (the only supported type for most fields).

Example of a properly built request:

// Create filters
Filter serviceFilter = new Filter()
        .withType("TERM_MATCH")
        .withField("ServiceCode")
        .withValue("AmazonEC2");

Filter instanceTypeFilter = new Filter()
        .withType("TERM_MATCH")
        .withField("instanceType")
        .withValue("t2.micro");

// Add filters to list
List<Filter> filters = new ArrayList<>();
filters.add(serviceFilter);
filters.add(instanceTypeFilter);

// Build full request
GetProductsRequest request = new GetProductsRequest()
        .withServiceCode("AmazonEC2")
        .withFilters(filters)
        .withMaxResults(10); // Optional: limit output size

4. Outdated AWS Java SDK Version

If you're using an older version of the AWS Java SDK (v1), there might be API inconsistencies or bug fixes that address your error.

Fix: Update your SDK dependency to the latest stable version. For Maven, check your pom.xml:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-pricing</artifactId>
    <version>1.12.500</version> <!-- Use latest available version -->
</dependency>

5. Unhandled Exception Details

The most helpful step is to capture and inspect the full error message. Wrap your getProducts call in a try-catch block to see exactly what's going wrong:

try {
    GetProductsResult result = awsPricing.getProducts(request);
    // Process result
} catch (Exception e) {
    System.err.println("Full error message: " + e.getMessage());
    e.printStackTrace(); // Prints stack trace for deeper debugging
}

For example:

  • An AccessDeniedException points to permission issues.
  • An InvalidParameterValueException means your filter fields/values are incorrect.
  • An EndpointNotFoundException signals a bad region configuration.

Full Working Example

Here's a complete, tested code snippet you can compare against your implementation:

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.pricing.AmazonPricing;
import com.amazonaws.services.pricing.AmazonPricingClientBuilder;
import com.amazonaws.services.pricing.model.Filter;
import com.amazonaws.services.pricing.model.GetProductsRequest;
import com.amazonaws.services.pricing.model.GetProductsResult;

import java.util.ArrayList;
import java.util.List;

public class AwsPricingExample {
    public static void main(String[] args) {
        // Initialize Pricing client
        AmazonPricing awsPricing = AmazonPricingClientBuilder.standard()
                .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
                .withRegion(Regions.US_EAST_1)
                .build();

        // Build filters
        Filter serviceFilter = new Filter()
                .withType("TERM_MATCH")
                .withField("ServiceCode")
                .withValue("AmazonEC2");

        List<Filter> filters = new ArrayList<>();
        filters.add(serviceFilter);

        // Create request
        GetProductsRequest request = new GetProductsRequest()
                .withServiceCode("AmazonEC2")
                .withFilters(filters);

        try {
            GetProductsResult result = awsPricing.getProducts(request);
            System.out.println("Success! Retrieved " + result.getPriceList().size() + " product entries.");
        } catch (Exception e) {
            System.err.println("Error calling Price List API: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Start with checking the exception details first—it'll narrow down exactly which issue you're facing. If you share the specific error message, I can help dig deeper!

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:44