【问题标题】:Cloudformation YAML custom variableCloudformation YAML 自定义变量
【发布时间】:2021-02-07 04:44:48
【问题描述】:

我正在尝试在 AWS Cloudformation YAML 文件中实现类似于以下内容:

AWSTemplateFormatVersion: 2010-09-09

testAttribute = "test"

Resources:
  Lambda:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.7
      Role: !GetAtt iam.Arn
      MemorySize: 128
      Timeout: 10
      Handler: lambda_function.lambda_handler
      FunctionName: "testName"+${testAttribute}
      Description: 'This is my lambda'
      Code:
        S3Bucket: myBucket
        S3Key: "lambda/testName"+${testAttribute}+".zip"

我知道上述内容并不完全正确,但在搜索如何实现时我找不到一个好的答案。有人对这个问题有一些指导吗?

【问题讨论】:

    标签: amazon-web-services yaml amazon-cloudformation


    【解决方案1】:

    这取决于用例,但如果“变量”是静态的并且您在部署堆栈时不需要更改它,我会建议一个替代解决方案,使用 Mappings 部分。

    这允许您在部署堆栈时定义一些静态值而不发送它(您将拥有更清晰的部署命令,并且逻辑将在模板端而不是部署端)。

    在这种情况下,我使用 !Sub 带有映射的内在函数(您可以使用 !Sub 设置要替换的多个变量):

    AWSTemplateFormatVersion: 2010-09-09
    
    Mappings:
     attributes:
      lambda:
       testAttribute: "test"
    
    Resources:
      Lambda:
        Type: AWS::Lambda::Function
        Properties:
          Runtime: python3.7
          Role: !GetAtt iam.Arn
          MemorySize: 128
          Timeout: 10
          Handler: lambda_function.lambda_handler
          FunctionName: !Sub 
                         - "testName${attr}"
                         - {attr: !FindInMap [attributes, lambda, testAttribute]}
          Description: 'This is my lambda'
          Code:
            S3Bucket: myBucket
            S3Key: !Sub 
                    - "lambda/testName${attr}.zip"
                    - {attr: !FindInMap [attributes, lambda, testAttribute]}
    

    注意:映射具有强制性的三层嵌套,在设计解决方案时要考虑到这一点

    【讨论】:

    • 谢谢你!这也是一个很好的解决方案和宝贵的意见。
    【解决方案2】:

    您可以使用带有默认值的Parameters,然后在模板中使用Sub

    AWSTemplateFormatVersion: 2010-09-09
    
    Paramters:
      testAttribute:
        Type: String
        Default: test
    
    Resources:
      Lambda:
        Type: AWS::Lambda::Function
        Properties:
          Runtime: python3.7
          Role: !GetAtt iam.Arn
          MemorySize: 128
          Timeout: 10
          Handler: lambda_function.lambda_handler
          FunctionName: !Sub "testName${testAttribute}"
          Description: 'This is my lambda'
          Code:
            S3Bucket: myBucket
            S3Key: !Sub "lambda/testName${testAttribute}.zip"
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2018-11-11
      • 2018-10-07
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2018-03-25
      相关资源
      最近更新 更多