{
  "typeName" : "AWS::EC2::EIP",
  "$schema" : "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/blob/master/src/main/resources/schema/provider.definition.schema.v1.json",
  "description" : "Resource Type definition for AWS::EC2::EIP",
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
  "tagging" : {
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "cloudFormationSystemTags" : true,
    "tagProperty" : "/properties/Tags"
  },
  "definitions" : {
    "Tag" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Key" : {
          "type" : "string"
        },
        "Value" : {
          "type" : "string"
        }
      },
      "required" : [ "Value", "Key" ]
    }
  },
  "properties" : {
    "PublicIp" : {
      "description" : "The PublicIP of the EIP generated by resource.",
      "type" : "string"
    },
    "AllocationId" : {
      "description" : "The Allocation ID of the EIP generated by resource.",
      "type" : "string"
    },
    "Domain" : {
      "description" : "Indicates whether the Elastic IP address is for use with instances in a VPC or instance in EC2-Classic.",
      "type" : "string"
    },
    "NetworkBorderGroup" : {
      "description" : "A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses.",
      "type" : "string"
    },
    "TransferAddress" : {
      "description" : "The PublicIP of the EIP generated by resource through transfer from another account",
      "type" : "string"
    },
    "InstanceId" : {
      "description" : "The ID of the instance.",
      "type" : "string"
    },
    "PublicIpv4Pool" : {
      "description" : "The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool.",
      "type" : "string"
    },
    "Tags" : {
      "description" : "Any tags assigned to the EIP.",
      "type" : "array",
      "uniqueItems" : false,
      "insertionOrder" : false,
      "items" : {
        "$ref" : "#/definitions/Tag"
      }
    }
  },
  "handlers" : {
    "create" : {
      "permissions" : [ "ec2:AllocateAddress", "ec2:AcceptAddressTransfer", "ec2:DescribeAddresses", "ec2:AssociateAddress", "ec2:CreateTags" ]
    },
    "read" : {
      "permissions" : [ "ec2:DescribeAddresses" ]
    },
    "delete" : {
      "permissions" : [ "ec2:ReleaseAddress", "ec2:DescribeAddresses", "ec2:DisassociateAddress" ]
    },
    "update" : {
      "permissions" : [ "ec2:DescribeAddresses", "ec2:DisassociateAddress", "ec2:DeleteTags", "ec2:CreateTags", "ec2:AssociateAddress" ]
    },
    "list" : {
      "permissions" : [ "ec2:DescribeAddresses" ]
    }
  },
  "createOnlyProperties" : [ "/properties/Domain", "/properties/NetworkBorderGroup", "/properties/TransferAddress" ],
  "writeOnlyProperties" : [ "/properties/TransferAddress" ],
  "readOnlyProperties" : [ "/properties/PublicIp", "/properties/AllocationId" ],
  "primaryIdentifier" : [ "/properties/PublicIp", "/properties/AllocationId" ],
  "additionalProperties" : false
}