首页 > 解决方案 > 是否可以在 CloudFormation 中重用预先构建的文本?

问题描述

我有一些参数传递给我的 CloudFormation conf 文件之一,如下所示(YAML):

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation Template for creating pipeline workflow.
Parameters:

  Opt1:
    Description: my opt1
    Type: String
    Default: opt1_default

  Opt2:
    Description: my opt2
    Type: String
    Default: opt2_default

  Opt3:
    Description: my opt3
    Type: String
    Default: opt3_default
  ...

在我的 conf 的许多其他部分,我一直在使用:

...
Name: !Sub '${Opt1}-${Opt2}-${Opt3}'
...
Name: !Sub '${Opt1}-${Opt2}-${Opt3}'
...
Name: !Sub '${Opt1}-${Opt2}-${Opt3}'
...

是否可以创建一些参考,例如:

SomeRef: !Sub '${Opt1}-${Opt2}-${Opt3}'

以我可以做到的方式:

...
Name: !Ref SomeRef
...
Name: !Ref SomeRef
...
Name: !Ref SomeRef
...

?

标签: amazon-cloudformation

解决方案


没有资源和单一输出的嵌套模板可以做到:

NameCreator.yaml

---
AWSTemplateFormatVersion: 2010-09-09
Description: 'Empty nested template'

Parameters:
  Opt1:
    Type: String
  Opt2:
    Type: String

Conditions:
  Never: !Equals [ a, b ]
Resources:
  NullResource:
    Type: Custom::Null
    Condition: Never

Outputs:
  Name:
    Value: !Sub '${Opt1}-${Opt2}'

然后在主模板中调用它:

  NameCreator:
    Type: AWS::CloudFormation::Stack
    Properties:
      Parameters:
        Opt1: !Ref Opt1
        Opt2: !Ref Opt2
      TemplateURL: https://mybucket.s3.amazonaws.com/NameCreator.yaml

并使用它:

  Name: !GetAtt 'NameCreator.Outputs.Name'

推荐阅读