我正在使用AWS SAM(无服务器应用程序模型)在API网关设置中构建Python 3.6 lambda代码。因此,我有一个单独的template.yaml
文件来创建几个Lambda函数。它们与lambda函数一起组织在项目中各自的子目录中。lambda还共享几个我保存在共享文件夹中的常见文件。
project-home
-lambda_a_dir
-lambda_a.py
-lambda_b_dir
-lambda_b.py
-shared_dir
-shared.py
问题是,虽然Pycharm可以清楚地看到共享的。py
,SAM无法并拒绝识别共享文件,出现以下错误:无法导入模块“lambdaA”:如果我移动
文件放入每个lambda目录,Pycharm和SAM都很高兴,我可以构建/部署到AWS共享文件的副本,则没有名为“shared”的模块
。py
我的问题:如何使用共享目录中的共享文件构建SAM模板
到目前为止,我已经尝试过:
CodeUri
备选方案的各种组合\uuuu init\uuuu
和设置的本地包。py
。(我不能使用公共包,因为代码是私有的,不能放在公共存储库中。)
这是我的模板文件:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
lambdaA:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambda_a_dir/
Handler: lambda_a.lambda_handler
Runtime: python3.6
lambdaB:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambda_b_dir/
Handler: lambda_b.lambda_handler
Runtime: python3.6
您是否尝试过使用Rocketsam CLI?它正好解决了这个问题(使用在构建期间自动创建的符号链接在lambda之间共享代码)。它还允许分割YAML文件,以便每个lambda可以有一个单独的YAML文件。
图层解决方案看起来像黑客。我尝试创建符号链接到“共享”文件夹,它起作用了——共享文件夹成功地与我的lambda函数一起打包。
cd lambda_a_dir
ln -s ../shared
根据@Dunedan的建议,我用共享代码为每个lambda函数创建了一个Layers对象,这有效地将这些例程添加到这些函数的PythonPath中。我还使用新的Layers
属性在API模板定义中添加了以下内容:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
lambdaA:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambda_a_dir/
Handler: lambda_a.lambda_handler
Runtime: python3.6
Layers:
- arn:aws:lambda:us-west-1:012345678:layer:my_shared_zip:1
lambdaB:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambda_b_dir/
Handler: lambda_b.lambda_handler
Runtime: python3.6
Layers:
- arn:aws:lambda:us-west-1:012345678:layer:my_shared_zip:1
请注意,代码在上传之前需要进行压缩,并且需要具有以下目录结构,代码位于具有语言名称的目录中。在这种情况下,因为我使用Python,代码需要在python
目录中,然后将python
目录压缩:
my_shared_zip.zip
-python
-shared.py
-other_shared.py
-more_shared.py
最后一点。虽然理想情况下,这个共享python目录应该通过sam deploy
命令直接部署到层对象中,但我发现AWS sam CLI中对Layers
的支持仍然很新,而且存在很多缺陷,因此在这一点上它不起作用。希望在接下来的几个月里它会被修复。同时,我需要自己手动安装共享zip文件的新版本。叹气
只有在必要时,我才尝试在“httpRequestBegin”管道中执行一些操作。我的处理器在Sitecore解析用户后执行(processor type=“Sitecore.Pipelines.HttpRequest.UserResolver,Sitecore.Kernel”),因为如果Sitecore无法首先解析用户,我也在解析用户。 稍后,我想在管道“insertRenderings”中添加一
我目前正在从事一个托管在域上的laravel项目。此应用程序的一部分(某些功能)必须位于不同的域上。我在我的网上找到了一条路。在php中,我用以下命令映射了所有路由: 以及需要以相同方式位于另一个域上,但具有不同域的路由。好啊在主域中,我创建了一个具有src属性的图像: 指向此方法路线: 它起作用了。我在不同的域上共享同一个会话,但是,我想问你们,对于这个案例场景,你们是否知道更好的方法。我知道这
通过XHR 实现Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对开发某些浏览器应用程序也是至关重要的。 CORS(Cross-Origin Resource Sharing,跨源资源共享)是W3C 的一个工作草案,定义了在必须访问跨源资源时,浏览器与服务器应该如何沟通。
由于进程数据隔离,A进程的数据无法直接的被B使用,为解决该问题,可以尝试使用Swoole自带的Memory模块。 或者也可以尝试使用EasySwoole提供的ShareMemory,或者借助第三方的类似Redis之类的服务。
问题内容: 我正在编写一个HTML5应用程序,该应用程序使用JSONP从几个不同的来源收集数据。我对GET所做的任何事情都可以正常工作。我现在正尝试发布数据,并且遇到了一个有趣的问题。我需要将数据从我的应用程序发布到另一个应用程序,该应用程序从本地计算机运行。我正在尝试编写具有跨平台功能的移动应用程序(请考虑使用Pulse / Flipboard),因此该代码将始终从本地源运行。我的思考过程如下:
跨域资源共享 (CORS) 跨域资源共享(Cross-Origin Resource Sharing)允许WEB端的应用程序访问不属于本域的资源 配置格式 CORS配置为json字符串,类似 { "rules":[ { "id":"id1" "AllowOrigin":"http://*.example.com" //指定允许发送跨源请求的源,支持使用通配符