Шаблон JSON AWS Cloudformation для объекта c#

Знает ли кто-нибудь, как преобразовать шаблон AWS cloud formation son в объект c# или пользовательский класс.
Я десериализовал json, используя контракт данных раньше, но у меня возникли проблемы с шаблоном формирования облака, потому что каждый ресурс начинается с уникального имени, поэтому я не уверен, как его обрабатывать.
Моя цель-сравнить шаблон с тем, что уже есть в AWS, поместив данные из API и данные из шаблона в класс и сравнив их.
Если есть лучший способ, пожалуйста, не стесняйтесь, чтобы сбить меня.
Вот и пример шаблона формирования облака.

{
  "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" : {    
    }
  }
}

1 ответ

  1. Проще всего было бы рассматривать 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);