Aws lambda Lambda can';在CloudFormation模板的处理程序属性中插入代码版本时找不到该文件

Aws lambda Lambda can';在CloudFormation模板的处理程序属性中插入代码版本时找不到该文件,aws-lambda,amazon-cloudformation,Aws Lambda,Amazon Cloudformation,我创建和部署的人工制品中有一个版本号。其形式如下: universe-0.0.1-SNAPSHOT.zip 其中0.0.1-SNAPSHOT是版本 现在,CloudFormation模板通过Fn::Join函数映射了处理程序: UFunctionCelestial: Type: AWS::Lambda::Function Properties: Code: S3Bucket: !Ref ArtefactRepositoryBucket

我创建和部署的人工制品中有一个版本号。其形式如下:

universe-0.0.1-SNAPSHOT.zip
其中
0.0.1-SNAPSHOT
是版本

现在,CloudFormation模板通过Fn::Join函数映射了处理程序:

  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"
我想除了
处理程序
属性之外,这大部分都是无关的

现在是
!Ref CodeVersion
出于某种原因,该行的code version似乎评估为
0/0/1-SNAPSHOT
,即使我使用以下命令调用此模板:

aws2云编队部署\
--模板文件${CF_模板文件}\
--区域${ACCOUNT_region}\
--堆栈名称${PROJECT_name}\
--强制上载\
--能力\
--参数覆盖\
ArtefactRepositoryBucket=${S3\u AWS\u RELEASES\u BUCKET}\
CodeVersion=${APPLICATION_VERSION}
我回显了
${APPLICATION\u VERSION}
,是的,它的计算结果是
0.0.1-SNAPSHOT

然而,当我走到控制台,看着我的Lambda时,我得到了一个信息:

Lambda找不到文件universe-0/0/1-SNAPSHOT/src/lambdas/sessional\u persist\u function.py。确保处理程序支持以下格式:file-name.method


所以我的问题是,为什么CloudFormation要把我的点变成斜线,并给Lambda一个无用的引用?

这不是CloudFormation在做什么。你看到的行为是正常的行为

通常,当您将处理程序定义为“folder1.folder2.file.handler”时,它将查找
folder1
,然后在其中查找
folder2
,然后在其中查找文件
file.py
。最后,
file.py
应该有一个名为
handler
的函数

我假设您的zip文件有一个名为
src
的顶级文件夹。在这种情况下,您的处理程序应该定义为
src.lambdas.sessional\u persist\u function.handler
,因为您已经提到了zip文件使用
S3Key
的位置


希望这能有所帮助。

您是否尝试过将“${application\u version}”双引号引起来?事实上,这就是我开始的内容。我注意到我有
${APPLICATION\u VERSION}
双引号和${S3\u AWS\u RELEASES\u BUCKET}没有双引号,当我看到这个错误时,我删除了双引号,作为我早期修复这个错误的尝试之一。引用(或不引用)最终没有任何区别。我现在可以确认这一点,我将setup.py中的版本控制更改为
0-0-1-SNAPSHOT
,突然一切正常。谢谢你的回答。