text: # coding=utf-8
  # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
  # *** Do not edit by hand unless you're certain you know what you are doing! ***
  
  import warnings
  import pulumi
  import pulumi.runtime
  from typing import Any, Mapping, Optional, Sequence, Union, overload
  from .. import _utilities
  from . import outputs
  from ._inputs import *
  
  __all__ = ['AmiArgs', 'Ami']
  
  @pulumi.input_type
  class AmiArgs:
      def __init__(__self__, *,
                   architecture: Optional[pulumi.Input[str]] = None,
                   description: Optional[pulumi.Input[str]] = None,
                   ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]] = None,
                   ena_support: Optional[pulumi.Input[bool]] = None,
                   ephemeral_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]] = None,
                   image_location: Optional[pulumi.Input[str]] = None,
                   kernel_id: Optional[pulumi.Input[str]] = None,
                   name: Optional[pulumi.Input[str]] = None,
                   ramdisk_id: Optional[pulumi.Input[str]] = None,
                   root_device_name: Optional[pulumi.Input[str]] = None,
                   sriov_net_support: Optional[pulumi.Input[str]] = None,
                   tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   tags_all: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   virtualization_type: Optional[pulumi.Input[str]] = None):
          """
          The set of arguments for constructing a Ami resource.
          :param pulumi.Input[str] architecture: Machine architecture for created instances. Defaults to "x86_64".
          :param pulumi.Input[str] description: A longer, human-readable description for the AMI.
          :param pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]] ebs_block_devices: Nested block describing an EBS block device that should be
                 attached to created instances. The structure of this block is described below.
          :param pulumi.Input[bool] ena_support: Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          :param pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]] ephemeral_block_devices: Nested block describing an ephemeral block device that
                 should be attached to created instances. The structure of this block is described below.
          :param pulumi.Input[str] image_location: Path to an S3 object containing an image manifest, e.g. created
                 by the `ec2-upload-bundle` command in the EC2 command line tools.
          :param pulumi.Input[str] kernel_id: The id of the kernel image (AKI) that will be used as the paravirtual
                 kernel in created instances.
          :param pulumi.Input[str] name: A region-unique name for the AMI.
          :param pulumi.Input[str] ramdisk_id: The id of an initrd image (ARI) that will be used when booting the
                 created instances.
          :param pulumi.Input[str] root_device_name: The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          :param pulumi.Input[str] sriov_net_support: When set to "simple" (the default), enables enhanced networking
                 for created instances. No other value is supported at this time.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags_all: A map of tags assigned to the resource, including those inherited from the provider .
          :param pulumi.Input[str] virtualization_type: Keyword to choose what virtualization mode created instances
                 will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
                 changes the set of further arguments that are required, as described below.
          """
          if architecture is not None:
              pulumi.set(__self__, "architecture", architecture)
          if description is not None:
              pulumi.set(__self__, "description", description)
          if ebs_block_devices is not None:
              pulumi.set(__self__, "ebs_block_devices", ebs_block_devices)
          if ena_support is not None:
              pulumi.set(__self__, "ena_support", ena_support)
          if ephemeral_block_devices is not None:
              pulumi.set(__self__, "ephemeral_block_devices", ephemeral_block_devices)
          if image_location is not None:
              pulumi.set(__self__, "image_location", image_location)
          if kernel_id is not None:
              pulumi.set(__self__, "kernel_id", kernel_id)
          if name is not None:
              pulumi.set(__self__, "name", name)
          if ramdisk_id is not None:
              pulumi.set(__self__, "ramdisk_id", ramdisk_id)
          if root_device_name is not None:
              pulumi.set(__self__, "root_device_name", root_device_name)
          if sriov_net_support is not None:
              pulumi.set(__self__, "sriov_net_support", sriov_net_support)
          if tags is not None:
              pulumi.set(__self__, "tags", tags)
          if tags_all is not None:
              pulumi.set(__self__, "tags_all", tags_all)
          if virtualization_type is not None:
              pulumi.set(__self__, "virtualization_type", virtualization_type)
  
      @property
      @pulumi.getter
      def architecture(self) -> Optional[pulumi.Input[str]]:
          """
          Machine architecture for created instances. Defaults to "x86_64".
          """
          return pulumi.get(self, "architecture")
  
      @architecture.setter
      def architecture(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "architecture", value)
  
      @property
      @pulumi.getter
      def description(self) -> Optional[pulumi.Input[str]]:
          """
          A longer, human-readable description for the AMI.
          """
          return pulumi.get(self, "description")
  
      @description.setter
      def description(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "description", value)
  
      @property
      @pulumi.getter(name="ebsBlockDevices")
      def ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]]:
          """
          Nested block describing an EBS block device that should be
          attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ebs_block_devices")
  
      @ebs_block_devices.setter
      def ebs_block_devices(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]]):
          pulumi.set(self, "ebs_block_devices", value)
  
      @property
      @pulumi.getter(name="enaSupport")
      def ena_support(self) -> Optional[pulumi.Input[bool]]:
          """
          Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          """
          return pulumi.get(self, "ena_support")
  
      @ena_support.setter
      def ena_support(self, value: Optional[pulumi.Input[bool]]):
          pulumi.set(self, "ena_support", value)
  
      @property
      @pulumi.getter(name="ephemeralBlockDevices")
      def ephemeral_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]]:
          """
          Nested block describing an ephemeral block device that
          should be attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ephemeral_block_devices")
  
      @ephemeral_block_devices.setter
      def ephemeral_block_devices(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]]):
          pulumi.set(self, "ephemeral_block_devices", value)
  
      @property
      @pulumi.getter(name="imageLocation")
      def image_location(self) -> Optional[pulumi.Input[str]]:
          """
          Path to an S3 object containing an image manifest, e.g. created
          by the `ec2-upload-bundle` command in the EC2 command line tools.
          """
          return pulumi.get(self, "image_location")
  
      @image_location.setter
      def image_location(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "image_location", value)
  
      @property
      @pulumi.getter(name="kernelId")
      def kernel_id(self) -> Optional[pulumi.Input[str]]:
          """
          The id of the kernel image (AKI) that will be used as the paravirtual
          kernel in created instances.
          """
          return pulumi.get(self, "kernel_id")
  
      @kernel_id.setter
      def kernel_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "kernel_id", value)
  
      @property
      @pulumi.getter
      def name(self) -> Optional[pulumi.Input[str]]:
          """
          A region-unique name for the AMI.
          """
          return pulumi.get(self, "name")
  
      @name.setter
      def name(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "name", value)
  
      @property
      @pulumi.getter(name="ramdiskId")
      def ramdisk_id(self) -> Optional[pulumi.Input[str]]:
          """
          The id of an initrd image (ARI) that will be used when booting the
          created instances.
          """
          return pulumi.get(self, "ramdisk_id")
  
      @ramdisk_id.setter
      def ramdisk_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "ramdisk_id", value)
  
      @property
      @pulumi.getter(name="rootDeviceName")
      def root_device_name(self) -> Optional[pulumi.Input[str]]:
          """
          The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          """
          return pulumi.get(self, "root_device_name")
  
      @root_device_name.setter
      def root_device_name(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "root_device_name", value)
  
      @property
      @pulumi.getter(name="sriovNetSupport")
      def sriov_net_support(self) -> Optional[pulumi.Input[str]]:
          """
          When set to "simple" (the default), enables enhanced networking
          for created instances. No other value is supported at this time.
          """
          return pulumi.get(self, "sriov_net_support")
  
      @sriov_net_support.setter
      def sriov_net_support(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "sriov_net_support", value)
  
      @property
      @pulumi.getter
      def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
          """
          A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          """
          return pulumi.get(self, "tags")
  
      @tags.setter
      def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
          pulumi.set(self, "tags", value)
  
      @property
      @pulumi.getter(name="tagsAll")
      def tags_all(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
          """
          A map of tags assigned to the resource, including those inherited from the provider .
          """
          return pulumi.get(self, "tags_all")
  
      @tags_all.setter
      def tags_all(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
          pulumi.set(self, "tags_all", value)
  
      @property
      @pulumi.getter(name="virtualizationType")
      def virtualization_type(self) -> Optional[pulumi.Input[str]]:
          """
          Keyword to choose what virtualization mode created instances
          will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
          changes the set of further arguments that are required, as described below.
          """
          return pulumi.get(self, "virtualization_type")
  
      @virtualization_type.setter
      def virtualization_type(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "virtualization_type", value)
  
  
  @pulumi.input_type
  class _AmiState:
      def __init__(__self__, *,
                   architecture: Optional[pulumi.Input[str]] = None,
                   arn: Optional[pulumi.Input[str]] = None,
                   description: Optional[pulumi.Input[str]] = None,
                   ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]] = None,
                   ena_support: Optional[pulumi.Input[bool]] = None,
                   ephemeral_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]] = None,
                   hypervisor: Optional[pulumi.Input[str]] = None,
                   image_location: Optional[pulumi.Input[str]] = None,
                   image_owner_alias: Optional[pulumi.Input[str]] = None,
                   image_type: Optional[pulumi.Input[str]] = None,
                   kernel_id: Optional[pulumi.Input[str]] = None,
                   manage_ebs_snapshots: Optional[pulumi.Input[bool]] = None,
                   name: Optional[pulumi.Input[str]] = None,
                   owner_id: Optional[pulumi.Input[str]] = None,
                   platform: Optional[pulumi.Input[str]] = None,
                   platform_details: Optional[pulumi.Input[str]] = None,
                   public: Optional[pulumi.Input[bool]] = None,
                   ramdisk_id: Optional[pulumi.Input[str]] = None,
                   root_device_name: Optional[pulumi.Input[str]] = None,
                   root_snapshot_id: Optional[pulumi.Input[str]] = None,
                   sriov_net_support: Optional[pulumi.Input[str]] = None,
                   tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   tags_all: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   usage_operation: Optional[pulumi.Input[str]] = None,
                   virtualization_type: Optional[pulumi.Input[str]] = None):
          """
          Input properties used for looking up and filtering Ami resources.
          :param pulumi.Input[str] architecture: Machine architecture for created instances. Defaults to "x86_64".
          :param pulumi.Input[str] arn: The ARN of the AMI.
          :param pulumi.Input[str] description: A longer, human-readable description for the AMI.
          :param pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]] ebs_block_devices: Nested block describing an EBS block device that should be
                 attached to created instances. The structure of this block is described below.
          :param pulumi.Input[bool] ena_support: Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          :param pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]] ephemeral_block_devices: Nested block describing an ephemeral block device that
                 should be attached to created instances. The structure of this block is described below.
          :param pulumi.Input[str] hypervisor: The hypervisor type of the image.
          :param pulumi.Input[str] image_location: Path to an S3 object containing an image manifest, e.g. created
                 by the `ec2-upload-bundle` command in the EC2 command line tools.
          :param pulumi.Input[str] image_owner_alias: The AWS account alias (for example, amazon, self) or the AWS account ID of the AMI owner.
          :param pulumi.Input[str] image_type: The type of image.
          :param pulumi.Input[str] kernel_id: The id of the kernel image (AKI) that will be used as the paravirtual
                 kernel in created instances.
          :param pulumi.Input[str] name: A region-unique name for the AMI.
          :param pulumi.Input[str] owner_id: The AWS account ID of the image owner.
          :param pulumi.Input[str] platform: This value is set to windows for Windows AMIs; otherwise, it is blank.
          :param pulumi.Input[str] platform_details: The platform details associated with the billing code of the AMI.
          :param pulumi.Input[bool] public: Indicates whether the image has public launch permissions.
          :param pulumi.Input[str] ramdisk_id: The id of an initrd image (ARI) that will be used when booting the
                 created instances.
          :param pulumi.Input[str] root_device_name: The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          :param pulumi.Input[str] root_snapshot_id: The Snapshot ID for the root volume (for EBS-backed AMIs)
          :param pulumi.Input[str] sriov_net_support: When set to "simple" (the default), enables enhanced networking
                 for created instances. No other value is supported at this time.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags_all: A map of tags assigned to the resource, including those inherited from the provider .
          :param pulumi.Input[str] usage_operation: The operation of the Amazon EC2 instance and the billing code that is associated with the AMI.
          :param pulumi.Input[str] virtualization_type: Keyword to choose what virtualization mode created instances
                 will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
                 changes the set of further arguments that are required, as described below.
          """
          if architecture is not None:
              pulumi.set(__self__, "architecture", architecture)
          if arn is not None:
              pulumi.set(__self__, "arn", arn)
          if description is not None:
              pulumi.set(__self__, "description", description)
          if ebs_block_devices is not None:
              pulumi.set(__self__, "ebs_block_devices", ebs_block_devices)
          if ena_support is not None:
              pulumi.set(__self__, "ena_support", ena_support)
          if ephemeral_block_devices is not None:
              pulumi.set(__self__, "ephemeral_block_devices", ephemeral_block_devices)
          if hypervisor is not None:
              pulumi.set(__self__, "hypervisor", hypervisor)
          if image_location is not None:
              pulumi.set(__self__, "image_location", image_location)
          if image_owner_alias is not None:
              pulumi.set(__self__, "image_owner_alias", image_owner_alias)
          if image_type is not None:
              pulumi.set(__self__, "image_type", image_type)
          if kernel_id is not None:
              pulumi.set(__self__, "kernel_id", kernel_id)
          if manage_ebs_snapshots is not None:
              pulumi.set(__self__, "manage_ebs_snapshots", manage_ebs_snapshots)
          if name is not None:
              pulumi.set(__self__, "name", name)
          if owner_id is not None:
              pulumi.set(__self__, "owner_id", owner_id)
          if platform is not None:
              pulumi.set(__self__, "platform", platform)
          if platform_details is not None:
              pulumi.set(__self__, "platform_details", platform_details)
          if public is not None:
              pulumi.set(__self__, "public", public)
          if ramdisk_id is not None:
              pulumi.set(__self__, "ramdisk_id", ramdisk_id)
          if root_device_name is not None:
              pulumi.set(__self__, "root_device_name", root_device_name)
          if root_snapshot_id is not None:
              pulumi.set(__self__, "root_snapshot_id", root_snapshot_id)
          if sriov_net_support is not None:
              pulumi.set(__self__, "sriov_net_support", sriov_net_support)
          if tags is not None:
              pulumi.set(__self__, "tags", tags)
          if tags_all is not None:
              pulumi.set(__self__, "tags_all", tags_all)
          if usage_operation is not None:
              pulumi.set(__self__, "usage_operation", usage_operation)
          if virtualization_type is not None:
              pulumi.set(__self__, "virtualization_type", virtualization_type)
  
      @property
      @pulumi.getter
      def architecture(self) -> Optional[pulumi.Input[str]]:
          """
          Machine architecture for created instances. Defaults to "x86_64".
          """
          return pulumi.get(self, "architecture")
  
      @architecture.setter
      def architecture(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "architecture", value)
  
      @property
      @pulumi.getter
      def arn(self) -> Optional[pulumi.Input[str]]:
          """
          The ARN of the AMI.
          """
          return pulumi.get(self, "arn")
  
      @arn.setter
      def arn(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "arn", value)
  
      @property
      @pulumi.getter
      def description(self) -> Optional[pulumi.Input[str]]:
          """
          A longer, human-readable description for the AMI.
          """
          return pulumi.get(self, "description")
  
      @description.setter
      def description(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "description", value)
  
      @property
      @pulumi.getter(name="ebsBlockDevices")
      def ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]]:
          """
          Nested block describing an EBS block device that should be
          attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ebs_block_devices")
  
      @ebs_block_devices.setter
      def ebs_block_devices(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEbsBlockDeviceArgs']]]]):
          pulumi.set(self, "ebs_block_devices", value)
  
      @property
      @pulumi.getter(name="enaSupport")
      def ena_support(self) -> Optional[pulumi.Input[bool]]:
          """
          Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          """
          return pulumi.get(self, "ena_support")
  
      @ena_support.setter
      def ena_support(self, value: Optional[pulumi.Input[bool]]):
          pulumi.set(self, "ena_support", value)
  
      @property
      @pulumi.getter(name="ephemeralBlockDevices")
      def ephemeral_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]]:
          """
          Nested block describing an ephemeral block device that
          should be attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ephemeral_block_devices")
  
      @ephemeral_block_devices.setter
      def ephemeral_block_devices(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AmiEphemeralBlockDeviceArgs']]]]):
          pulumi.set(self, "ephemeral_block_devices", value)
  
      @property
      @pulumi.getter
      def hypervisor(self) -> Optional[pulumi.Input[str]]:
          """
          The hypervisor type of the image.
          """
          return pulumi.get(self, "hypervisor")
  
      @hypervisor.setter
      def hypervisor(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "hypervisor", value)
  
      @property
      @pulumi.getter(name="imageLocation")
      def image_location(self) -> Optional[pulumi.Input[str]]:
          """
          Path to an S3 object containing an image manifest, e.g. created
          by the `ec2-upload-bundle` command in the EC2 command line tools.
          """
          return pulumi.get(self, "image_location")
  
      @image_location.setter
      def image_location(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "image_location", value)
  
      @property
      @pulumi.getter(name="imageOwnerAlias")
      def image_owner_alias(self) -> Optional[pulumi.Input[str]]:
          """
          The AWS account alias (for example, amazon, self) or the AWS account ID of the AMI owner.
          """
          return pulumi.get(self, "image_owner_alias")
  
      @image_owner_alias.setter
      def image_owner_alias(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "image_owner_alias", value)
  
      @property
      @pulumi.getter(name="imageType")
      def image_type(self) -> Optional[pulumi.Input[str]]:
          """
          The type of image.
          """
          return pulumi.get(self, "image_type")
  
      @image_type.setter
      def image_type(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "image_type", value)
  
      @property
      @pulumi.getter(name="kernelId")
      def kernel_id(self) -> Optional[pulumi.Input[str]]:
          """
          The id of the kernel image (AKI) that will be used as the paravirtual
          kernel in created instances.
          """
          return pulumi.get(self, "kernel_id")
  
      @kernel_id.setter
      def kernel_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "kernel_id", value)
  
      @property
      @pulumi.getter(name="manageEbsSnapshots")
      def manage_ebs_snapshots(self) -> Optional[pulumi.Input[bool]]:
          return pulumi.get(self, "manage_ebs_snapshots")
  
      @manage_ebs_snapshots.setter
      def manage_ebs_snapshots(self, value: Optional[pulumi.Input[bool]]):
          pulumi.set(self, "manage_ebs_snapshots", value)
  
      @property
      @pulumi.getter
      def name(self) -> Optional[pulumi.Input[str]]:
          """
          A region-unique name for the AMI.
          """
          return pulumi.get(self, "name")
  
      @name.setter
      def name(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "name", value)
  
      @property
      @pulumi.getter(name="ownerId")
      def owner_id(self) -> Optional[pulumi.Input[str]]:
          """
          The AWS account ID of the image owner.
          """
          return pulumi.get(self, "owner_id")
  
      @owner_id.setter
      def owner_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "owner_id", value)
  
      @property
      @pulumi.getter
      def platform(self) -> Optional[pulumi.Input[str]]:
          """
          This value is set to windows for Windows AMIs; otherwise, it is blank.
          """
          return pulumi.get(self, "platform")
  
      @platform.setter
      def platform(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "platform", value)
  
      @property
      @pulumi.getter(name="platformDetails")
      def platform_details(self) -> Optional[pulumi.Input[str]]:
          """
          The platform details associated with the billing code of the AMI.
          """
          return pulumi.get(self, "platform_details")
  
      @platform_details.setter
      def platform_details(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "platform_details", value)
  
      @property
      @pulumi.getter
      def public(self) -> Optional[pulumi.Input[bool]]:
          """
          Indicates whether the image has public launch permissions.
          """
          return pulumi.get(self, "public")
  
      @public.setter
      def public(self, value: Optional[pulumi.Input[bool]]):
          pulumi.set(self, "public", value)
  
      @property
      @pulumi.getter(name="ramdiskId")
      def ramdisk_id(self) -> Optional[pulumi.Input[str]]:
          """
          The id of an initrd image (ARI) that will be used when booting the
          created instances.
          """
          return pulumi.get(self, "ramdisk_id")
  
      @ramdisk_id.setter
      def ramdisk_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "ramdisk_id", value)
  
      @property
      @pulumi.getter(name="rootDeviceName")
      def root_device_name(self) -> Optional[pulumi.Input[str]]:
          """
          The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          """
          return pulumi.get(self, "root_device_name")
  
      @root_device_name.setter
      def root_device_name(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "root_device_name", value)
  
      @property
      @pulumi.getter(name="rootSnapshotId")
      def root_snapshot_id(self) -> Optional[pulumi.Input[str]]:
          """
          The Snapshot ID for the root volume (for EBS-backed AMIs)
          """
          return pulumi.get(self, "root_snapshot_id")
  
      @root_snapshot_id.setter
      def root_snapshot_id(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "root_snapshot_id", value)
  
      @property
      @pulumi.getter(name="sriovNetSupport")
      def sriov_net_support(self) -> Optional[pulumi.Input[str]]:
          """
          When set to "simple" (the default), enables enhanced networking
          for created instances. No other value is supported at this time.
          """
          return pulumi.get(self, "sriov_net_support")
  
      @sriov_net_support.setter
      def sriov_net_support(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "sriov_net_support", value)
  
      @property
      @pulumi.getter
      def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
          """
          A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          """
          return pulumi.get(self, "tags")
  
      @tags.setter
      def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
          pulumi.set(self, "tags", value)
  
      @property
      @pulumi.getter(name="tagsAll")
      def tags_all(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
          """
          A map of tags assigned to the resource, including those inherited from the provider .
          """
          return pulumi.get(self, "tags_all")
  
      @tags_all.setter
      def tags_all(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
          pulumi.set(self, "tags_all", value)
  
      @property
      @pulumi.getter(name="usageOperation")
      def usage_operation(self) -> Optional[pulumi.Input[str]]:
          """
          The operation of the Amazon EC2 instance and the billing code that is associated with the AMI.
          """
          return pulumi.get(self, "usage_operation")
  
      @usage_operation.setter
      def usage_operation(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "usage_operation", value)
  
      @property
      @pulumi.getter(name="virtualizationType")
      def virtualization_type(self) -> Optional[pulumi.Input[str]]:
          """
          Keyword to choose what virtualization mode created instances
          will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
          changes the set of further arguments that are required, as described below.
          """
          return pulumi.get(self, "virtualization_type")
  
      @virtualization_type.setter
      def virtualization_type(self, value: Optional[pulumi.Input[str]]):
          pulumi.set(self, "virtualization_type", value)
  
  
  class Ami(pulumi.CustomResource):
      @overload
      def __init__(__self__,
                   resource_name: str,
                   opts: Optional[pulumi.ResourceOptions] = None,
                   architecture: Optional[pulumi.Input[str]] = None,
                   description: Optional[pulumi.Input[str]] = None,
                   ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEbsBlockDeviceArgs']]]]] = None,
                   ena_support: Optional[pulumi.Input[bool]] = None,
                   ephemeral_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEphemeralBlockDeviceArgs']]]]] = None,
                   image_location: Optional[pulumi.Input[str]] = None,
                   kernel_id: Optional[pulumi.Input[str]] = None,
                   name: Optional[pulumi.Input[str]] = None,
                   ramdisk_id: Optional[pulumi.Input[str]] = None,
                   root_device_name: Optional[pulumi.Input[str]] = None,
                   sriov_net_support: Optional[pulumi.Input[str]] = None,
                   tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   tags_all: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   virtualization_type: Optional[pulumi.Input[str]] = None,
                   __props__=None):
          """
          The AMI resource allows the creation and management of a completely-custom
          *Amazon Machine Image* (AMI).
  
          If you just want to duplicate an existing AMI, possibly copying it to another
          region, it's better to use `ec2.AmiCopy` instead.
  
          If you just want to share an existing AMI with another AWS account,
          it's better to use `ec2.AmiLaunchPermission` instead.
  
          ## Example Usage
  
          ```python
          import pulumi
          import pulumi_aws as aws
  
          # Create an AMI that will start a machine whose root device is backed by
          # an EBS volume populated from a snapshot. It is assumed that such a snapshot
          # already exists with the id "snap-xxxxxxxx".
          example = aws.ec2.Ami("example",
              ebs_block_devices=[aws.ec2.AmiEbsBlockDeviceArgs(
                  device_name="/dev/xvda",
                  snapshot_id="snap-xxxxxxxx",
                  volume_size=8,
              )],
              root_device_name="/dev/xvda",
              virtualization_type="hvm")
          ```
  
          ## Import
  
          `aws_ami` can be imported using the ID of the AMI, e.g.
  
          ```sh
           $ pulumi import aws:ec2/ami:Ami example ami-12345678
          ```
  
          :param str resource_name: The name of the resource.
          :param pulumi.ResourceOptions opts: Options for the resource.
          :param pulumi.Input[str] architecture: Machine architecture for created instances. Defaults to "x86_64".
          :param pulumi.Input[str] description: A longer, human-readable description for the AMI.
          :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEbsBlockDeviceArgs']]]] ebs_block_devices: Nested block describing an EBS block device that should be
                 attached to created instances. The structure of this block is described below.
          :param pulumi.Input[bool] ena_support: Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEphemeralBlockDeviceArgs']]]] ephemeral_block_devices: Nested block describing an ephemeral block device that
                 should be attached to created instances. The structure of this block is described below.
          :param pulumi.Input[str] image_location: Path to an S3 object containing an image manifest, e.g. created
                 by the `ec2-upload-bundle` command in the EC2 command line tools.
          :param pulumi.Input[str] kernel_id: The id of the kernel image (AKI) that will be used as the paravirtual
                 kernel in created instances.
          :param pulumi.Input[str] name: A region-unique name for the AMI.
          :param pulumi.Input[str] ramdisk_id: The id of an initrd image (ARI) that will be used when booting the
                 created instances.
          :param pulumi.Input[str] root_device_name: The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          :param pulumi.Input[str] sriov_net_support: When set to "simple" (the default), enables enhanced networking
                 for created instances. No other value is supported at this time.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags_all: A map of tags assigned to the resource, including those inherited from the provider .
          :param pulumi.Input[str] virtualization_type: Keyword to choose what virtualization mode created instances
                 will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
                 changes the set of further arguments that are required, as described below.
          """
          ...
      @overload
      def __init__(__self__,
                   resource_name: str,
                   args: Optional[AmiArgs] = None,
                   opts: Optional[pulumi.ResourceOptions] = None):
          """
          The AMI resource allows the creation and management of a completely-custom
          *Amazon Machine Image* (AMI).
  
          If you just want to duplicate an existing AMI, possibly copying it to another
          region, it's better to use `ec2.AmiCopy` instead.
  
          If you just want to share an existing AMI with another AWS account,
          it's better to use `ec2.AmiLaunchPermission` instead.
  
          ## Example Usage
  
          ```python
          import pulumi
          import pulumi_aws as aws
  
          # Create an AMI that will start a machine whose root device is backed by
          # an EBS volume populated from a snapshot. It is assumed that such a snapshot
          # already exists with the id "snap-xxxxxxxx".
          example = aws.ec2.Ami("example",
              ebs_block_devices=[aws.ec2.AmiEbsBlockDeviceArgs(
                  device_name="/dev/xvda",
                  snapshot_id="snap-xxxxxxxx",
                  volume_size=8,
              )],
              root_device_name="/dev/xvda",
              virtualization_type="hvm")
          ```
  
          ## Import
  
          `aws_ami` can be imported using the ID of the AMI, e.g.
  
          ```sh
           $ pulumi import aws:ec2/ami:Ami example ami-12345678
          ```
  
          :param str resource_name: The name of the resource.
          :param AmiArgs args: The arguments to use to populate this resource's properties.
          :param pulumi.ResourceOptions opts: Options for the resource.
          """
          ...
      def __init__(__self__, resource_name: str, *args, **kwargs):
          resource_args, opts = _utilities.get_resource_args_opts(AmiArgs, pulumi.ResourceOptions, *args, **kwargs)
          if resource_args is not None:
              __self__._internal_init(resource_name, opts, **resource_args.__dict__)
          else:
              __self__._internal_init(resource_name, *args, **kwargs)
  
      def _internal_init(__self__,
                   resource_name: str,
                   opts: Optional[pulumi.ResourceOptions] = None,
                   architecture: Optional[pulumi.Input[str]] = None,
                   description: Optional[pulumi.Input[str]] = None,
                   ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEbsBlockDeviceArgs']]]]] = None,
                   ena_support: Optional[pulumi.Input[bool]] = None,
                   ephemeral_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEphemeralBlockDeviceArgs']]]]] = None,
                   image_location: Optional[pulumi.Input[str]] = None,
                   kernel_id: Optional[pulumi.Input[str]] = None,
                   name: Optional[pulumi.Input[str]] = None,
                   ramdisk_id: Optional[pulumi.Input[str]] = None,
                   root_device_name: Optional[pulumi.Input[str]] = None,
                   sriov_net_support: Optional[pulumi.Input[str]] = None,
                   tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   tags_all: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                   virtualization_type: Optional[pulumi.Input[str]] = None,
                   __props__=None):
          if opts is None:
              opts = pulumi.ResourceOptions()
          if not isinstance(opts, pulumi.ResourceOptions):
              raise TypeError('Expected resource options to be a ResourceOptions instance')
          if opts.version is None:
              opts.version = _utilities.get_version()
          if opts.id is None:
              if __props__ is not None:
                  raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
              __props__ = AmiArgs.__new__(AmiArgs)
  
              __props__.__dict__["architecture"] = architecture
              __props__.__dict__["description"] = description
              __props__.__dict__["ebs_block_devices"] = ebs_block_devices
              __props__.__dict__["ena_support"] = ena_support
              __props__.__dict__["ephemeral_block_devices"] = ephemeral_block_devices
              __props__.__dict__["image_location"] = image_location
              __props__.__dict__["kernel_id"] = kernel_id
              __props__.__dict__["name"] = name
              __props__.__dict__["ramdisk_id"] = ramdisk_id
              __props__.__dict__["root_device_name"] = root_device_name
              __props__.__dict__["sriov_net_support"] = sriov_net_support
              __props__.__dict__["tags"] = tags
              __props__.__dict__["tags_all"] = tags_all
              __props__.__dict__["virtualization_type"] = virtualization_type
              __props__.__dict__["arn"] = None
              __props__.__dict__["hypervisor"] = None
              __props__.__dict__["image_owner_alias"] = None
              __props__.__dict__["image_type"] = None
              __props__.__dict__["manage_ebs_snapshots"] = None
              __props__.__dict__["owner_id"] = None
              __props__.__dict__["platform"] = None
              __props__.__dict__["platform_details"] = None
              __props__.__dict__["public"] = None
              __props__.__dict__["root_snapshot_id"] = None
              __props__.__dict__["usage_operation"] = None
          super(Ami, __self__).__init__(
              'aws:ec2/ami:Ami',
              resource_name,
              __props__,
              opts)
  
      @staticmethod
      def get(resource_name: str,
              id: pulumi.Input[str],
              opts: Optional[pulumi.ResourceOptions] = None,
              architecture: Optional[pulumi.Input[str]] = None,
              arn: Optional[pulumi.Input[str]] = None,
              description: Optional[pulumi.Input[str]] = None,
              ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEbsBlockDeviceArgs']]]]] = None,
              ena_support: Optional[pulumi.Input[bool]] = None,
              ephemeral_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEphemeralBlockDeviceArgs']]]]] = None,
              hypervisor: Optional[pulumi.Input[str]] = None,
              image_location: Optional[pulumi.Input[str]] = None,
              image_owner_alias: Optional[pulumi.Input[str]] = None,
              image_type: Optional[pulumi.Input[str]] = None,
              kernel_id: Optional[pulumi.Input[str]] = None,
              manage_ebs_snapshots: Optional[pulumi.Input[bool]] = None,
              name: Optional[pulumi.Input[str]] = None,
              owner_id: Optional[pulumi.Input[str]] = None,
              platform: Optional[pulumi.Input[str]] = None,
              platform_details: Optional[pulumi.Input[str]] = None,
              public: Optional[pulumi.Input[bool]] = None,
              ramdisk_id: Optional[pulumi.Input[str]] = None,
              root_device_name: Optional[pulumi.Input[str]] = None,
              root_snapshot_id: Optional[pulumi.Input[str]] = None,
              sriov_net_support: Optional[pulumi.Input[str]] = None,
              tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
              tags_all: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
              usage_operation: Optional[pulumi.Input[str]] = None,
              virtualization_type: Optional[pulumi.Input[str]] = None) -> 'Ami':
          """
          Get an existing Ami resource's state with the given name, id, and optional extra
          properties used to qualify the lookup.
  
          :param str resource_name: The unique name of the resulting resource.
          :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
          :param pulumi.ResourceOptions opts: Options for the resource.
          :param pulumi.Input[str] architecture: Machine architecture for created instances. Defaults to "x86_64".
          :param pulumi.Input[str] arn: The ARN of the AMI.
          :param pulumi.Input[str] description: A longer, human-readable description for the AMI.
          :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEbsBlockDeviceArgs']]]] ebs_block_devices: Nested block describing an EBS block device that should be
                 attached to created instances. The structure of this block is described below.
          :param pulumi.Input[bool] ena_support: Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AmiEphemeralBlockDeviceArgs']]]] ephemeral_block_devices: Nested block describing an ephemeral block device that
                 should be attached to created instances. The structure of this block is described below.
          :param pulumi.Input[str] hypervisor: The hypervisor type of the image.
          :param pulumi.Input[str] image_location: Path to an S3 object containing an image manifest, e.g. created
                 by the `ec2-upload-bundle` command in the EC2 command line tools.
          :param pulumi.Input[str] image_owner_alias: The AWS account alias (for example, amazon, self) or the AWS account ID of the AMI owner.
          :param pulumi.Input[str] image_type: The type of image.
          :param pulumi.Input[str] kernel_id: The id of the kernel image (AKI) that will be used as the paravirtual
                 kernel in created instances.
          :param pulumi.Input[str] name: A region-unique name for the AMI.
          :param pulumi.Input[str] owner_id: The AWS account ID of the image owner.
          :param pulumi.Input[str] platform: This value is set to windows for Windows AMIs; otherwise, it is blank.
          :param pulumi.Input[str] platform_details: The platform details associated with the billing code of the AMI.
          :param pulumi.Input[bool] public: Indicates whether the image has public launch permissions.
          :param pulumi.Input[str] ramdisk_id: The id of an initrd image (ARI) that will be used when booting the
                 created instances.
          :param pulumi.Input[str] root_device_name: The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          :param pulumi.Input[str] root_snapshot_id: The Snapshot ID for the root volume (for EBS-backed AMIs)
          :param pulumi.Input[str] sriov_net_support: When set to "simple" (the default), enables enhanced networking
                 for created instances. No other value is supported at this time.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags_all: A map of tags assigned to the resource, including those inherited from the provider .
          :param pulumi.Input[str] usage_operation: The operation of the Amazon EC2 instance and the billing code that is associated with the AMI.
          :param pulumi.Input[str] virtualization_type: Keyword to choose what virtualization mode created instances
                 will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
                 changes the set of further arguments that are required, as described below.
          """
          opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
  
          __props__ = _AmiState.__new__(_AmiState)
  
          __props__.__dict__["architecture"] = architecture
          __props__.__dict__["arn"] = arn
          __props__.__dict__["description"] = description
          __props__.__dict__["ebs_block_devices"] = ebs_block_devices
          __props__.__dict__["ena_support"] = ena_support
          __props__.__dict__["ephemeral_block_devices"] = ephemeral_block_devices
          __props__.__dict__["hypervisor"] = hypervisor
          __props__.__dict__["image_location"] = image_location
          __props__.__dict__["image_owner_alias"] = image_owner_alias
          __props__.__dict__["image_type"] = image_type
          __props__.__dict__["kernel_id"] = kernel_id
          __props__.__dict__["manage_ebs_snapshots"] = manage_ebs_snapshots
          __props__.__dict__["name"] = name
          __props__.__dict__["owner_id"] = owner_id
          __props__.__dict__["platform"] = platform
          __props__.__dict__["platform_details"] = platform_details
          __props__.__dict__["public"] = public
          __props__.__dict__["ramdisk_id"] = ramdisk_id
          __props__.__dict__["root_device_name"] = root_device_name
          __props__.__dict__["root_snapshot_id"] = root_snapshot_id
          __props__.__dict__["sriov_net_support"] = sriov_net_support
          __props__.__dict__["tags"] = tags
          __props__.__dict__["tags_all"] = tags_all
          __props__.__dict__["usage_operation"] = usage_operation
          __props__.__dict__["virtualization_type"] = virtualization_type
          return Ami(resource_name, opts=opts, __props__=__props__)
  
      @property
      @pulumi.getter
      def architecture(self) -> pulumi.Output[Optional[str]]:
          """
          Machine architecture for created instances. Defaults to "x86_64".
          """
          return pulumi.get(self, "architecture")
  
      @property
      @pulumi.getter
      def arn(self) -> pulumi.Output[str]:
          """
          The ARN of the AMI.
          """
          return pulumi.get(self, "arn")
  
      @property
      @pulumi.getter
      def description(self) -> pulumi.Output[Optional[str]]:
          """
          A longer, human-readable description for the AMI.
          """
          return pulumi.get(self, "description")
  
      @property
      @pulumi.getter(name="ebsBlockDevices")
      def ebs_block_devices(self) -> pulumi.Output[Sequence['outputs.AmiEbsBlockDevice']]:
          """
          Nested block describing an EBS block device that should be
          attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ebs_block_devices")
  
      @property
      @pulumi.getter(name="enaSupport")
      def ena_support(self) -> pulumi.Output[Optional[bool]]:
          """
          Specifies whether enhanced networking with ENA is enabled. Defaults to `false`.
          """
          return pulumi.get(self, "ena_support")
  
      @property
      @pulumi.getter(name="ephemeralBlockDevices")
      def ephemeral_block_devices(self) -> pulumi.Output[Sequence['outputs.AmiEphemeralBlockDevice']]:
          """
          Nested block describing an ephemeral block device that
          should be attached to created instances. The structure of this block is described below.
          """
          return pulumi.get(self, "ephemeral_block_devices")
  
      @property
      @pulumi.getter
      def hypervisor(self) -> pulumi.Output[str]:
          """
          The hypervisor type of the image.
          """
          return pulumi.get(self, "hypervisor")
  
      @property
      @pulumi.getter(name="imageLocation")
      def image_location(self) -> pulumi.Output[str]:
          """
          Path to an S3 object containing an image manifest, e.g. created
          by the `ec2-upload-bundle` command in the EC2 command line tools.
          """
          return pulumi.get(self, "image_location")
  
      @property
      @pulumi.getter(name="imageOwnerAlias")
      def image_owner_alias(self) -> pulumi.Output[str]:
          """
          The AWS account alias (for example, amazon, self) or the AWS account ID of the AMI owner.
          """
          return pulumi.get(self, "image_owner_alias")
  
      @property
      @pulumi.getter(name="imageType")
      def image_type(self) -> pulumi.Output[str]:
          """
          The type of image.
          """
          return pulumi.get(self, "image_type")
  
      @property
      @pulumi.getter(name="kernelId")
      def kernel_id(self) -> pulumi.Output[Optional[str]]:
          """
          The id of the kernel image (AKI) that will be used as the paravirtual
          kernel in created instances.
          """
          return pulumi.get(self, "kernel_id")
  
      @property
      @pulumi.getter(name="manageEbsSnapshots")
      def manage_ebs_snapshots(self) -> pulumi.Output[bool]:
          return pulumi.get(self, "manage_ebs_snapshots")
  
      @property
      @pulumi.getter
      def name(self) -> pulumi.Output[str]:
          """
          A region-unique name for the AMI.
          """
          return pulumi.get(self, "name")
  
      @property
      @pulumi.getter(name="ownerId")
      def owner_id(self) -> pulumi.Output[str]:
          """
          The AWS account ID of the image owner.
          """
          return pulumi.get(self, "owner_id")
  
      @property
      @pulumi.getter
      def platform(self) -> pulumi.Output[str]:
          """
          This value is set to windows for Windows AMIs; otherwise, it is blank.
          """
          return pulumi.get(self, "platform")
  
      @property
      @pulumi.getter(name="platformDetails")
      def platform_details(self) -> pulumi.Output[str]:
          """
          The platform details associated with the billing code of the AMI.
          """
          return pulumi.get(self, "platform_details")
  
      @property
      @pulumi.getter
      def public(self) -> pulumi.Output[bool]:
          """
          Indicates whether the image has public launch permissions.
          """
          return pulumi.get(self, "public")
  
      @property
      @pulumi.getter(name="ramdiskId")
      def ramdisk_id(self) -> pulumi.Output[Optional[str]]:
          """
          The id of an initrd image (ARI) that will be used when booting the
          created instances.
          """
          return pulumi.get(self, "ramdisk_id")
  
      @property
      @pulumi.getter(name="rootDeviceName")
      def root_device_name(self) -> pulumi.Output[Optional[str]]:
          """
          The name of the root device (for example, `/dev/sda1`, or `/dev/xvda`).
          """
          return pulumi.get(self, "root_device_name")
  
      @property
      @pulumi.getter(name="rootSnapshotId")
      def root_snapshot_id(self) -> pulumi.Output[str]:
          """
          The Snapshot ID for the root volume (for EBS-backed AMIs)
          """
          return pulumi.get(self, "root_snapshot_id")
  
      @property
      @pulumi.getter(name="sriovNetSupport")
      def sriov_net_support(self) -> pulumi.Output[Optional[str]]:
          """
          When set to "simple" (the default), enables enhanced networking
          for created instances. No other value is supported at this time.
          """
          return pulumi.get(self, "sriov_net_support")
  
      @property
      @pulumi.getter
      def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
          """
          A map of tags to assign to the resource. .If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
          """
          return pulumi.get(self, "tags")
  
      @property
      @pulumi.getter(name="tagsAll")
      def tags_all(self) -> pulumi.Output[Mapping[str, str]]:
          """
          A map of tags assigned to the resource, including those inherited from the provider .
          """
          return pulumi.get(self, "tags_all")
  
      @property
      @pulumi.getter(name="usageOperation")
      def usage_operation(self) -> pulumi.Output[str]:
          """
          The operation of the Amazon EC2 instance and the billing code that is associated with the AMI.
          """
          return pulumi.get(self, "usage_operation")
  
      @property
      @pulumi.getter(name="virtualizationType")
      def virtualization_type(self) -> pulumi.Output[Optional[str]]:
          """
          Keyword to choose what virtualization mode created instances
          will use. Can be either "paravirtual" (the default) or "hvm". The choice of virtualization type
          changes the set of further arguments that are required, as described below.
          """
          return pulumi.get(self, "virtualization_type")
  
  