无法在AWS lambda函数中获取AmazonDynamoDBClient

时间:2016-09-08 08:00:57

标签: java amazon-web-services amazon-dynamodb aws-lambda amazon-kinesis

我正在尝试创建一个基于kinesis流中的记录来更新dynamodb表的lambda函数,它能够从流中正确地获取记录,但是不能获得awsclient,因此在dynamodb表中进行任何更改。 / p>

获取客户的代码:

AWSCredentials awsCreds = new BasicAWSCredentials("accessid", "accesskey");
AmazonDynamoDBClient  client = new AmazonDynamoDBClient(awsCreds).withRegion(Regions.US_WEST_2);
System.out.println("got the dbclient for uswest2");
DynamoDB dynamoDB = new DynamoDB(client);
//code to update tables in dynamodb

当我运行此代码以获取客户端并在我的系统中进行更改时,它正常工作,但在lambda内运行时,它没有到达确认客户端初始化的行。 我在try catch块中有这个部分,我没有得到任何异常,函数调用正在超时,我已经尝试将运行时设置为10秒。

1 个答案:

答案 0 :(得分:0)

对于lamdba功能,您的凭据可从EnvironmentVariableCredentialsProvider获得。 lambda容器直接附带您的凭据,您可以从环境变量

中检索它们

以下代码应该适合您

AWSCredentials awsCreds = new EnvironmentVariableCredentialsProvider().getCredentials();
AmazonDynamoDBClient client = new AmazonDynamoDBClient(awsCreds).withRegion(Regions.US_WEST_2);
System.out.println("got the dbclient for uswest2");
DynamoDB dynamoDB = new DynamoDB(client);
//code to update tables in dynamodb

甚至这个与另一个构造函数

AmazonDynamoDBClient client = 
    new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider());

确保在lambda配置中选择一个具有在dynamo上运行insert的必要权限的IAM角色

enter image description here