AWS Lambda 自定义触发器
AWS Lambda custom triggers
谁能告诉我如何在 AWS Lambda 函数中访问 AWS 凭证?
我已经彻底搜索了互联网,但仍然没有找到任何对我有帮助的东西。
我正在 Java 中编写函数。我想我应该可以使用 HandleRequest
方法中的上下文对象访问凭据。
如果有帮助,我想调用 DynamoDB 客户端并将记录上传到数据库。
您的 Lambda 函数的权限由执行它的 IAM 角色控制。为当前角色添加 Dynamo PutItem 权限,或为此创建一个新角色。
给Role权限后,不需要写特殊的代码来处理凭据,正常使用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 table,并具有正确的角色权限。
我最近也遇到了同样的问题。
在我看来,这肯定是 Java 的 AWS Lambda 文档中的一个盲点。
Java 中的这段代码应该适合您,假设您使用的是 Java 文档 API 的 AWS 开发工具包:
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()));
添加到@Gordon Tai 的答案中,使用当前 api 使用 AmazonDynamoDBClientBuilder 看起来像:
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
DynamoDB dynamoDB = new DynamoDB(client);
谁能告诉我如何在 AWS Lambda 函数中访问 AWS 凭证?
我已经彻底搜索了互联网,但仍然没有找到任何对我有帮助的东西。
我正在 Java 中编写函数。我想我应该可以使用 HandleRequest
方法中的上下文对象访问凭据。
如果有帮助,我想调用 DynamoDB 客户端并将记录上传到数据库。
您的 Lambda 函数的权限由执行它的 IAM 角色控制。为当前角色添加 Dynamo PutItem 权限,或为此创建一个新角色。
给Role权限后,不需要写特殊的代码来处理凭据,正常使用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 table,并具有正确的角色权限。
我最近也遇到了同样的问题。 在我看来,这肯定是 Java 的 AWS Lambda 文档中的一个盲点。
Java 中的这段代码应该适合您,假设您使用的是 Java 文档 API 的 AWS 开发工具包:
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()));
添加到@Gordon Tai 的答案中,使用当前 api 使用 AmazonDynamoDBClientBuilder 看起来像:
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
DynamoDB dynamoDB = new DynamoDB(client);