Внутренняя ошибка сервера в развернутом приложении Zappa

Мне удалось развернуть простое приложение hello world с помощью zappa, однако, когда я посещаю URL-адрес, приложение развертывается для всего, что я получаю:

{"message": "Внутренняя ошибка сервера"}

Когда я пытался запустить zappa tail production, я получаю сообщение об ошибке:

botocore.errorfactory.ResourceNotFoundException: произошла ошибка (ResourceNotFoundException) при вызове операции DescribeLogStreams: указанная группа журналов не существует.

Я запускаю windows 10, python 3.6 и zappa 0.45.1

Виртуальная среда использует:

argcomplete==1.9.2
base58==0.2.4
boto3==1.7.5
botocore==1.10.5
certifi==2018.4.16
cfn-flip==1.0.3
chardet==3.0.4
click==6.7
docutils==0.14
durationpy==0.5
Flask==0.12.2
future==0.16.0
hjson==3.0.1
idna==2.6
itsdangerous==0.24
Jinja2==2.10
jmespath==0.9.3
kappa==0.6.0
lambda-packages==0.19.0
MarkupSafe==1.0
placebo==0.8.1
python-dateutil==2.6.1
python-slugify==1.2.4
PyYAML==3.12
requests==2.18.4
s3transfer==0.1.13
six==1.11.0
toml==0.9.4
tqdm==4.19.1
troposphere==2.2.1
Unidecode==1.0.22
urllib3==1.22
virtualenv==15.2.0
Werkzeug==0.14.1
wsgi-request-logger==0.4.6
zappa==0.45.1

Мой app.py выглядит так:

from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET'])
def helloworld(event=None, context=None):

    return 'hello from Flask!'

if __name__ == '__main__':
    app.run()

мой zappa_settings.json:

{
    "production": {
        "app_function": "app.app",
        "aws_region": "us-west-2",
        "profile_name": "default",
        "project_name": "zappa-test",
        "runtime": "python3.6",
        "s3_bucket": "zappa-ds-app-0000",
        "manage_roles": false,
        "role_name":"zappa-datascience",
        "keep_warm": false
    }
}

person Josh Kidd    schedule 20.04.2018    source источник


Ответы (2)


Устранена проблема: apigateway не создавал группы журналов, потому что у него не было достаточных разрешений. Я добавил созданную мной роль zappa в AWS API Gateway> настройки, «CloudWatch log role ARN».

person Josh Kidd    schedule 25.04.2018

Вы сами управляете своими ролями. Почти наверняка вы не разрешили Заппе делать то, что ей нужно. По-видимому, у него нет разрешения на создание группы журналов, которую он хочет, в соответствии с соглашением об именах (IIRC) на основе имени каталога и имени профиля Zappa (production).

Если вы удалите manage_roles и role_name, вы получите пользователя со всеми разрешениями, которые нужны Zappa, а затем и некоторыми. Затем вы можете начать удалять их, пока не получите минимальный набор требований.

После некоторых проб и ошибок я обнаружил, что следующий минимальный набор является хорошим минимальным набором для базового приложения.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:CreateExportTask",
                "logs:PutDestination",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:xxxxxxxxxxxxxxxxxxxx:log-group:/aws/lambda/projectname-profilename:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:xxxxxxxxxxxxxxx:function:projectname-profilename"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Lambda также должна иметь возможность использовать этот профиль для запуска. Таким образом, вы также должны отредактировать свои доверительные отношения:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "s3.amazonaws.com",
          "events.amazonaws.com",
          "apigateway.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Если вам нужно поговорить с сервером базы данных, не забудьте также назначить VPC и группу безопасности.

person David Bruce Borenstein    schedule 21.04.2018