AWS Lambda自定义触发器

时间:2015-08-28 15:58:33

标签: amazon-web-services aws-lambda

有人可以告诉我如何在AWS Lambda函数中访问AWS凭证吗?

我已经彻底搜索了互联网,但仍然没有找到任何帮助过我的东西。

我用Java编写函数。我想我应该可以使用HandleRequest方法中的上下文对象访问凭据。

如果有帮助,我想调用DynamoDB客户端并将记录上传到数据库。

3 个答案:

答案 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权限添加到当前角色,或者为此目的创建新角色。

enter image description here

在授予角色权限后,您不需要编写特殊代码来处理凭据,只需正常使用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);