Как инициализировать «AWSPricing client» с помощью AWSPricingClientBuilder последнюю версию sdk?

#aws-java-sdk #restclientbuilder

#aws-java-sdk #restclientbuilder

Вопрос:

Моя задача — получить данные о ценах aws procuct, поэтому я делаю следующее:

  1. задайте переменные среды (AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY) введите описание изображения здесь

  2. заполните pom.xml (в Eclipse) с помощью кода:

 <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-pricing</artifactId>
    <version>1.11.513</version>
</dependency>
  
  1. затем я кодирую метод тестирования, подобный коду:
 public static void testDescribeServices() {
    System.out.println("nn begin ....");
    AWSPricing client = AWSPricingClientBuilder.standard().withRegion("us-east-1").build();
    System.out.println("step 0001");
    DescribeServicesRequest servicesRequest = new DescribeServicesRequest();
    servicesRequest.setServiceCode("AmazonEC2");
    DescribeServicesResult result = client.describeServices(servicesRequest);
    List<Service> serviceList = result.getServices();
}
  
  1. запустите метод testDescribeServices(), сообщение на консоли выглядит следующим образом: (Я был разочарован)
 begin ....
17:08:21.166 [main] DEBUG com.amazonaws.AmazonWebServiceClient - Internal logging successfully configured to commons logger: true
17:08:21.831 [main] DEBUG com.amazonaws.monitoring.CsmConfigurationProviderChain - Unable to load configuration from com.amazonaws.monitoring.EnvironmentVariableCsmConfigurationProvider@130d63be: Unable to load Client Side Monitoring configurations from environment variables!
17:08:21.831 [main] DEBUG com.amazonaws.monitoring.CsmConfigurationProviderChain - Unable to load configuration from com.amazonaws.monitoring.SystemPropertyCsmConfigurationProvider@42a48628: Unable to load Client Side Monitoring configurations from system properties variables!
17:08:21.831 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Closing connections idle longer than 60000 MILLISECONDS
17:08:21.839 [main] DEBUG com.amazonaws.monitoring.CsmConfigurationProviderChain - Unable to load configuration from com.amazonaws.monitoring.ProfileCsmConfigurationProvider@689604d9: The 'default' profile does not define all the required properties!
Exception in thread "main" java.lang.NoSuchMethodError: com.amazonaws.client.AwsSyncClientParams.getAdvancedConfig()Lcom/amazonaws/client/builder/AdvancedConfig;
    at com.amazonaws.services.pricing.AWSPricingClient.<init>(AWSPricingClient.java:158)
    at com.amazonaws.services.pricing.AWSPricingClient.<init>(AWSPricingClient.java:142)
    at com.amazonaws.services.pricing.AWSPricingClientBuilder.build(AWSPricingClientBuilder.java:61)
    at com.amazonaws.services.pricing.AWSPricingClientBuilder.build(AWSPricingClientBuilder.java:27)
    at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
    at com.yunion.apps.metadata.TestAWSDemoAPI.testDescribeServices(TestAWSDemoAPI.java:31)
    at com.yunion.apps.metadata.TestAWSDemoAPI.main(TestAWSDemoAPI.java:26)
  

Комментарии:

1. Кто-нибудь сталкивался с таким же вопросом?

Ответ №1:

попробовав некоторые настройки, я добился некоторого прогресса, и новый метод :

 public static void testDescribeServices(String accessKey, String secretKey) {
    BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);
    AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(basicAWSCredentials);
    AWSPricingClientBuilder builder = AWSPricingClientBuilder.standard();
    builder.setCredentials(credentialsProvider);
    builder.withRegion("us-east-1");
    CsmConfigurationProvider csmConfigurationProvider = new EnvironmentVariableCsmConfigurationProvider();
    builder.setClientSideMonitoringConfigurationProvider(csmConfigurationProvider);
    System.out.println("step 0001");
    AWSPricing awsPricing = builder.build();
    System.out.println("step 0002");
    DescribeServicesRequest servicesRequest = new DescribeServicesRequest();
    servicesRequest.setServiceCode("AmazonEC2");
    System.out.println("step 0003");
    DescribeServicesResult result = awsPricing.describeServices(servicesRequest);
    System.out.println("nn step 0004");
    List<Service> serviceList = result.getServices();
    System.out.println("nn step 0005");
}
  

Однако результатом является

 Exception in thread "main" com.amazonaws.services.pricing.model.AWSPricingException: User: arn:aws:iam::285906155448:user/dev1 is not authorized to perform: pricing:DescribeServices **(Service: AWSPricing; Status Code: 400; Error Code: AccessDeniedException; Request ID: 13155463-4198-11e9-8f92-f1f731c320f2)**