如何使用无服务器框架有条件地将项目添加到 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的值来去掉对应的属性。它应该在这里可以删除列表项,但我不确定,你需要测试一下。
鉴于我在 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的值来去掉对应的属性。它应该在这里可以删除列表项,但我不确定,你需要测试一下。