部署的 Zappa 应用程序出现内部服务器错误
Internal Server Error on deployed Zappa app
我已经成功地使用 zappa 部署了一个简单的 hello world 应用程序,但是当我访问 URL 应用程序时,我得到的只是:
{"message": "Internal server error"}
当我尝试 运行 zappa tail production
时收到错误消息:
botocore.errorfactory.ResourceNotFoundException: An error occurred
(ResourceNotFoundException) when calling the DescribeLogStreams
operation: The specified log group does not exist.
我 运行宁 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
}
}
您正在管理自己的角色。几乎可以肯定,您没有授权 Zappa 做它需要做的事情。显然,它没有权限做的一件事是创建它想要的日志组,它遵循基于目录名称和 Zappa 配置文件名称 (production
) 的命名约定 (IIRC)。
如果删除 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 和安全组。
问题已解决,apigateway 没有创建日志组,因为它没有足够的权限。我添加了我在 AWS API 网关 > 设置中创建的 zappa 角色,"CloudWatch log role ARN".
我已经成功地使用 zappa 部署了一个简单的 hello world 应用程序,但是当我访问 URL 应用程序时,我得到的只是:
{"message": "Internal server error"}
当我尝试 运行 zappa tail production
时收到错误消息:
botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the DescribeLogStreams operation: The specified log group does not exist.
我 运行宁 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
}
}
您正在管理自己的角色。几乎可以肯定,您没有授权 Zappa 做它需要做的事情。显然,它没有权限做的一件事是创建它想要的日志组,它遵循基于目录名称和 Zappa 配置文件名称 (production
) 的命名约定 (IIRC)。
如果删除 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 和安全组。
问题已解决,apigateway 没有创建日志组,因为它没有足够的权限。我添加了我在 AWS API 网关 > 设置中创建的 zappa 角色,"CloudWatch log role ARN".