场景如下:
/getStream
和 /deleteStream
。import re
from urllib import request
from chalice import Chalice, Response
from chalicelib.streamEngine import StreamEngine
app = Chalice(app_name='mux-streaming')
print(app, "chalice app")
# for testing purpose
@app.route('/', methods=['GET'], cors=True, authorizer=None)
def hello():
print("hello")
return "hello"
@app.route('/getStream', methods=['POST'], cors=True, authorizer=None)
def get_stream():
request = app.current_request.json_body
creatorID = request['creatorID']
streamName = request['streamName']
streamType = request['streamType']
streamer = StreamEngine()
return streamer.getStream(creatorID, streamName, streamType)
@app.route('/deleteStream', methods=['POST'], cors=True)
def delete_stream():
request = app.current_request.json_body
streamID = request['streamID']
stream = StreamEngine()
return stream.deleteStream(streamID)
获取
https://invoke-url/prod
:
{
"message": "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=asdf"
}
这毫无意义,因为我没有任何授权。
发布后
https://invoke-url/prod/getStream
:
{
"headers": {},
"multiValueHeaders": {},
"statusCode": 500,
"body": "{\"Code\":\"InternalServerError\",\"Message\":\"Unknown request.\"}"
}
为了确保 API Gateway 不是冒名顶替者,我用其他 lambda 尝试了它,它工作得很好。 任何帮助将不胜感激。谢谢
我对 Chalice 不太熟悉,但根据信息,我认为有一些事情正在发生。 当您部署 Chalice 应用程序时,它会生成基础设施和 API 网关资源以匹配 Lambda 注释。示例取自
Chalice 文档:
$ chalice deploy
Creating deployment package.
Creating IAM role: helloworld-dev
Creating lambda function: helloworld-dev
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:us-west-2:12345:function:helloworld-dev
- Rest API URL: https://abcd.execute-api.us-west-2.amazonaws.com/api/
因此,当您通过 ClickOps 调出 API 网关时,它可能与 Chalice 应用程序调出的内容完全不匹配,例如启用 Lambda 代理响应或 JWT 授权者。一个很好的例子是基本调用 URL。
在 GET https://invoke-url/prod 上:
当提供身份验证标头时,即使资源上的身份验证设置为(评论指出,当授权标头未传递时,它会给出“缺少身份验证令牌”。)
{"message": "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=asdf"}
NONE
此处
阅读更多相关信息)。当 API 请求尝试访问不存在的 APIGW 资源时,会出现“缺少身份验证令牌”响应。您正在运行
GET
命令,但 APIGW 控制台上没有列出 GET
资源。创建该资源并将身份验证设置为
NONE
后,您应该能够点击该资源。在 POST https://invoke-url/prod/getStream:
另外,您能详细说明一下以下内容的含义吗?{ "headers": {}, "multiValueHeaders": {}, "statusCode": 500, "body": "{\"Code\":\"InternalServerError\",\"Message\":\"Unknownrequest\"}"}```
这看起来像是 Lambda 中的运行时错误。 CloudWatch 中是否有任何可用日志显示堆栈跟踪或错误消息?
为了确保 API Gateway 不是冒名顶替者,我用其他 lambda 尝试了它,它工作得很好。任何帮助将不胜感激。谢谢