2016-08-24 4 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 

또한 내 람다 자바 코드 :

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 람다 새로운 그리고 난 당신이 당신의 람다 환경의 경우 될 수 없습니다 파일에 저장된 자격 증명 속성을 가지고 가정에서 당신이 찾고있는 the link

+0

당신의 제목은 당신이 "자격 증명을 찾을 수 없습니다"오류 메시지를 받고 있다고 말했습니다하지만 오류 메시지가 실제로 람다 기능 변경이 할당 된 IAM 역할을 사용하려면 게시 된 "널 포인터 예외"입니다. 왜'ProfileCredentialsProvider'를 사용하고 있습니까? 람다 함수에 IAM 역할을 할당하고 AWS SDK가이를 자동으로 사용하도록해야합니다. –

+0

안녕하세요, 저는 이미 람다에게 IAM 역할을하고 있다고 생각합니다. ProfileCredentialsProvider를 사용하지 않으면 어떻게 lamdba 함수로 dynamodb에 문서를 삽입 할 수 있습니까? –

답변

2

예로부터 배우려고 노력했다. 이에

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

:

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

감사합니다. 그리고 btw, 나는 람다가 dynamodb의 테이블에 putItem을 넣길 원한다면, 정책에 역할을 추가해야합니다. –