AWS Cloudformation JSON模板到c#对象

本文关键字:对象 Cloudformation JSON AWS | 更新日期: 2023-09-27 18:16:25

有人知道如何将AWS云生成模板转换为c#对象或自定义类吗?我以前使用数据契约对json进行了反序列化,但我在云形成模板方面遇到了麻烦,因为每个资源都以唯一的名称开始,所以我不确定如何处理它。我的目的是通过将来自API的数据和来自模板的数据放入一个类中并进行比较,将模板与AWS中已有的模板进行比较。如果有更好的办法请随意把我击落。这是一个示例云形成模板。

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "AWS CloudFormation Sample.",
  "Parameters" : {
    "KeyName": {
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
      "Type": "AWS::EC2::KeyPair::KeyName",
      "ConstraintDescription" : "must be the name of an existing EC2 KeyPair."
    },
  "Resources" : {  
    "SecurityGroup1" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "Enable SSH access via port 22",
        "SecurityGroupIngress" : [ {
          "IpProtocol" : "tcp",
          "FromPort" : "22",
          "ToPort" : "22",
          "CidrIp" : { "Ref" : "SSHLocation"}
        } ]
      }
    },
    "SecurityGroup2" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "Enable SSH access via port 22",
        "SecurityGroupIngress" : [ {
          "IpProtocol" : "tcp",
          "FromPort" : "22",
          "ToPort" : "22",
          "CidrIp" : { "Ref" : "SSHLocation"}
        } ]
      }
    }
  },
  "Outputs" : {    
    }
  }
}

AWS Cloudformation JSON模板到c#对象

直接的方法是将模板的Resources部分视为字典,其中资源名称是键,其属性是值:

class ResourceProperties
{
    public string GroupDescription { get; set; }
}
class Resource
{
    public string Type { get; set; }
    public ResourceProperties Properties { get; set; }
}
class Parameters
{
    public Dictionary<string, Resource> Resources { get; set; }
}
class Template
{
    public Parameters Parameters { get; set; }
}

(其余字段是明显的)

然后使用

var template = JsonConvert.DeserializeObject<Template>(json);