2016-08-24 82 views
-1

我有一个罐子上传到AWS拉姆达但它不断抛出以下错误:没有发现AWS凭据错误

{ 
    "errorMessage": "java.lang.NullPointerException", 
    "errorType": "java.lang.NullPointerException", 
    "stackTrace": [ 
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:143)", 
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:132)", 
    "com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:99)", 
    "com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135)", 
    "com.amazonaws.http.AmazonHttpClient.getCredentialsFromContext(AmazonHttpClient.java:802)", 
    "com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:828)", 
    "com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:723)", 
    "com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:475)", 
    "com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:437)", 
    "com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:386)", 
    "com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:2074)", 
    "com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2044)", 
    "com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.putItem(AmazonDynamoDBClient.java:1580)", 
    "com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.doPutItem(PutItemImpl.java:85)", 
    "com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.putItem(PutItemImpl.java:41)", 
    "com.amazonaws.services.dynamodbv2.document.Table.putItem(Table.java:144)", 
    "augury.api.SaveAuguryApi.handleRequest(SaveAuguryApi.java:46)", 
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", 
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", 
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", 
    "java.lang.reflect.Method.invoke(Method.java:498)" 
    ] 
} 

和堆栈跟踪:

java.lang.NullPointerException: java.lang.NullPointerException 
java.lang.NullPointerException 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:143) 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:132) 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:99) 
    at com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135) 
    at com.amazonaws.http.AmazonHttpClient.getCredentialsFromContext(AmazonHttpClient.java:802) 
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:828) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:723) 
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:475) 
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:437) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:386) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:2074) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2044) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.putItem(AmazonDynamoDBClient.java:1580) 
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.doPutItem(PutItemImpl.java:85) 
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.putItem(PutItemImpl.java:41) 
    at com.amazonaws.services.dynamodbv2.document.Table.putItem(Table.java:144) 
    at augury.api.SaveAuguryApi.handleRequest(SaveAuguryApi.java:46) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 

END RequestId: b2b9807e-6a09-11e6-9873-2588e6cfa497 
REPORT RequestId: b2b9807e-6a09-11e6-9873-2588e6cfa497 Duration: 305.85 ms Billed Duration: 400 ms  Memory Size: 512 MB Max Memory Used: 61 MB 

,也是我的拉姆达Java代码:

package augury.api; 

import java.util.List; 

import org.apache.commons.lang3.StringUtils; 
import org.apache.log4j.Logger; 

import com.amazonaws.auth.profile.ProfileCredentialsProvider; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; 
import com.amazonaws.services.dynamodbv2.document.DynamoDB; 
import com.amazonaws.services.dynamodbv2.document.Item; 
import com.amazonaws.services.dynamodbv2.document.Table; 
import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 

import augury.pojo.AuguryResponse; 
import augury.pojo.AuguryResult; 

public class SaveAuguryApi implements RequestHandler<AuguryResult, AuguryResponse> { 

    // Initialize the Log4j logger. 
    static final Logger log  = Logger.getLogger(SaveAuguryApi.class); 

    static DynamoDB  dynamoDB = new DynamoDB(new AmazonDynamoDBClient(new ProfileCredentialsProvider())); 

    static String  tableName = "tarot_history"; 

    public AuguryResponse handleRequest(AuguryResult result, Context context) { 
     String userId = result.getUserId(); 
     List<Integer> tarotIds = result.getTarotIds(); 
     String createTime = result.getCreate_time(); 
     if (log.isDebugEnabled()) { 
      log.debug("requestId = " + context.getAwsRequestId() + ", userId = " + userId + ", tarotIds = " + tarotIds 
        + ", create_time = " + createTime); 
     } 
     if (StringUtils.isBlank(userId) || tarotIds == null || tarotIds.isEmpty() || StringUtils.isBlank(createTime)) { 
      return new AuguryResponse(400, "this request doesn't contain rightful parameters, please check log"); 
     } 

     Table table = dynamoDB.getTable(tableName); 
     Item item = new Item(); 
     item.withString("create_time", createTime); 
     item.withString("user_id", userId); 
     item.withList("tarot_ids", tarotIds); 
     item.withInt("id", 1); 
     table.putItem(item); 
     return new AuguryResponse(201, "tarot history created"); 
    } 

} 

我试过了,但我仍然找不到问题。我是aws lambda新手,我试图学习the link

+0

你的标题说,你得到一个“未找到凭据”的错误消息,但错误信息,你居然发布的是“空指针异常”。为什么你使用'ProfileCredentialsProvider'呢?您应该将IAM角色分配给Lambda函数,并让AWS SDK自动使用它。 –

+0

嗨,我想我已经将IAM角色添加到了Lambda中。如果我不使用ProfileCredentialsProvider,我如何通过lamdba函数向dynamodb插入文档? –

回答

2

您正在查看的示例假设您已将凭证属性保存到文件中,而您的Lambda环境中不会出现这种情况。要使用分配给lambda函数改变这个IAM角色:

static DynamoDB  dynamoDB = new DynamoDB(new AmazonDynamoDBClient(new ProfileCredentialsProvider())); 

要这样:

static DynamoDB  dynamoDB = new DynamoDB(new AmazonDynamoDBClient()); 
+0

谢谢你,顺便说一句,我发现如果我想要lambda putItem表在dynamodb,我需要添加一个角色与它的政策 –