[CloudFormation package
命令遍历CloudFormation模板,将本地引用上载到S3,并创建引用S3资源的新模板。 (documentation)
所以,如果我有类似的东西:
StatusLambda:
Type: AWS::Lambda::Function
Properties:
Code: ../main/java/status/target/status-lambda-1.0-SNAPSHOT.jar
Description: This Lambda function for new messages
package
命令将其转换为
StatusLambda:
Type: AWS::Lambda::Function
Properties:
Code: https://s3.us-east-1.amazonaws.com/bucket/stack/b3dba2bcc4401e10000000000.template
Description: This Lambda function for new messages
太好了。问题是与我客户的Jenkins构建服务器集成在一起。当我在本地构建和部署时,lambda源位于../main/java/status/target/status-lambda-1.0-SNAPSHOT.jar
。自动构建服务器将工件放置在其他位置。
有没有办法我可以对两者使用相同的模板?我可以在构建时以某种方式插入文件路径吗?我曾希望package
支持以下内容,但事实并非如此:该命令似乎没有执行任何功能。
StatusLambda:
Type: AWS::Lambda::Function
Properties:
Code: !Ref LambdaJarPath
Description: This Lambda function for new messages
解决该问题的一种方法是在执行package
命令之前对管道中的lambda模板进行查找和替换处理。
例如,您的模板文件可能是
StatusLambda:
Type: AWS::Lambda::Function
Properties:
Code: <LambdaJarPath>
Description: This Lambda function for new messages
然后在Jenkins中,您可以执行sed
或任何命令以正确的工件路径替换<LambdaJarPath>
。