有人可以告诉我如何在AWS Lambda函数中访问AWS凭证吗?
我已经彻底搜索了互联网,但仍然没有找到任何帮助过我的东西。
我用Java编写函数。我想我应该可以使用HandleRequest
方法中的上下文对象访问凭据。
如果有帮助,我想调用DynamoDB客户端并将记录上传到数据库。
答案 0 :(得分:4)
我最近也遇到了同样的问题。 在我看来,这肯定是AWS的Java Lambda文档中的一个盲点。
假设您使用AWS SDK for Java Document API,Java中的这个片段应该适合您:
DynamoDB dynamodb = new DynamoDB(
new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider()));
主要内容是使用EnvironmentVariableCredentialsProvider访问所需的凭据以访问AWS Lambda容器中的其他AWS资源。 Lambda容器随附凭证作为环境变量,这足以检索它们。
注意:这会创建一个仅查看默认区域中的资源的DynamoDB实例。要为特定区域创建一个,请使用此(假设您要访问ap-northeast-1区域中的DynamoDB):
DynamoDB dynamodb = new DynamoDB(
Regions.getRegion(Regions.AP_NORTHEAST_1).createClient(
AmazonDynamoDBClient.class,
new EnvironmentVariableCredentialsProvider(),
new ClientConfiguration()));
答案 1 :(得分:2)
您的Lambda函数的权限由其执行的IAM角色控制。将Dynamo PutItem权限添加到当前角色,或者为此目的创建新角色。
在授予角色权限后,您不需要编写特殊代码来处理凭据,只需正常使用AWS SDK即可。例如:
var AWS = require("aws-sdk");
exports.handler = function(event, context) {
var dynamodb = new AWS.DynamoDB();
var putItemParams = {
"TableName": "Scratch",
"Item": {
"Id": {
"S": "foo"
},
"Text": {
"S": "bar"
}
}
};
dynamodb.putItem(putItemParams, function (err, response) {
if (err) {
context.fail("dynamodb.putItem failed: " + err);
} else {
context.succeed("dynamodb.putItem succeeded");
}
});
};
足以将项目放入具有正确角色权限的DynamoDB表中。
答案 2 :(得分:0)
添加@Gordon Tai的答案,使用当前的api使用AmazonDynamoDBClientBuilder,这看起来像:
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
DynamoDB dynamoDB = new DynamoDB(client);