AWS SAM вложенное приложение в Python с Dynamorm - PullRequest
1 голос
/ 10 февраля 2020

Я использую AWS SAM для создания приложения без сервера. Я следовал инструкции по созданию вложенного приложения .

Моя структура приложения в основном следующая:

.
├── MAKEFILE
├── README.md
├── __init__.py
├── apps
│   ├── __init__.py
│   ├── account
│   │   ├── __init__.py
│   │   ├── endpoints.py
│   │   ├── models.py
│   │   ├── requirements.txt
│   │   └── template.yaml
├── samconfig.toml
└── template.yaml

requirements.txt в папке apps/account/ содержит следующие python пакеты: boto3 marshmallow и dynamorm.

sam build и sam deploy работают нормально, и лямбда-функции развернуты правильно. Тем не менее я получаю сообщение об ошибке при вызове лямбда-функции. Журналы показывают следующую ошибку Unable to import module 'endpoints': No module named 'dynamorm'.

Вот выдержки из моего кода:

endpoints.py

import json
import boto3

from models import Account

print('Loading function')

def account_info(event, context):

    apiKey = event["requestContext"]["identity"]["apiKeyId"]

    account_info = Account.get(id= apiKey)

    return {
        "statusCode": 200,
        "body": json.dumps(account_info)
    }

models.py

import datetime

from dynamorm import DynaModel, GlobalIndex, ProjectAll

from marshmallow import Schema, fields, validate, validates, ValidationError

class Account(DynaModel):
    # Define our DynamoDB properties
    class Table:
        name = 'XXXXXXXXXX'
        hash_key = 'id'
        read = 10
        write = 5

    class Schema:
        id = fields.String(required=True)
        name = fields.String()
        email = fields.String()
        phonenumber = fields.String()
        status = fields.String()

Я не уверен, что мне не хватает? Существуют ли дополнительные инструкции по созданию вложенного приложения в SAM?

Большое спасибо за помощь!

1 Ответ

2 голосов
/ 12 февраля 2020

Согласно https://github.com/awslabs/aws-sam-cli/issues/1213, эта функция еще не поддерживается.

В моем случае я выполнял 'sam build' для каждого вложенного стека и исправлял родительский шаблон yaml следующим образом ( используйте template.yaml, сгенерированный командой sam build), затем работает. Но только обходной путь, а не хороший способ.

  XXX_APP:
    Type: AWS::Serverless::Application
    Properties:
      Location: nest_application/.aws-sam/build/template.yaml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...