有没有办法模块化 cloudformation 模板?

Is there a way to modularize cloudformation template?

现在我是这样使用模板的:

  1. 创建初始资源
  2. 导入现有资源 (S3)
  3. 根据现有资源使用新资源更新堆栈

这很无聊,因为我必须分三步部署堆栈,并根据资源进行注释。

我读过有关 cloudformation 模块的信息,但它们似乎无法解决将 3 步过程(初始化、导入现有、使用现有)合并到单个 cloudformation 模板中的问题。

这种情况有解决办法吗?

UPD:我知道我可以只使用资源 ARN 来引用现有资源而不导入它们,但这并不能解决我需要将其他内容附加到我的资源的情况(这里我创建事件通知以导入S3 桶):

# Import existing resource
S3DataBucket:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain
# Modify template by adding event configuration
S3DataBucket:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain
    Properties:
      NotificationConfiguration:
        LambdaConfigurations:
          - Event: s3:ObjectCreated:Put
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: !Ref SomePrefix
            Function: !GetAtt SomeLambda.Arn

看起来有一个未解决的问题,但 AWS 对修复它不太感兴趣:https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/79

同时,您可以考虑以下几点:

  1. AWS 已建议使用 eventbridge 的解决方法:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-eventbridgeconfig.html#cfn-s3-bucket-eventbridgeconfiguration-eventbridgeenabled
  2. 通知真的需要在 CFN 模板中吗?能不能像添加bucket一样手动添加?
  3. 您可以使用 AWS CLI 和一些 JSON/YAML 编辑器或 AWS CDK 编写“无聊工作”的脚本吗?