{
  "tagging" : {
    "permissions" : [ "appconfig:TagResource", "appconfig:UntagResource", "appconfig:ListTagsForResource" ],
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "tagProperty" : "/properties/Tags",
    "cloudFormationSystemTags" : true
  },
  "typeName" : "AWS::AppConfig::ConfigurationProfile",
  "readOnlyProperties" : [ "/properties/ConfigurationProfileId", "/properties/KmsKeyArn" ],
  "description" : "An example resource schema demonstrating some basic constructs and validation rules.",
  "createOnlyProperties" : [ "/properties/LocationUri", "/properties/Type", "/properties/ApplicationId" ],
  "primaryIdentifier" : [ "/properties/ApplicationId", "/properties/ConfigurationProfileId" ],
  "required" : [ "LocationUri", "ApplicationId", "Name" ],
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig",
  "handlers" : {
    "read" : {
      "permissions" : [ "appconfig:GetConfigurationProfile", "appconfig:ListTagsForResource" ]
    },
    "create" : {
      "permissions" : [ "appconfig:CreateConfigurationProfile", "appconfig:GetConfigurationProfile", "appconfig:TagResource", "appconfig:ListTagsForResource", "iam:PassRole" ]
    },
    "update" : {
      "permissions" : [ "appconfig:UpdateConfigurationProfile", "appconfig:TagResource", "appconfig:UntagResource", "iam:PassRole" ]
    },
    "list" : {
      "permissions" : [ "appconfig:ListConfigurationProfiles" ],
      "handlerSchema" : {
        "properties" : {
          "ApplicationId" : {
            "$ref" : "resource-schema.json#/properties/ApplicationId"
          }
        },
        "required" : [ "ApplicationId" ]
      }
    },
    "delete" : {
      "permissions" : [ "appconfig:DeleteConfigurationProfile" ]
    }
  },
  "writeOnlyProperties" : [ "/properties/DeletionProtectionCheck" ],
  "additionalProperties" : false,
  "definitions" : {
    "Validators" : {
      "description" : "A list of methods for validating the configuration.",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Type" : {
          "description" : "AWS AppConfig supports validators of type JSON_SCHEMA and LAMBDA.",
          "type" : "string"
        },
        "Content" : {
          "minLength" : 0,
          "description" : "Either the JSON Schema content or the Amazon Resource Name (ARN) of an Lambda function.",
          "type" : "string",
          "maxLength" : 32768
        }
      }
    },
    "Tags" : {
      "description" : "Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Value" : {
          "minLength" : 0,
          "description" : "The tag value can be up to 256 characters.",
          "type" : "string",
          "maxLength" : 256
        },
        "Key" : {
          "minLength" : 1,
          "description" : "The key-value string map. The tag key can be up to 128 characters and must not start with aws:.",
          "type" : "string",
          "maxLength" : 128
        }
      }
    }
  },
  "properties" : {
    "ConfigurationProfileId" : {
      "description" : "The configuration profile ID",
      "type" : "string"
    },
    "LocationUri" : {
      "minLength" : 1,
      "description" : "A URI to locate the configuration. You can specify the AWS AppConfig hosted configuration store, Systems Manager (SSM) document, an SSM Parameter Store parameter, or an Amazon S3 object.",
      "type" : "string",
      "maxLength" : 2048
    },
    "Type" : {
      "pattern" : "^[a-zA-Z\\.]+",
      "description" : "The type of configurations contained in the profile. When calling this API, enter one of the following values for Type: AWS.AppConfig.FeatureFlags, AWS.Freeform",
      "type" : "string"
    },
    "KmsKeyIdentifier" : {
      "description" : "The AWS Key Management Service key identifier (key ID, key alias, or key ARN) provided when the resource was created or updated.",
      "type" : "string"
    },
    "Description" : {
      "minLength" : 0,
      "description" : "A description of the configuration profile.",
      "type" : "string",
      "maxLength" : 1024
    },
    "KmsKeyArn" : {
      "minLength" : 20,
      "pattern" : "arn:(aws[a-zA-Z-]*)?:[a-z]+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:[a-zA-Z0-9-_/:.]+",
      "description" : "The Amazon Resource Name of the AWS Key Management Service key to encrypt new configuration data versions in the AWS AppConfig hosted configuration store. This attribute is only used for hosted configuration types. To encrypt data managed in other configuration stores, see the documentation for how to specify an AWS KMS key for that particular service.",
      "type" : "string",
      "maxLength" : 2048
    },
    "Validators" : {
      "maxItems" : 2,
      "uniqueItems" : false,
      "description" : "A list of methods for validating the configuration.",
      "insertionOrder" : false,
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Validators"
      }
    },
    "RetrievalRoleArn" : {
      "minLength" : 20,
      "pattern" : "^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov|aws-eusc):(iam)::\\d{12}:role[/].*)$",
      "description" : "The ARN of an IAM role with permission to access the configuration at the specified LocationUri.",
      "type" : "string",
      "maxLength" : 2048
    },
    "DeletionProtectionCheck" : {
      "description" : "On resource deletion this controls whether the Deletion Protection check should be applied, bypassed, or (the default) whether the behavior should be controlled by the account-level Deletion Protection setting. See https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html",
      "type" : "string",
      "enum" : [ "ACCOUNT_DEFAULT", "APPLY", "BYPASS" ]
    },
    "ApplicationId" : {
      "pattern" : "[a-z0-9]{4,7}",
      "description" : "The application ID.",
      "type" : "string"
    },
    "Tags" : {
      "uniqueItems" : false,
      "description" : "Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.",
      "insertionOrder" : false,
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Tags"
      }
    },
    "Name" : {
      "minLength" : 1,
      "description" : "A name for the configuration profile.",
      "type" : "string",
      "maxLength" : 128
    }
  }
}