ROS 特性支持
InfraGuard 支持广泛的 ROS(资源编排服务)模板特性,能够对您的基础设施代码进行静态分析和验证。
函数
InfraGuard 支持以下 ROS 函数:
字符串函数
Fn::Join- 使用分隔符连接字符串Fn::Sub- 在字符串中替换变量Fn::Split- 将字符串拆分为列表Fn::Replace- 替换文本中的字符串Fn::Str- 将值转换为字符串Fn::Indent- 缩进文本
编码函数
Fn::Base64Encode- Base64 编码Fn::Base64Decode- Base64 解码
列表函数
Fn::Select- 从列表中选择元素Fn::Index- 查找元素的索引Fn::Length- 返回列表或字符串的长度Fn::ListMerge- 合并多个列表
映射函数
Fn::FindInMap- 从映射中检索值Fn::SelectMapList- 从映射列表中选择值Fn::MergeMapToList- 将映射合并到列表
数学函数
Fn::Add- 数字相加Fn::Avg- 计算平均值Fn::Max- 返回最大值Fn::Min- 返回最小值Fn::Calculate- 计算数学表达式
条件函数
Fn::If- 根据条件返回值Fn::Equals- 比较两个值Fn::And- 逻辑与Fn::Or- 逻辑或Fn::Not- 逻辑非Fn::Contains- 检查值是否在列表中Fn::Any- 检查是否有任何条件为真Fn::EachMemberIn- 检查所有元素是否在另一个列表中Fn::MatchPattern- 匹配模式
实用函数
Fn::GetJsonValue- 从 JSON 中提取值Ref- 引用参数和资源
条件
InfraGuard 完全支持 ROS 条件功能,包括:
- 条件定义 - 在
Conditions部分定义条件 - 条件函数 - 在条件中使用
Fn::Equals、Fn::And、Fn::Or、Fn::Not、Fn::If - 条件引用 - 在资源和输出中引用条件
- 依赖关系解析 - 自动解析条件依赖关系
YAML 短语法
InfraGuard 支持 ROS 函数的 YAML 短语法(标签表示法):
!Ref-Ref的简写形式!GetAtt-Fn::GetAtt的简写形式- 所有其他
Fn::*函数都可以写作!FunctionName
YAML 解析器会在模板加载时自动将这些短语法转换为标准的映射表示。
暂不支持的特性
InfraGuard 专注于静态分析,在静态模式下目前不支持以下特性:
运行时函数
Fn::GetAtt- 需要实际创建资源后才能获取属性Fn::GetAZs- 需要运行时查询云服务商Fn::GetStackOutput- 需要访问其他资源栈的输出
模板部分
Locals- 本地变量定义Transform- 模板转换和宏Rules- 模板验证规则Mappings- 静态值映射(不会进行策略违规分析)
特殊引用
- 伪参数(如
ALIYUN::StackId、ALIYUN::Region等)- 系统提供的参数
这些特性在使用静态模式时会在分析输出中被保留原样,不会进行求值或验证。
提示:对于使用静态分析不支持的特性(如
Fn::GetAtt、Fn::GetAZs等)的模板,我们推荐使用--mode preview来利用 ROS PreviewStack API 进行更准确的分析。预览模式通过实际的云服务商上下文评估模板,从而支持运行时函数和其他动态特性。