Amazon web services 如何在管道中指定CodeUri?

Amazon web services 如何在管道中指定CodeUri?,amazon-web-services,aws-codepipeline,Amazon Web Services,Aws Codepipeline,我正在使用CloudFormation在lambda中开发一个无服务器应用程序 在我的CodeBuild项目中,我将其设置为压缩输出,并将其放置在“myBucket\AWSServerless1.zip”中,这样做是正确的 现在我正在编写代码管道,我引用了原始的代码构建项目。然而,现在,它把它放在美国西部的代码管道中。那很好。问题是.zip文件有一个随机名称。CodePipeline忽略了我在CodeBuild项目中给出的名称 在serverless.template中,我必须指定CodeUri

我正在使用CloudFormation在lambda中开发一个无服务器应用程序

在我的CodeBuild项目中,我将其设置为压缩输出,并将其放置在“myBucket\AWSServerless1.zip”中,这样做是正确的

现在我正在编写代码管道,我引用了原始的代码构建项目。然而,现在,它把它放在美国西部的代码管道中。那很好。问题是.zip文件有一个随机名称。CodePipeline忽略了我在CodeBuild项目中给出的名称

在serverless.template中,我必须指定CodeUri(出于某种奇怪的原因,它似乎是CodeBuild项目的输出)。如果我引用AWSServerless1.zip,它工作得很好(但它没有构建到那里,所以它的代码过时了)。。。但是


既然CodePipeline调用CodeBuild会给它一个随机名称,那么我应该如何引用serverless.template中的实际BuildArtifact?

我知道这很奇怪,我被CodePipeline的这种行为所困扰,然后不得不重写buildspec以使CodePipeline正常工作。CodePipeline使其成为自己的zip文件,即使您也通过CodeBuild创建了自己的zip文件,并且使用了唯一的名称

但是有一种解决方法,Codepipeline将创建一个zip文件,但它将解压它,同时将工件提供给CodeDeploy。所以你不必担心它的名字。CodeDeploy将获得代码的解压缩版本。CodePipeline跟踪名称,它将始终指向最新的名称

假设:

CodePipeline创建工件:
一些随机名称。zip

some-random-name
       |- deploy/lib/lambda-code
       |- some-file.yaml
每当CodePipeline向CodeDeploy提供工件时,它都会将其解压,以便您可以随时在
某个随机名称下引用代码。zip

some-random-name
       |- deploy/lib/lambda-code
       |- some-file.yaml
因此,在您的示例中,当您在SAM模板中提供CodeUri时,只需提供文件夹名称,即存在lambda代码的
deploy

Resources:
  Hello:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: example.MyHandler
      Runtime: java8
      CodeUri: deploy
      Description: ''
      MemorySize: 512
      Timeout: 15

希望这有帮助。

我正在使用.NET Core和serverless.template。我试着把各种各样的东西放在那里,但它似乎需要一个到zip的S3URL。我在部署阶段有两个部分,1)部署到S3容器以覆盖固定名称zip 2)现在执行cloudformation部署如果我尝试在serverless.template中放入类似“”的内容,它会出错,说它必须是S3://。。。啊。。。即使有了解决方法,现在我也遇到了这样的情况:他们不允许您更新cloudformation堆栈。什么?为什么不允许您重新部署代码?我不知道……在我看来,AWS很糟糕。到目前为止已经有3周的时间了。每件事都很容易因非感官错误而破裂或失败。我真的在Azure的CI/CD中在2小时内启动并运行,在这两方面都没有任何经验。AWS 3周和计数:(.但无论如何:)…使用serverless.template有没有一种方法可以引用构建工件清理而不首先部署到S3?我有类似的经验。请删除template.yaml中的代码URI并重试。我能让它那样工作。