ROS機能サポート
InfraGuardは、インフラストラクチャコードの静的解析と検証のために、ROS(Resource Orchestration Service)テンプレート機能の広範な範囲をサポートしています。
関数
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- 2つの値を比較Fn::And- 論理ANDFn::Or- 論理ORFn::Not- 論理NOTFn::Contains- 値がリスト内にあるかチェックFn::Any- いずれかの条件が真かチェックFn::EachMemberIn- すべての要素が別のリスト内にあるかチェックFn::MatchPattern- パターンに一致
ユーティリティ関数
Fn::GetJsonValue- JSONから値を抽出Ref- パラメータとリソースを参照
条件
InfraGuardはROS Conditions機能を完全にサポートしており、以下を含みます:
- 条件定義 -
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など)を使用するテンプレートの場合、より正確な解析のためにROS PreviewStack APIを活用する--mode previewの使用を推奨します。プレビューモードは実際のクラウドプロバイダーコンテキストでテンプレートを評価し、ランタイム関数やその他の動的機能のサポートを可能にします。