问题标签 [chalice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2082 浏览

aws-api-gateway - 使用 Chalice 创建的 Api 和 Cognito 授权方返回“未授权”

我正在尝试使用 AWS Chalice 的内置登录对话框集成 Cognito。这是我尝试过的:

第二种方法(test2)有效,但第一种方法(test)返回(如预期的那样):

现在我尝试通过传入一个标头来使授权测试工作:

我可以手动验证 JWT 令牌内容和签名,并且用户池在 API Gateway 中显示为测试资源的“授权”,但我仍然收到相同的“未授权”消息。我错过了什么?

(注意:我也在https://forums.aws.amazon.com/message.jspa?messageID=871715#871715上发布了此内容,但 2 天内没有收到任何回复)

0 投票
1 回答
2569 浏览

python - 使用 Chalice 时无法访问请求 json_body

我正在尝试向使用 AWS 包 Chalice 的 python api 发出 curl 请求。

当我尝试访问app.current_request.json_bodyJSON Parse 时抛出错误。无法弄清楚为什么会这样。据我所知,我的 JSON 格式正确。

这是卷曲请求:

这是python圣杯代码:

当我使用上述curl请求调用路由时,出现以下错误:

{"error": "BadRequestError: Error Parsing JSON"}

注意:当我.json_bodyapp.current_request. 我不再得到错误。

有什么想法吗?

0 投票
2 回答
1431 浏览

python - pip install urllib3 挂在“由于 etag 缓存”

urllib3 的 Pip 安装挂在“由于 etag 缓存”上。我正在构建一个不允许您指定 --no-cache-dir 的 AWS chalice 项目,因此我需要在没有该命令的情况下解决该问题。有任何想法吗?

在虚拟环境中使用 Python 3.6.5 和 Pip 10.0.1。

编辑:根据其中一条评论,curl -vvv https://files/pythonhosted.org/返回:

0 投票
1 回答
523 浏览

amazon-web-services - 使用 Chalice 向 AWS API Gateway 响应添加标头

我的用例要求我的应用在错误响应为 401 时返回 CORS 标头。

AWS 去年添加了此功能(请参阅此内容)。可以使用 Cloudformation 和 Swagger 模板来完成,但我不确定是否可以使用 Chalice。

0 投票
0 回答
171 浏览

python - 如何使用 Chalice 和 Boto3 显示项目 dynamodb

我在连接 Dynamodb 并尝试在 Chalice 响应中显示项目时遇到问题。

当我访问该链接时,我的 API 显示此错误: {"Message": "An internal server error occurred.", "Code": "InternalServerError"}

无论如何我尝试更改代码,但是当它在控制台上输出时,代码运行正常,显示名称。

我的代码:

我希望输出显示名称。

0 投票
2 回答
726 浏览

python - 如何从 chalice 应用程序调用 sagemaker xgboost 端点?

我构建了一个托管在 s3 存储桶中并调用 xgboost 端点的 chalice Web 应用程序。通过网络应用程序调用模型时,我不断收到错误消息。当我查看 Lambda 日志文件时,我发现我的输入没有正确解码。input_text = app.current_request.raw_body.decode()什么是从二进制解码输入的正确代码,以便我可以将常规字符串传递给我的端点?

这是错误:

botocore.errorfactory.ModelError:调用 InvokeEndpoint 操作时发生错误 (ModelError):收到来自模型的客户端错误 (415),消息“无法将字符串转换为浮点数:user_input=1%”。

这是我的 index.html 文件:

这是我的 app.py 文件:

我应该能够传入这样的字符串:

'1,4,26,0.076923077,2,3,1,0.611940299,0.7818181820000001,0.40376569,0.571611506,0.12,12,1,0.0,2,1.0,1,2,6,3,1,1,1,1 ,1,3,1,0.000666667,1,1,2,2,-1.0,0.490196078,-1.0,0.633928571,6.0,145,2,2,1,3,2,2,1,3,2,3 ,3,-1.0,1,3,1,1,2,1,2,3,1,3,3,1,3,2,3,-1.0,3,3,1,2,2,1 ,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,3,0.3497921158934803,0'

并得到这样的输出:

'5'

当我在 jupyter 笔记本中运行它时,它可以工作。

0 投票
1 回答
418 浏览

python - 如何使用 Python 和 Chalice 库修改/替换 S3 图像?

我正在编写一个 lambda 函数,每次用户将图像上传到 S3 时都会触发该函数。该函数的主要目的是压缩图像,也可能在此过程中对其进行重命名。实现这一点,函数是取新上传的图片,压缩,上传新压缩的图片,删除原文件:

因此,如果我上传一个名为sample.pngS3 的图像,它会被压缩并重命名为sample.jpg; 并且sample.png之后会被删除。

然而,问题在于该解决方案将导致无限递归。原因是压缩图像的上传会再次调用lambda函数,从而导致再次下载,从而压缩已经压缩的图像,从而再次上传。无穷无尽。

我的一个朋友提出了两种可能的解决方案:通过将压缩图像的名称存储在单独的 S3 存储桶文件中的某个位置来缓存它们,并防止缓存的文件名被多次上传;并修改压缩图像的 exif/metada,以便 lambda 可以判断哪些文件已被压缩,指示该函数不应继续执行,这将防止再次发生压缩。

第一个想法很容易出现多个文件同时上传到服务器时可能出现的问题,至少从理论上讲。第二个想法可能需要第三方库,例如piexif,但这是我目前正在考虑的。

你有更好的方法来解决这个问题吗?还是我什至一开始就在做压缩的事情(除了递归上传和下载)?我的意思是,也许我可以压缩 S3 图像而无需执行下载-压缩-上传-删除例程。

0 投票
1 回答
2244 浏览

aws-lambda - 在 AWS Lambda Chalice 中为 JSON 文件设置环境变量

我正在处理一些Kaggle项目。在我的笔记本电脑上使用BigQuery的Python 库,我可以在通过环境变量传递身份验证凭据GOOGLE_APPLICATION_CREDENTIALS后成功下载数据集。如文档所述,此环境变量指向包含凭据的 JSON 文件的位置。

现在我想使用Chalice在Amazon Lambda上运行此代码。我知道 Chalice 中有一个环境变量选项,但我不知道如何在 Chalice 应用程序中包含 JSON 文件并将其位置作为环境变量传递。此外,我不确定在 Chalice 中将凭证作为 JSON 文件传递​​是否安全。

有没有人对如何将 Google 凭据作为 Chalice 应用程序的环境变量传递一些经验?

0 投票
1 回答
546 浏览

python - Pony ORM - 解决“预期的字符串或类似字节的对象”错误

我目前正在用 Python 中的 Chalice 为 AWS 开发一个 API,它使用 Pony ORM 来处理我们的数据库。当尝试使用这样的选择进行查询时,db.select(s.start_time for s in db.Session)我收到“预期的字符串或类似字节的对象”错误(下面的完整堆栈跟踪)。但是使用这样的 lambda 查询db.Session.select(lambda s: s.id = 3)按预期工作。我不知道可能是什么原因造成的,猜测是生成时不喜欢 db.Provider 部分,但我不确定 Pony 期望在那里。我尝试使用 pdb 进行调试,但我不确定它是什么告诉我。

堆栈跟踪:

Traceback(最近一次调用最后一次):文件“c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\chalice\app.py”,第 842 行,在 _get_view_function_response response = view_function(**function_args) 文件中“C:\Users\Gamer\Documents\AWS-SakMed\backend\SakMed\app.py”,第 51 行,在 _view_function 中返回包装的(*args,**kwargs)文件“”,第 2 行,在 get_cases 文件中“c :\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py”,第 528 行,在 new_func 结果 = func(*args, **kwargs) 文件“C:\Users\ Gamer\Documents\AWS-SakMed\backend\SakMed\app.py”,第 89 行,在 get_cases 查询 = db.select(p.first_name for p in db.Provider) 文件“c:\users\gamer.virtualenvs\backend -qptpobgm\lib\site-packages\pony\orm\core.py",第 881 行,在 select if not select_re.match(sql): sql = 'select ' + sql TypeError: expected string or bytes-like object

单步调试 pdb (格式化有点奇怪):

c:\users\gamer\documents\aws-sakmed\backend\sakmed\app.py(89)get_cases()

-> query = db.select(p.first_name for p in db.Provider) (Pdb) step(s)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony \orm\core.py(3927)迭代器()

-> def iter (entity): (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3928) iter ()

-> return EntityIter(entity) (Pdb)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3630) init ()

-> def init (self, entity): (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3631) init ()

-> self.entity = entity (Pdb)
--Return-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3631) init ()->None

-> self.entity = entity (Pdb)
--Return-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3928) iter ()->
- > return EntityIter(entity) (Pdb)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(879)select()

-> @cut_traceback (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(881)select()

-> 如果不是 select_re.match(sql): sql = 'select' + sql (Pdb) pp(sql) generator object get_cases.locals.genexpr at 0x048062B0 (Pdb)
step(s) TypeError: expected string or bytes-like object c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(881)select() -> 如果不是 select_re.match(sql): sql = 'select' + sql (pdb)

相关代码:app.py

相关代码:data_store.py

相关代码:base.py

0 投票
2 回答
566 浏览

python - 如何使用 Chalice 处理 DynamoDB 流事件

我正在编写一个项目,我需要在 Chalice 中处理 DynamoDB 表插入和更新。我在 Chalice 事件处理中看到了 SNS、SQS、调度程序,但没有看到 DynamoDB 表。目前它不在 Chalice 中,但 AWS 绝对可以做到。推荐的解决方法是什么?

我在没有触发的情况下手动完成,但由于关注点和模块化的分离,它不是那么好

我想要这样的东西:

我需要在将事件插入表'mytable'时调用我的domyligic()函数