【问题标题】:AWS Lambda custom triggersAWS Lambda 自定义触发器
【发布时间】:2018-06-01 19:24:53
【问题描述】:

谁能告诉我如何在 AWS Lambda 函数中访问 AWS 凭证?

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

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

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

【问题讨论】:

  • 你为什么不直接尝试而不寻找任何凭据?你已经在 AWS 上运行,因此它应该推断出你用来连接 lambda 的那些,所以它应该可以工作
  • 你的意思是打电话。 DynamoDbClient 客户端 = 新 dynamoDbClient();然后是正常的东西。真的,有那么容易吗?你能确认一下吗?
  • 就我现在应该可以工作,但过去没有尝试过
  • 顺便说一句,我发现您从 DynamoDB 触发器接收记录的另一个场景,也许这对您有用? stackoverflow.com/questions/31789078/…

标签: amazon-web-services aws-lambda


【解决方案1】:

我最近自己也遇到了同样的问题。 在我看来,这肯定是 AWS 的 Java Lambda 文档中的一个盲点。

假设您使用的是适用于 Java 文档 API 的 AWS 开发工具包,Java 中的这个 sn-p 应该适合您:

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()));

【讨论】:

    【解决方案2】:

    您的 Lambda 函数的权限由它执行的 IAM 角色控制。要么将 Dynamo PutItem 权限添加到当前角色,要么为此创建一个新角色。

    授予角色权限后,您无需编写特殊代码来处理凭证,只需正常使用 AWS 开发工具包即可。例如:

    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 表中。

    【讨论】:

    【解决方案3】:

    添加到@Gordon Tai 的答案,使用当前使用 AmazonDynamoDBClientBuilder 的 api,如下所示:

    AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
      .withCredentials(new EnvironmentVariableCredentialsProvider())
      .withRegion(Regions.US_EAST_1)
      .build();
    DynamoDB dynamoDB = new DynamoDB(client);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-11
      • 2020-05-17
      • 2019-07-02
      • 2019-03-26
      • 2018-06-17
      • 2020-07-28
      • 2018-02-16
      • 2022-01-12
      相关资源
      最近更新 更多