【问题标题】:CloudFormation 'package' with file path variables带有文件路径变量的 CloudFormation“包”
【发布时间】:2020-06-16 07:47:29
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation


    【解决方案1】:

    解决该问题的一种方法是在执行package 命令之前对管道中的 lambda 模板进行查找和替换处理

    例如,您的模板文件可以是

    StatusLambda:
        Type: AWS::Lambda::Function
        Properties: 
          Code: <LambdaJarPath>
          Description: This Lambda function for new messages
    

    然后在 Jenkins 中,您可以执行 sed(或类似命令)将 &lt;LambdaJarPath&gt; 替换为工件的正确路径。完成后,您将继续使用aws cloudformation package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2020-12-20
      • 2017-01-17
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多