aws-lambda - 将代码版本插入 CloudFormation 模板中的 Handler 属性时,Lambda 找不到文件
问题描述
我创建和部署的工件中有一个版本号。它的形式是:
universe-0.0.1-SNAPSHOT.zip
其中0.0.1-SNAPSHOT
是版本。
现在 CloudFormation 模板通过 Fn::Join 函数映射了 Handler:
UFunctionCelestial:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Ref ArtefactRepositoryBucket
S3Key: !Join [ '', [!Sub '${AWS::StackName}-', !Ref CodeVersion, '.zip' ] ]
Handler: !Join [ '', [!Sub '${AWS::StackName}-', !Ref CodeVersion, '/src/lambdas/celestial_persist_function.handler'] ]
Role: !GetAtt [ UIAMRoleFunctionServiceRoleCelestial, Arn ]
Runtime: python3.7
Environment:
Variables:
CELESTIAL_TABLE_NAME: !Ref UTableCelestial
PRIMARY_KEY: id
DependsOn:
- UIAMRoleFunctionServiceRolePolicyCelestial
- UIAMRoleFunctionServiceRoleCelestial
...SNIP...
Parameters:
ArtefactRepositoryBucket:
Type: String
Description: S3 bucket for asset "foundry-cdk/CelestialHandler/Code"
CodeVersion:
Type: String
Description: S3 key for asset version "foundry-cdk/CelestialHandler/Code"
我想这大部分是无关紧要的,除了Handler
财产
现在该!Ref CodeVersion
行的代码版本似乎0/0/1-SNAPSHOT
出于某种原因进行评估,即使我使用以下命令调用此模板:
aws2 cloudformation deploy \
--template-file ${CF_TEMPLATE_FILE} \
--region ${ACCOUNT_REGION} \
--stack-name ${PROJECT_NAME} \
--force-upload \
--capabilities CAPABILITY_IAM \
--parameter-overrides \
ArtefactRepositoryBucket=${S3_AWS_RELEASES_BUCKET} \
CodeVersion=${APPLICATION_VERSION}
我回应了${APPLICATION_VERSION}
并且,是的,它评估为0.0.1-SNAPSHOT
然而,当我进入控制台并查看我的 Lambda 时,我收到了以下消息:
Lambda 找不到文件 Universe-0/0/1-SNAPSHOT/src/lambdas/celestial_persist_function.py。确保您的处理程序支持以下格式:file-name.method。
所以我的问题是,为什么 CloudFormation 将我的点变成斜线并给 Lambda 一个流浪汉参考?
解决方案
这不是 cloudformation 在做什么。您看到的行为是正常行为。
通常,当您将处理程序定义为“folder1.folder2.file.handler”时,它会查找 a folder1
,然后folder2
在其中查找,然后在其中查找文件file.py
。最后,file.py
预计会有一个名为 的函数handler
。
我假设您的 zip 文件有一个名为src
. 在这种情况下,您的处理程序应该定义为,src.lambdas.celestial_persist_function.handler
因为您已经提到您的 zip 文件在哪里使用S3Key
.
希望这可以帮助。
推荐阅读
- python - ImportError:无法从“keras.optimizers”导入名称“rmsprop”
- c# - Wpf:ContentControl.AddChild(Object) 方法
- python - 在 beautifulsoup4 中选择 div ID
- python - Tkinter 按钮复制
- mule - 连接器在用于枚举的 mule3 自定义连接器的下拉过程中显示一个空字段
- android - 在哪里查找含义“adb screencap”命令的退出代码或如何以编程方式获取含义?
- python - 复制坐标区内容并将其显示在现有图形中
- r - 如果需要,使用 NA 将元素插入到向量中
- python-3.x - 在 cupy 中启用 cub 的正确方法是什么?
- python - 烛台图标记使用 python 中的绘图库