如何在管道中指定CodeUri?

时间:2019-09-14 04:20:56

标签: amazon-web-services aws-codepipeline

我正在使用CloudFormation在lambda中做无服务器应用。

在我的CodeBuild项目中,我将其设置为压缩输出并将其放置在“ myBucket \ AWSServerless1.zip”中,并且正确执行了

现在,我正在使用CodePipeline,我引用了原始CodeBuild项目。但是,现在改为将其放在codepipeline-us-west-#####中。没关系。问题是.zip文件具有RANDOM名称。 CodePipeline会忽略我在CodeBuild项目中为其指定的名称。

在serverless.template中,我必须指定CodeUri(出于某种奇怪的原因,它似乎是CodeBuild项目的输出)。如果我引用AWSServerless1.zip,它可以正常工作(但它无法构建到那里,因此它的代码过时)...但是...

由于CodePipeline调用CodeBuild为其赋予了一个随机名称,因此我应该如何在serverless.template中引用ACTUAL BuildArtifact?

1 个答案:

答案 0 :(得分:0)

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

但是有一种方法,Codepipeline将创建一个zip文件,但是在将工件提供给CodeDeploy的同时将其解压缩。因此,您不必担心它的名称。 CodeDeploy将获取您的代码的解压缩版本。 CodePipeline会跟踪该名称,它将始终指向最新名称。

假设:

CodePipeline创建工件:some-random-name.zip

some-random-name
       |- deploy/lib/lambda-code
       |- some-file.yaml

只要CodePipeline将工件提供给CodeDeploy,它将对其进行解压缩,因此您可以随时参考some-random-name.zip下的代码

因此,在您的情况下,当您在SAM模板中提供CodeUri时,只需给出存在您的lambda代码的文件夹名称deploy

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

希望这会有所帮助。