AWS-лямбда в python: вызовы Dynamodb успешны в функции лямбда-обработчика, но не успешны вне функции-лямбда-обработчика - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть лямбда-функция в Python и DynamodB.Когда я выполняю вызов Dynamodb из функции-обработчика лямбды, этот вызов успешен.Но вызов Dynamodb вне функции-обработчика лямбды не успешен и дает исключение для отказа в доступе.

Допустим, у меня есть таблица «Список» в Dynamodb.Я поместил элемент в Dynamodb в функции-обработчике лямбда.Код работает нормально и элемент добавляется в БД.

#lambdaModule

import boto3
class LambdaFunction:
      def lambda_handler(self, event, context):     
           dynamodb = boto3.resource('dynamodb')
           table = dynamodb.Table('List')
           table.put_item(
                           Item={
                                  'username': 'janedoe',
                                  'first_name': 'Jane',
                                  'last_name': 'Doe',
                                  'age': 25,
                                  'account_type': 'standard_user',
                                }
                           )

Но когда я пытаюсь добавить элемент в базу данных из-за пределов лямбды, это дает мне ошибку отказа в доступе.

import boto3
class LambdaFunction:
      def lambda_handler(self, event, context):     
           #Some logic

      #Accessing dynamodb from outside of lambda function.
      dynamodb = boto3.resource('dynamodb')
           table = dynamodb.Table('List')
           table.put_item(
                           Item={
                                  'username': 'janedoe',
                                  'first_name': 'Jane',
                                  'last_name': 'Doe',
                                  'age': 25,
                                  'account_type': 'standard_user',
                                }
                           ) 

Над кодом выдается следующая ошибка отказа в доступе

"[ERROR] VerboseClientError: An error occurred (AccessDeniedException) on request (BA2U74TQ90HACN013TMF2BGEENVV4KQNSO5AEMVJF66Q9ASUAAJG) on table 
(dev02-up-svc-fss-stack-BlockLists-1DRNZPW6GRDV0) when calling the DescribeTable operation: Traceback (most recent call last):  File \
"/var/lang/lib/python3.7/imp.py\", line 234, in load_module    return load_source(name, filename, file)  File \"/var/la
ng/lib/python3.7/imp.py\", line 171, in load_source&nbsp;&nbsp;&nbsp;&nbsp;module = _load(spec)&nbsp;&nbsp;File \"<frozen importlib._bootstrap>\", line
 696, in _load&nbsp;&nbsp;File \"<frozen importlib._bootstrap>\", line 677, in _load_unlocked&nbsp;&nbsp;File \"<frozen importlib._bootstrap_external>\",
 line 728, in exec_module&nbsp;&nbsp;File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed&nbsp;&nbsp;File \"/var/task/score.py\",
 line 179, in <module>&nbsp;&nbsp;&nbsp;&nbsp;class ScoreService(Service):&nbsp;&nbsp;File \"/var/task/score.py\", line 180, in ScoreService&nbsp;&nbsp;&nbsp
 ;&nbsp;ent = _name_dob_list.match(\"first_name\", \"last_name\", \"2000-12-12\")&nbsp;&nbsp;File \"/var/task/lists.py\", line 449, in match&nbsp;&nbsp;&nbsp;
 &nbsp;obj = BlockLists.match(self.name, attribs, self.params_meta)&nbsp;&nbsp;File \"/var/task/lists.py\", line 359, in match&nbsp;&nbsp;&nbsp;&nbsp;params_a
 s_string)&nbsp;&nbsp;File \"/var/task/pynamodb/models.py\", line 485, in get&nbsp;&nbsp;&nbsp;&nbsp;hash_key, range_key = cls._serialize_keys(hash_key, range_k
 ey)&nbsp;&nbsp;File \"/var/task/pynamodb/models.py\", line 1372, in _serialize_keys&nbsp;&nbsp;&nbsp;&nbsp;hash_key = cls._hash_key_attribute().serialize(hash_k
 ey)&nbsp;&nbsp;File \"/var/task/pynamodb/models.py\", line 1219, in _hash_key_attribute&nbsp;&nbsp;&nbsp;&nbsp;hash_keyname = cls._get_meta_data().hash_keyname&n
 bsp;&nbsp;File \"/var/task/pynamodb/models.py\", line 1262, in _get_meta_data&nbsp;&nbsp;&nbsp;&nbsp;cls._meta_table = MetaTable(cls._get_connection().describe_ta
 ble())&nbsp;&nbsp;File \"/var/task/pynamodb/connection/table.py\", line 263, in describe_table&nbsp;&nbsp;&nbsp;&nbsp;return self.connection.describe_table(self.t
 able_name)&nbsp;&nbsp;File \"/var/task/pynamodb/connection/base.py\", line 659, in describe_table&nbsp;&nbsp;&nbsp;&nbsp;tbl = self.get_meta_table(table_name, ref

Я дал полный доступ к БД в файле template.yaml.

LambdaFunction:
      Type: AWS::Serverless::Function
      Properties:
        Handler: lambdaModule.lambda_handler
        Events:
          ScoreEvent:
            Type: Api 
            Properties:
              Path: /score
              Method: POST
              RestApiId: !Ref FraudScoreAPI
        Policies:
          - AmazonDynamoDBFullAccess
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...