AWS Lambda-> DAX-> DynamoDB:'客户端没有调用端点的权限'

时间:2019-01-10 05:51:44

标签: aws-lambda amazon-dynamodb amazon-dynamodb-dax

我们正在尝试启用DAX以在我们的NodeJS Lambdas中使用。我们已经创建了VPC,并将DAX和Lambda添加到VPC中,但是现在当lambda函数引发错误时:

Failed to pull from xxxxx (xxx.xx.xx.122): { Error: Client does not have permission to invoke Endpoints
code: undefined,
retryable: false,
requestId: null,
statusCode: -1,
_tubeInvalid: true,
waitForRecoveryBeforeRetrying: false,
_message: 'Client does not have permission to invoke Endpoints',
codeSeq: [ 4, 23, 31, 34 ],
cancellationReasons: undefined }

这是Lambda代码:

const daxOptions = {
  endpoint: 'xxx.apse2.cache.amazonaws.com:8111',
  region: 'ap-southeast-2',
};
const daxClient = new AmazonDaxClient(daxOptions);
const dynamoDb = new DynamoDB.DocumentClient({ service: daxClient, convertEmptyValues: true });

...

const payload = {
  RequestItems: {
    ['tableName']: {
      Keys: items.map(itemId => ({
        id: itemId,
      })),
    },
  },
};
const response = await dynamoDb.batchGet(payload).promise();

DAX群集似乎运行良好。我们可以使用以下命令列出DAX群集:aws dax describe-clusters --r ap-southeast-2 --profile tst

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这就是我的解决方法。 涉及2个权限。 DAX到DynamoDB和客户端以运行CRUD操作。

步骤1.删除您创建的DAX群集。这可能是错误的。让我们从一个干净的DAX群集开始。

步骤2。创建集群时,输入以下详细信息

  • 用于DynamoDB访问的IAM服务角色->新建
  • IAM角色名称->输入新的唯一角色名称,也许是“ jeffb-dax-09-role”
  • IAM策略名称->输入新的唯一策略名称,也许是“ jeffb-dax-09-policy”
  • IAM角色策略->“读/写”
  • 目标DynamoDB表->所有表(稍后使用IAM控制台自定义)

步骤3.使用“ AmazonDynamoDBFullAccess”策略创建另一个角色,将其称为“ jeffb-dynamodb-role”

第4步。在客户端中使用“ jeffb-dynamodb-role”角色。

对我有用。