2

我们正在尝试启用 DAX 以在我们的 NodeJS Lambda 中使用。我们已经创建了 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

4

1 回答 1

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”作为您客户端中的角色。

它对我有用。

于 2020-06-25T18:50:27.770 回答