如何使用无服务器框架有条件地将项目添加到 YML 集合?

How to add item to YML collection conditionally using Serverless framework?

鉴于我在 YML 文件中为资源定义了以下内容:

Type: AWS::Cognito::UserPoolClient
  CallbackURLs:
    - "my-first-url"

如何在仅满足某些条件时添加第二个项目?不幸的是,无法简单地将其设置为空字符串或 null,因为它无法通过部署验证。例如:

Type: AWS::Cognito::UserPoolClient
  CallbackURLs:
    - "my-first-url"
    - myCondition ? "" : undefined // Omit item 

这有可能吗?很高兴使用插件解决方案等

您可以使用像 Fn::If 这样的 CloudFormation 条件来有条件地创建堆栈资源。 CloudFormation documentation about conditions 包含所有详细信息,但像这样的内容应该可以帮助您入门:

resources:
  Conditions:
    my_condition: !Equals [value_1, value_2]
  Resources:
    MyUserPool:
      Type: AWS::Cognito::UserPoolClient
        CallbackURLs:
          - "my-first-url"
          - !If [my_condition, "...", !Ref "AWS::NoValue"]

用您的条件替换my_condition的内容。它稍后在 Fn::If 中引用(示例使用 shorthand 表示 Fn::If)。

AWS::NoValue是一个伪参数,可以作为return的值来去掉对应的属性。它应该在这里可以删除列表项,但我不确定,你需要测试一下。