簡體   English   中英

AWS Lambda -> DAX -> DynamoDB:“客戶端無權調用端點”

[英]AWS Lambda -> DAX -> DynamoDB: 'Client does not have permission to invoke Endpoints'

我們正在嘗試啟用 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

我遇到了同樣的問題,這是我解決它的方法。 涉及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”。

它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM