{
  "tagging" : {
    "permissions" : [ "neptune-graph:TagResource", "neptune-graph:ListTagsForResource", "neptune-graph:UntagResource" ],
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "tagProperty" : "/properties/Tags",
    "cloudFormationSystemTags" : false
  },
  "typeName" : "AWS::NeptuneGraph::Graph",
  "readOnlyProperties" : [ "/properties/GraphArn", "/properties/GraphId", "/properties/Endpoint" ],
  "description" : "The AWS::NeptuneGraph::Graph resource creates an Amazon NeptuneGraph Graph.",
  "createOnlyProperties" : [ "/properties/GraphName", "/properties/ReplicaCount", "/properties/VectorSearchConfiguration", "/properties/KmsKeyIdentifier" ],
  "primaryIdentifier" : [ "/properties/GraphId" ],
  "required" : [ "ProvisionedMemory" ],
  "conditionalCreateOnlyProperties" : [ "/properties/ProvisionedMemory" ],
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-neptunegraph",
  "propertyTransform" : {
    "/properties/GraphName" : "$lowercase(GraphName)",
    "/properties/GraphId" : "$lowercase(GraphId)"
  },
  "handlers" : {
    "read" : {
      "permissions" : [ "neptune-graph:GetGraph", "neptune-graph:ListTagsForResource", "kms:DescribeKey", "kms:CreateGrant", "kms:Decrypt" ],
      "timeoutInMinutes" : 2160
    },
    "create" : {
      "permissions" : [ "iam:PassRole", "neptune-graph:CreateGraph", "neptune-graph:GetGraph", "neptune-graph:ListTagsForResource", "neptune-graph:TagResource", "kms:DescribeKey", "kms:CreateGrant", "kms:Decrypt", "iam:CreateServiceLinkedRole" ],
      "timeoutInMinutes" : 2160
    },
    "update" : {
      "permissions" : [ "iam:PassRole", "neptune-graph:GetGraph", "neptune-graph:ListTagsForResource", "neptune-graph:TagResource", "neptune-graph:UntagResource", "neptune-graph:UpdateGraph", "kms:DescribeKey", "kms:CreateGrant", "kms:Decrypt" ],
      "timeoutInMinutes" : 2160
    },
    "list" : {
      "permissions" : [ "neptune-graph:GetGraph", "neptune-graph:ListGraphs", "neptune-graph:ListTagsForResource", "kms:DescribeKey", "kms:CreateGrant", "kms:Decrypt" ],
      "timeoutInMinutes" : 2160
    },
    "delete" : {
      "permissions" : [ "neptune-graph:DeleteGraph", "neptune-graph:GetGraph", "neptune-graph:ListTagsForResource", "neptune-graph:UntagResource", "kms:DescribeKey", "kms:CreateGrant", "kms:Decrypt" ],
      "timeoutInMinutes" : 2160
    }
  },
  "additionalIdentifiers" : [ [ "/properties/GraphName" ] ],
  "additionalProperties" : false,
  "definitions" : {
    "Tag" : {
      "description" : "A key-value pair to associate with a resource.",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Value" : {
          "minLength" : 0,
          "description" : "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
          "type" : "string",
          "maxLength" : 256
        },
        "Key" : {
          "minLength" : 1,
          "description" : "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "Key" ]
    },
    "VectorSearchConfiguration" : {
      "description" : "The vector search configuration.",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "VectorSearchDimension" : {
          "description" : "The vector search dimension",
          "type" : "integer"
        }
      },
      "required" : [ "VectorSearchDimension" ]
    }
  },
  "properties" : {
    "PublicConnectivity" : {
      "description" : "Specifies whether the Graph can be reached over the internet. Access to all graphs requires IAM authentication.\n\nWhen the Graph is publicly reachable, its Domain Name System (DNS) endpoint resolves to the public IP address from the internet.\n\nWhen the Graph isn't publicly reachable, you need to create a PrivateGraphEndpoint in a given VPC to ensure the DNS name resolves to a private IP address that is reachable from the VPC.\n\n_Default_: If not specified, the default value is false.",
      "type" : "boolean"
    },
    "KmsKeyIdentifier" : {
      "minLength" : 1,
      "pattern" : "arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}",
      "description" : "The ARN of the KMS key used to encrypt data in the Neptune Analytics graph. If not specified, the graph is encrypted with an AWS managed key.",
      "type" : "string",
      "maxLength" : 1024
    },
    "GraphName" : {
      "minLength" : 1,
      "pattern" : "^[a-zA-z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*$",
      "description" : "Contains a user-supplied name for the Graph. \n\nIf you don't specify a name, we generate a unique Graph Name using a combination of Stack Name and a UUID comprising of 4 characters.\n\n_Important_: If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.",
      "type" : "string",
      "maxLength" : 63
    },
    "Endpoint" : {
      "description" : "The connection endpoint for the graph. For example: `g-12a3bcdef4.us-east-1.neptune-graph.amazonaws.com`",
      "type" : "string"
    },
    "GraphArn" : {
      "description" : "Graph resource ARN",
      "type" : "string"
    },
    "ReplicaCount" : {
      "description" : "Specifies the number of replicas you want when finished. All replicas will be provisioned in different availability zones.\n\nReplica Count should always be less than or equal to 2.\n\n_Default_: If not specified, the default value is 1.",
      "type" : "integer"
    },
    "GraphId" : {
      "description" : "The auto-generated id assigned by the service.",
      "type" : "string"
    },
    "ProvisionedMemory" : {
      "description" : "Memory for the Graph.",
      "type" : "integer"
    },
    "DeletionProtection" : {
      "description" : "Value that indicates whether the Graph has deletion protection enabled. The graph can't be deleted when deletion protection is enabled.\n\n_Default_: If not specified, the default value is true.",
      "type" : "boolean"
    },
    "VectorSearchConfiguration" : {
      "description" : "Vector Search Configuration",
      "$ref" : "#/definitions/VectorSearchConfiguration"
    },
    "Tags" : {
      "maxItems" : 50,
      "uniqueItems" : true,
      "description" : "The tags associated with this graph.",
      "insertionOrder" : false,
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Tag"
      }
    }
  }
}