我正试图通过Chalice将文件上传到我的S3存储桶(我现在正在玩它,对此仍然是新手).但是,我似乎无法做到正确.
我正确地设置了AWS,成功完成了本教程后回复了一些消息.然后我尝试做一些上传/下载,问题出现了.
s3 = boto3.resource('s3', region_name=<some region name, in this case oregon>)
BUCKET= 'mybucket'
UPLOAD_FOLDER = os.path.abspath('') # the file I wanna upload is in the same folder as my app.py, so I simply get the current folder name
@app.route('/upload/{file_name}', methods=['PUT'])
def upload_to_s3(file_name):
s3.meta.client.upload_file(UPLOAD_FOLDER+file_name, BUCKET, file_name)
return Response(message='upload successful',
status_code=200,
headers={'Content-Type': 'text/plain'}
)
Run Code Online (Sandbox Code Playgroud)
请不要担心我如何设置文件路径,当然,除非这是问题.
我收到了错误日志:
没有相应的文件和目录: ''
在这种情况下file_name只是mypic.jpg.
我想知道为什么这UPLOAD_FOLDER部分没被拿起来.另外,作为参考,似乎使用绝对路径对于Chalice来说会很麻烦(在测试时,我看到代码被移动到/var/task/)
有谁知道如何正确设置它?
编辑:
完整的脚本
from chalice import Chalice, Response
import boto3
app = Chalice(app_name='helloworld') …Run Code Online (Sandbox Code Playgroud) 我正在使用https://github.com/awslabs/chalice使用AWS Lambda,我在安装时遇到了以下问题
pip install chalice
这是错误.
Exception:
Traceback (most recent call last):
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py”, line 215, in main
status = self.run(options, args)
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py”, line 342, in run
prefix=options.prefix_path,
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py”, line 784, in install
**kwargs
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py”, line 851, in install
self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py”, line 1064, in move_wheel_files
isolated=self.isolated,
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py”, line 345, in move_wheel_files
clobber(source, lib_dir, True)
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py”, line 316, in clobber
ensure_dir(destdir)
File “/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py”, line 83, in ensure_dir
os.makedirs(path)
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py”, line …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照教程部署一个 chalice 应用程序。我在 python3.6 中使用 virtualenv。我的应用程序依赖于 requirements.txt 中的 github 存储库,而该存储库的 requirements.txt 依赖于多个库。
我可以很好地运行应用程序,python -i app.py并且可以在 REPL 中正确执行我的端点。
但是,当我运行时,chalice deploy我收到一个错误,抱怨我需要的 github 存储库所需的模块。
File "/usr/local/lib/python2.7/dist-packages/chalice/deploy/packager.py", line 715, in download_all_dependencies
raise NoSuchPackageError(str(package_name))
NoSuchPackageError: Could not satisfy the requirement: PyQt5>=5.8.1
Run Code Online (Sandbox Code Playgroud)
但是请注意,使用的这个 chalice 库是 2.7。我在一个设置为 python3.6 的 virtualenv 中。
我意识到我之前在全局安装了 chalice,这可能是一个错误。所以我 pip 全局卸载了 chalice,但它仍然安装在我的 virtualenv 中。
现在重新运行圣杯,我得到
$ chalice --version
bash: /usr/local/bin/chalice: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我尝试将 chalice 的安装重新运行到本地 virtualenv,但它没有改变任何东西。
我在这里做错了什么?
我目前正在使用 Chalice 框架开发 WebSocket 微服务,并在连接事件上的用户身份验证方面遇到突然的障碍。更具体地说:我不明白如何清楚地回应客户,以防他无法通过身份验证。
到目前为止,我使用以下方法:客户端建立与 WebSocket 的连接,然后发送包含身份验证令牌的消息。我真正讨厌这种方法的是客户端可以在没有任何身份验证的情况下连接到 WebSocket - 他可能只是忽略发送身份验证消息,从而只要他愿意就可以保持与 WebSocket 的连接。
幸运的是,允许在连接上发送自定义标头,并且这些标头可以在微服务中轻松处理。问题是如何在
on_ws_connect()事件中用有意义的消息响应客户端,或者至少返回自定义状态代码 - 这里的主要目标是用明确的消息通知客户端,以防他无法通过身份验证并且他的连接将被删除。尝试从内部发送消息on_ws_connect():
@app.on_ws_connect()
def ws_connect(event):
app.log.debug(f"New connection established: {event.connection_id}")
event_dict = event.to_dict()
headers = event_dict['headers']
token = headers['Authorization'].split(" ")[1]
try:
auth(token)
except PyJWTError as e:
app.websocket_api.send(event.connection_id, str(e))
app.websocket_api.close(event.connection_id)
Run Code Online (Sandbox Code Playgroud)
失败并显示:
[ERROR] WebsocketDisconnectedError: DFh2Ffc4oAMCIzw=
Traceback (most recent call last):
File "/var/task/chalice/app.py", line 1583, in __call__
super(WebsocketEventSourceHandler, self).__call__(event, context)
File "/var/task/chalice/app.py", line 1564, in __call__
return self.handler(event_obj)
File "/var/task/app.py", line 14, in ws_connect
app.websocket_api.send(event.connection_id, "User …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 APi Gateway 构建一个 AWS Lambda 函数,该函数利用 pyodbc python 包。我已按照文档中提到的步骤进行操作。当我测试运行 Lambda 函数时,我不断收到以下错误无法导入模块“app”:libodbc.so.2:无法打开共享对象文件:没有这样的文件或目录。
任何帮助表示赞赏。当我使用 Chalice 部署我的包时,我遇到了同样的错误。看来我可能需要安装 unixodbc-dev。知道如何通过 AWS Lambda 做到这一点吗?
urllib3的pip安装挂在“由于etag进行缓存”上。我正在构建一个不允许您指定--no-cache-dir的AWS圣杯项目,因此我需要在没有该命令的情况下解决此问题。有任何想法吗?
在虚拟环境中使用Python 3.6.5和Pip 10.0.1。
(partnerdb-virtualenv) C:\Windows\SysWOW64\partnerdb-project>pip install urllib3 -vvv
Config variable 'Py_DEBUG' is unset, Python ABI tag may be incorrect
Config variable 'WITH_PYMALLOC' is unset, Python ABI tag may be incorrect
Created temporary directory: C:\Users\Matt\AppData\Local\Temp\pip-ephem-wheel-cache-v0e8ikpl
Created temporary directory: C:\Users\Matt\AppData\Local\Temp\pip-req-tracker-d58lw_h5
Created requirements tracker 'C:\\Users\\Matt\\AppData\\Local\\Temp\\pip-req-tracker-d58lw_h5'
Created temporary directory: C:\Users\Matt\AppData\Local\Temp\pip-install-6qpv92ms
Collecting urllib3
1 location(s) to search for versions of urllib3:
* https://pypi.org/simple/urllib3/
Getting page https://pypi.org/simple/urllib3/
Looking up "https://pypi.org/simple/urllib3/" in the cache
Request header has "max_age" as 0, cache bypassed
Starting new HTTPS connection …Run Code Online (Sandbox Code Playgroud) 正在尝试使用 aws。我已经做了以下工作。
创建了 dynamodb 表。
创建了 Chalice 应用程序以通过 api 访问数据。
使用上面的 API 创建了一个 Angular6 应用程序来对表执行 CRUD 操作。
当角度应用程序位于本地时,一切正常。现在我将我的 Angular 应用程序上传到 S3,之后我收到 CORS 错误。
根据文档,我确实在 s3 存储桶上设置了 CORS 规则,但错误仍然存在。
除了 S3 存储桶之外,我还需要在其他地方设置 CORS 规则吗?
错误截图:
S3 存储桶 CORS 配置:
我需要从我的 Chalice Python 代码访问我在 AWS Lambda 中创建的环境变量,但我找不到有意义的示例。
想法?
我正在使用 Python 3.6。
我正在尝试遵循https://chalice.readthedocs.io/en/latest/topics/events.html 中的文档
我试过这个
@app.schedule('0 0 * * ? *')
def dataRefresh(event):
print(event.to_dict())
Run Code Online (Sandbox Code Playgroud)
并收到此错误:
botocore.exceptions.ClientError:调用 PutRule 操作时发生错误 (ValidationException):参数 ScheduleExpression 无效。
所以试过这个:
@app.schedule(Cron('0 0 * * ? *'))
def dataRefresh(event):
print(event.to_dict())
Run Code Online (Sandbox Code Playgroud)
并得到了另一个错误:
NameError:未定义名称“Cron”
什么都不起作用……正确的语法是什么?
我们已将 Chalice 应用程序部署到 AWS,并且在调用需要 API 密钥的端点时收到以下响应:
{
"message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)
可以毫无问题地调用不需要 API 密钥的端点。
奇怪的是,我们过去能够毫无问题地调用需要 API 密钥的端点,因此我们还考虑是 Chalice 或 AWS 更新导致了该问题。
我们使用 Postman 将 API 密钥作为请求中的标头传递:
x-api-key:我们的 API 密钥的值。
我们也没有在 CloudWatch 中收到任何日志,大概是因为该问题实际上并未调用端点。AWS 在请求到达我们的端点之前就阻止了该请求。
我们的 API 密钥配置如下:
API 密钥:
相关使用计划:
API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。
来自“排查 API Gateway 403 禁止错误”文档:
如果 API 密钥无效(或者我们假设不正确),我们将收到以下消息:
“指定的 API 密钥标识符无效”
然而,我们却收到了通用的“Forbidden”错误:
“禁止”
文档仅列出了导致此错误的三种可能原因:
当在 API 中激活 AWS WAF 时,请求将被 Web 应用程序防火墙 (WAF) 过滤阻止。
使用公共 …
api-key amazon-web-services http-status-code-403 aws-lambda chalice
我正在启动 AWS Lambda,并且爱上了 Chalice。据我了解,它与 Flask 具有相同的想法,但使用所有请求“无服务器”。我想将一个复杂的结构与几个 lambda 脚本文件放在一起。我找不到这样的例子。
\n\n在此处的更新说明中,它说从 0.4 版本开始添加的内容似乎正是我正在寻找的内容。在这个例子中,它展示了如何从文件中提取数据从“chalicelib”文件夹
\n\n遵循这个逻辑可以在“chalicelib”中创建多个文件夹,就好像每个文件夹代表我的应用程序的一个模块,并且在文件夹中每个文件将是带有一段源代码的路径?
\n\n我想知道这是否是一个可行的解决方案:
\n\napp/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 chalicelib\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 users\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 route.py\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 controller.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 teams\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 parameters.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 controller.py\nRun Code Online (Sandbox Code Playgroud)\n\n应用程序.py:
\n\nimport chalicelib\nRun Code Online (Sandbox Code Playgroud)\n\nchalicelib > __init__.py:
\n\nfrom . import users, teams\nRun Code Online (Sandbox Code Playgroud)\n\nchalicelib > 用户 > __init__.py:
\n\nfrom . import route\nRun Code Online (Sandbox Code Playgroud)\n\nchalicelib>用户>route.py:
\n\nfrom app import app\nfrom . …Run Code Online (Sandbox Code Playgroud) 我已经开始使用 Python Chalice 框架,我发现我需要一个在不到 24 小时前通过这个 PR 合并到框架主分支的错误修复:
https://github.com/aws/chalice/pull/1116
我对 Python 模块的经验仅限于打字pip install和观察奇迹的发生。如何直接从 GitHub 的 master 分支安装 Chalice?
需要什么 IAM 角色策略AWS Chalice。
Github 上没有官方文档吗?
运行需要什么权限AWS Chalice?
chalice ×13
python ×9
aws-lambda ×7
pip ×2
amazon-iam ×1
amazon-s3 ×1
api-key ×1
boto3 ×1
git ×1
python-3.x ×1
urllib3 ×1
websocket ×1