2017-06-15 33 views
0

我指的是下面的資源來創建一個應用程序,用於使用已經使用Amazon ML訓練過的模型進行實時預測。亞馬遜ML應用程序中的AmazonClientException

targeted-marketing-java

我已經替換爲模型的名稱的價值,我已經在我的AWS控制檯ML創建的端點。但是,當我執行的主要功能,我得到以下異常:

Exception in thread "main" com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain 
    at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117) 
    at com.amazonaws.services.machinelearning.AmazonMachineLearningClient.invoke(AmazonMachineLearningClient.java:1983) 
    at com.amazonaws.services.machinelearning.AmazonMachineLearningClient.getMLModel(AmazonMachineLearningClient.java:1585) 
    at ML.RealtimePredict.lookupEndpoint(RealtimePredict.java:58) 
    at ML.RealtimePredict.predict(RealtimePredict.java:45) 
    at ML.RealtimePredict.main(RealtimePredict.java:21) 

這是我使用的程序(JAVA):

package ML; 

import java.util.HashMap; 
import java.util.Map; 

import com.amazonaws.services.machinelearning.AmazonMachineLearningClient; 
import com.amazonaws.services.machinelearning.model.*; 

public class RealtimePredict { 
    public static void main(String[] args) { 
     String mlModelId = "ModelID--I provided this"; 

     RealtimePredict rtp = new RealtimePredict(mlModelId); 

     // Example meta-data and data 
     String metaData = "X1,X2"; 

     String data = "20,25"; 
     Map<String, String> record = rtp.parseArgs(
       metaData.trim().split(","), data.trim().split(",")); 
     PredictResult response = rtp.predict(record); 
     System.out.println(response); 
    } 

    private AmazonMachineLearningClient client; 
    private String mlModelId; 
    private String predictEndpoint; 

    public RealtimePredict(String mlModelId) { 
     client = new AmazonMachineLearningClient(); 
     this.mlModelId = mlModelId; 
    } 

    private Map<String, String> parseArgs(String[] metaData, String[] data) { 
     Map<String, String> record = new HashMap<>(); 

     for (int i = 0; i < (
       metaData.length < data.length ? metaData.length : data.length); i++) { 
      record.put(metaData[i].trim(), data[i].trim()); 
     } 
     return record; 
    } 

    private PredictResult predict(Map<String, String> record) { 
     lookupEndpoint(); 
     PredictRequest request = new PredictRequest() 
       .withMLModelId(mlModelId) 
       .withPredictEndpoint(predictEndpoint) 
       .withRecord(record); 
     return client.predict(request); 
    } 

    /** 
    * finds the realtime endpoint for this ML Model 
    */ 
    private void lookupEndpoint() { 
     GetMLModelRequest request = new GetMLModelRequest().withMLModelId(mlModelId); 
     GetMLModelResult model = client.getMLModel(request); 
     predictEndpoint = model.getEndpointInfo().getEndpointUrl(); 
    } 
} 

有人可以幫我解決這個問題。我認爲我需要提供訪問密鑰和安全密鑰。但我怎麼能做到這一點,我找不到什麼幫助。謝謝。

回答

0

Java代碼必須具有憑據才能夠調用AWS服務。它正在幾個地方搜索這些證書,直到它放棄並打印出上述例外。

請閱讀有關的不同位置本文檔設置這些憑據:http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

最好的做法是使用在當地發展缺省憑證輪廓文件,併爲實例/集裝箱/λ時IAM角色在雲中運行它。