AWS Lambda - ›DAX -› DynamoDB: «У клиента нет разрешения на вызов конечных точек»

Мы пытаемся включить DAX для использования в наших лямбдах NodeJS. Мы создали VPC, добавили DAX и Lambda в VPC, но теперь, когда лямбда-функция выдает ошибку:

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 }

Это лямбда-код:

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


person Tomas Dermisek    schedule 10.01.2019    source источник
comment
Можете ли вы проверить, есть ли у вас какие-либо разрешения dax: для вашей политики, связанные с лямбда-функцией? Возможный дубликат: stackoverflow.com/questions/53733885/   -  person Abdelrahman Elhaddad    schedule 10.01.2019
comment
Возможно, вы имели в виду что-то вроде этого: {Action: [dax: *], Resource: [arn: aws: dax: ap-southeast-2: 887018866993: cache / *], Effect: Allow}   -  person Tomas Dermisek    schedule 11.01.2019
comment
@AbdelrahmanElhaddad Я нашел только документы о роли службы docs. aws.amazon.com/amazondynamodb/latest/developerguide/, но ни слова о разрешениях для фактической ламдбы, которая запускает код, который пытается подключиться к DAX.   -  person Tomas Dermisek    schedule 11.01.2019
comment
да. См. Раздел Политика IAM для разрешения доступа к кластеру DAX в связанном вами документе.   -  person Abdelrahman Elhaddad    schedule 11.01.2019
comment
Разрешения были настроены согласно док. Пока не повезло.   -  person Tomas Dermisek    schedule 16.01.2019


Ответы (1)


У меня была такая же проблема, и вот как я ее решаю. Есть 2 разрешения. DAX в DynamoDB и клиент для запуска операций CRUD.

Шаг 1. Удалите созданный вами кластер DAX. Вероятно, это было неисправно. Начнем с чистого кластера DAX.

Шаг 2. При создании кластера введите эти данные.

  • Роль службы IAM для доступа к DynamoDB - ›Создать
  • Имя роли IAM - ›введите новое уникальное имя роли, например jeffb-dax-09-role
  • Имя политики IAM - ›введите новое уникальное имя политики, например jeffb-dax-09-policy
  • Политика роли IAM - ›Чтение / запись
  • Целевая таблица DynamoDB - ›Все таблицы (настройте позже с помощью консоли IAM)

Шаг 3. Создайте еще одну роль с политикой AmazonDynamoDBFullAccess, назовите ее jeffb-Dynamodb-role

Шаг 4. Используйте jeffb-Dynamodb-role для роли в вашем клиенте.

У меня это сработало.

person Titi Wangsa bin Damhore    schedule 25.06.2020
comment
Никогда не используйте для этого политику AmazonDynamoDBFullAccess. Это ПУТЬ слишком широко. Всегда следует использовать новую политику IAM, управляемую клиентом. - person Kirk; 02.09.2020