我正在尝试创建一个基于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秒。
答案 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角色