AWS Lambda自定义触发器
有人能告诉我如何访问AWS Lambda函数中的AWS凭证吗?AWS Lambda自定义触发器
我已经在互联网上彻底搜索过,但还没有找到任何帮助过我的东西。
我用Java编写函数。我想我应该可以使用HandleRequest
方法中的上下文对象访问凭据。
如果有帮助,我想调用DynamoDB客户端并将记录上载到数据库。
我最近自己也遇到了同样的问题。 在我看来,这当然是AWS的Lambda文档中的一个盲点。
这段代码在Java中应该为你工作,假设你正在使用AWS SDK的Java文档API:
DynamoDB dynamodb = new DynamoDB(
new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider()));
主要外卖是使用EnvironmentVariableCredentialsProvider访问所需的凭据来访问你的其他AWS Lambda容器内的AWS资源。 Lambda容器随环境变量一起提供证书,这足以检索它们。
注意:这将创建一个只能看到默认区域中的资源的DynamoDB实例。要创建一个特定的区域,用这个(假设你要访问DynamoDB的在AP-东北1区):
DynamoDB dynamodb = new DynamoDB(
Regions.getRegion(Regions.AP_NORTHEAST_1).createClient(
AmazonDynamoDBClient.class,
new EnvironmentVariableCredentialsProvider(),
new ClientConfiguration()));
是。就是这样。谢啦! –
您的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表中。
我建议使用https://github.com/awslabs/dynamodb-document-js-sdk而不是'DynamoDB'连接的'aws-sdk'。 – kixorz
添加到@Gordon泰的回答,用当前API使用AmazonDynamoDBClientBuilder这看起来像:
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
DynamoDB dynamoDB = new DynamoDB(client);
为什么不直接尝试不查找任何凭据?你已经在AWS上运行了,因此它应该推断你用来连接lambda的那个,所以它应该可以工作 – gerosalesc
你的意思就是调用。 DynamoDbClient client = new dynamoDbClient();然后是正常的东西。真的,这很容易吗?你能证实这一点吗? –
据我现在应该工作,但还没有尝试过,在过去 – gerosalesc