# 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 copy
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__ = ['AiFeatureStoreArgs', 'AiFeatureStore']

@pulumi.input_type
class AiFeatureStoreArgs:
    def __init__(__self__, *,
                 encryption_spec: Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']] = None,
                 force_destroy: Optional[pulumi.Input[bool]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 online_serving_config: Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']] = None,
                 online_storage_ttl_days: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a AiFeatureStore resource.
        :param pulumi.Input['AiFeatureStoreEncryptionSpecArgs'] encryption_spec: If set, both of the online and offline data storage will be secured by this key.
               Structure is documented below.
        :param pulumi.Input[bool] force_destroy: If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A set of key/value label pairs to assign to this Featurestore.
        :param pulumi.Input[str] name: The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        :param pulumi.Input['AiFeatureStoreOnlineServingConfigArgs'] online_serving_config: Config for online serving resources.
               Structure is documented below.
        :param pulumi.Input[int] online_storage_ttl_days: TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
               periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
               that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
               featurestore. If not set, default to 4000 days
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: The region of the dataset. eg us-central1
        """
        if encryption_spec is not None:
            pulumi.set(__self__, "encryption_spec", encryption_spec)
        if force_destroy is not None:
            pulumi.set(__self__, "force_destroy", force_destroy)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if online_serving_config is not None:
            pulumi.set(__self__, "online_serving_config", online_serving_config)
        if online_storage_ttl_days is not None:
            pulumi.set(__self__, "online_storage_ttl_days", online_storage_ttl_days)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if region is not None:
            pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter(name="encryptionSpec")
    def encryption_spec(self) -> Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']]:
        """
        If set, both of the online and offline data storage will be secured by this key.
        Structure is documented below.
        """
        return pulumi.get(self, "encryption_spec")

    @encryption_spec.setter
    def encryption_spec(self, value: Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']]):
        pulumi.set(self, "encryption_spec", value)

    @property
    @pulumi.getter(name="forceDestroy")
    def force_destroy(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        """
        return pulumi.get(self, "force_destroy")

    @force_destroy.setter
    def force_destroy(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "force_destroy", value)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        A set of key/value label pairs to assign to this Featurestore.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "labels", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="onlineServingConfig")
    def online_serving_config(self) -> Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']]:
        """
        Config for online serving resources.
        Structure is documented below.
        """
        return pulumi.get(self, "online_serving_config")

    @online_serving_config.setter
    def online_serving_config(self, value: Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']]):
        pulumi.set(self, "online_serving_config", value)

    @property
    @pulumi.getter(name="onlineStorageTtlDays")
    def online_storage_ttl_days(self) -> Optional[pulumi.Input[int]]:
        """
        TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
        periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
        that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
        featurestore. If not set, default to 4000 days
        """
        return pulumi.get(self, "online_storage_ttl_days")

    @online_storage_ttl_days.setter
    def online_storage_ttl_days(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "online_storage_ttl_days", value)

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @project.setter
    def project(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "project", value)

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        The region of the dataset. eg us-central1
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "region", value)


@pulumi.input_type
class _AiFeatureStoreState:
    def __init__(__self__, *,
                 create_time: Optional[pulumi.Input[str]] = None,
                 encryption_spec: Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']] = None,
                 etag: Optional[pulumi.Input[str]] = None,
                 force_destroy: Optional[pulumi.Input[bool]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 online_serving_config: Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']] = None,
                 online_storage_ttl_days: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 update_time: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering AiFeatureStore resources.
        :param pulumi.Input[str] create_time: The timestamp of when the featurestore was created in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        :param pulumi.Input['AiFeatureStoreEncryptionSpecArgs'] encryption_spec: If set, both of the online and offline data storage will be secured by this key.
               Structure is documented below.
        :param pulumi.Input[str] etag: Used to perform consistent read-modify-write updates.
        :param pulumi.Input[bool] force_destroy: If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A set of key/value label pairs to assign to this Featurestore.
        :param pulumi.Input[str] name: The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        :param pulumi.Input['AiFeatureStoreOnlineServingConfigArgs'] online_serving_config: Config for online serving resources.
               Structure is documented below.
        :param pulumi.Input[int] online_storage_ttl_days: TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
               periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
               that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
               featurestore. If not set, default to 4000 days
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: The region of the dataset. eg us-central1
        :param pulumi.Input[str] update_time: The timestamp of when the featurestore was last updated in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        if create_time is not None:
            pulumi.set(__self__, "create_time", create_time)
        if encryption_spec is not None:
            pulumi.set(__self__, "encryption_spec", encryption_spec)
        if etag is not None:
            pulumi.set(__self__, "etag", etag)
        if force_destroy is not None:
            pulumi.set(__self__, "force_destroy", force_destroy)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if online_serving_config is not None:
            pulumi.set(__self__, "online_serving_config", online_serving_config)
        if online_storage_ttl_days is not None:
            pulumi.set(__self__, "online_storage_ttl_days", online_storage_ttl_days)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if update_time is not None:
            pulumi.set(__self__, "update_time", update_time)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> Optional[pulumi.Input[str]]:
        """
        The timestamp of when the featurestore was created in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        return pulumi.get(self, "create_time")

    @create_time.setter
    def create_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "create_time", value)

    @property
    @pulumi.getter(name="encryptionSpec")
    def encryption_spec(self) -> Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']]:
        """
        If set, both of the online and offline data storage will be secured by this key.
        Structure is documented below.
        """
        return pulumi.get(self, "encryption_spec")

    @encryption_spec.setter
    def encryption_spec(self, value: Optional[pulumi.Input['AiFeatureStoreEncryptionSpecArgs']]):
        pulumi.set(self, "encryption_spec", value)

    @property
    @pulumi.getter
    def etag(self) -> Optional[pulumi.Input[str]]:
        """
        Used to perform consistent read-modify-write updates.
        """
        return pulumi.get(self, "etag")

    @etag.setter
    def etag(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "etag", value)

    @property
    @pulumi.getter(name="forceDestroy")
    def force_destroy(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        """
        return pulumi.get(self, "force_destroy")

    @force_destroy.setter
    def force_destroy(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "force_destroy", value)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        A set of key/value label pairs to assign to this Featurestore.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "labels", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="onlineServingConfig")
    def online_serving_config(self) -> Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']]:
        """
        Config for online serving resources.
        Structure is documented below.
        """
        return pulumi.get(self, "online_serving_config")

    @online_serving_config.setter
    def online_serving_config(self, value: Optional[pulumi.Input['AiFeatureStoreOnlineServingConfigArgs']]):
        pulumi.set(self, "online_serving_config", value)

    @property
    @pulumi.getter(name="onlineStorageTtlDays")
    def online_storage_ttl_days(self) -> Optional[pulumi.Input[int]]:
        """
        TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
        periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
        that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
        featurestore. If not set, default to 4000 days
        """
        return pulumi.get(self, "online_storage_ttl_days")

    @online_storage_ttl_days.setter
    def online_storage_ttl_days(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "online_storage_ttl_days", value)

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @project.setter
    def project(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "project", value)

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        The region of the dataset. eg us-central1
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="updateTime")
    def update_time(self) -> Optional[pulumi.Input[str]]:
        """
        The timestamp of when the featurestore was last updated in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        return pulumi.get(self, "update_time")

    @update_time.setter
    def update_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "update_time", value)


class AiFeatureStore(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 encryption_spec: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreEncryptionSpecArgs']]] = None,
                 force_destroy: Optional[pulumi.Input[bool]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 online_serving_config: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreOnlineServingConfigArgs']]] = None,
                 online_storage_ttl_days: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        A collection of DataItems and Annotations on them.

        To get more information about Featurestore, see:

        * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores)
        * How-to Guides
            * [Official Documentation](https://cloud.google.com/vertex-ai/docs)

        ## Example Usage
        ### Vertex Ai Featurestore

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            force_destroy=True,
            labels={
                "foo": "bar",
            },
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                fixed_node_count=2,
            ),
            region="us-central1")
        ```
        ### Vertex Ai Featurestore With Beta Fields

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            labels={
                "foo": "bar",
            },
            region="us-central1",
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                fixed_node_count=2,
            ),
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            online_storage_ttl_days=30,
            force_destroy=True,
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```
        ### Vertex Ai Featurestore Scaling

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            force_destroy=True,
            labels={
                "foo": "bar",
            },
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                scaling=gcp.vertex.AiFeatureStoreOnlineServingConfigScalingArgs(
                    max_node_count=10,
                    min_node_count=2,
                ),
            ),
            region="us-central1")
        ```

        ## Import

        Featurestore can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default projects/{{project}}/locations/{{region}}/featurestores/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{project}}/{{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{name}}
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['AiFeatureStoreEncryptionSpecArgs']] encryption_spec: If set, both of the online and offline data storage will be secured by this key.
               Structure is documented below.
        :param pulumi.Input[bool] force_destroy: If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A set of key/value label pairs to assign to this Featurestore.
        :param pulumi.Input[str] name: The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        :param pulumi.Input[pulumi.InputType['AiFeatureStoreOnlineServingConfigArgs']] online_serving_config: Config for online serving resources.
               Structure is documented below.
        :param pulumi.Input[int] online_storage_ttl_days: TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
               periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
               that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
               featurestore. If not set, default to 4000 days
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: The region of the dataset. eg us-central1
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: Optional[AiFeatureStoreArgs] = None,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        A collection of DataItems and Annotations on them.

        To get more information about Featurestore, see:

        * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores)
        * How-to Guides
            * [Official Documentation](https://cloud.google.com/vertex-ai/docs)

        ## Example Usage
        ### Vertex Ai Featurestore

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            force_destroy=True,
            labels={
                "foo": "bar",
            },
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                fixed_node_count=2,
            ),
            region="us-central1")
        ```
        ### Vertex Ai Featurestore With Beta Fields

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            labels={
                "foo": "bar",
            },
            region="us-central1",
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                fixed_node_count=2,
            ),
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            online_storage_ttl_days=30,
            force_destroy=True,
            opts=pulumi.ResourceOptions(provider=google_beta))
        ```
        ### Vertex Ai Featurestore Scaling

        ```python
        import pulumi
        import pulumi_gcp as gcp

        featurestore = gcp.vertex.AiFeatureStore("featurestore",
            encryption_spec=gcp.vertex.AiFeatureStoreEncryptionSpecArgs(
                kms_key_name="kms-name",
            ),
            force_destroy=True,
            labels={
                "foo": "bar",
            },
            online_serving_config=gcp.vertex.AiFeatureStoreOnlineServingConfigArgs(
                scaling=gcp.vertex.AiFeatureStoreOnlineServingConfigScalingArgs(
                    max_node_count=10,
                    min_node_count=2,
                ),
            ),
            region="us-central1")
        ```

        ## Import

        Featurestore can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default projects/{{project}}/locations/{{region}}/featurestores/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{project}}/{{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:vertex/aiFeatureStore:AiFeatureStore default {{name}}
        ```

        :param str resource_name: The name of the resource.
        :param AiFeatureStoreArgs 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(AiFeatureStoreArgs, 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,
                 encryption_spec: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreEncryptionSpecArgs']]] = None,
                 force_destroy: Optional[pulumi.Input[bool]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 online_serving_config: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreOnlineServingConfigArgs']]] = None,
                 online_storage_ttl_days: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        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__ = AiFeatureStoreArgs.__new__(AiFeatureStoreArgs)

            __props__.__dict__["encryption_spec"] = encryption_spec
            __props__.__dict__["force_destroy"] = force_destroy
            __props__.__dict__["labels"] = labels
            __props__.__dict__["name"] = name
            __props__.__dict__["online_serving_config"] = online_serving_config
            __props__.__dict__["online_storage_ttl_days"] = online_storage_ttl_days
            __props__.__dict__["project"] = project
            __props__.__dict__["region"] = region
            __props__.__dict__["create_time"] = None
            __props__.__dict__["etag"] = None
            __props__.__dict__["update_time"] = None
        super(AiFeatureStore, __self__).__init__(
            'gcp:vertex/aiFeatureStore:AiFeatureStore',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            create_time: Optional[pulumi.Input[str]] = None,
            encryption_spec: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreEncryptionSpecArgs']]] = None,
            etag: Optional[pulumi.Input[str]] = None,
            force_destroy: Optional[pulumi.Input[bool]] = None,
            labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            name: Optional[pulumi.Input[str]] = None,
            online_serving_config: Optional[pulumi.Input[pulumi.InputType['AiFeatureStoreOnlineServingConfigArgs']]] = None,
            online_storage_ttl_days: Optional[pulumi.Input[int]] = None,
            project: Optional[pulumi.Input[str]] = None,
            region: Optional[pulumi.Input[str]] = None,
            update_time: Optional[pulumi.Input[str]] = None) -> 'AiFeatureStore':
        """
        Get an existing AiFeatureStore 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] create_time: The timestamp of when the featurestore was created in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        :param pulumi.Input[pulumi.InputType['AiFeatureStoreEncryptionSpecArgs']] encryption_spec: If set, both of the online and offline data storage will be secured by this key.
               Structure is documented below.
        :param pulumi.Input[str] etag: Used to perform consistent read-modify-write updates.
        :param pulumi.Input[bool] force_destroy: If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A set of key/value label pairs to assign to this Featurestore.
        :param pulumi.Input[str] name: The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        :param pulumi.Input[pulumi.InputType['AiFeatureStoreOnlineServingConfigArgs']] online_serving_config: Config for online serving resources.
               Structure is documented below.
        :param pulumi.Input[int] online_storage_ttl_days: TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
               periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
               that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
               featurestore. If not set, default to 4000 days
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: The region of the dataset. eg us-central1
        :param pulumi.Input[str] update_time: The timestamp of when the featurestore was last updated in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _AiFeatureStoreState.__new__(_AiFeatureStoreState)

        __props__.__dict__["create_time"] = create_time
        __props__.__dict__["encryption_spec"] = encryption_spec
        __props__.__dict__["etag"] = etag
        __props__.__dict__["force_destroy"] = force_destroy
        __props__.__dict__["labels"] = labels
        __props__.__dict__["name"] = name
        __props__.__dict__["online_serving_config"] = online_serving_config
        __props__.__dict__["online_storage_ttl_days"] = online_storage_ttl_days
        __props__.__dict__["project"] = project
        __props__.__dict__["region"] = region
        __props__.__dict__["update_time"] = update_time
        return AiFeatureStore(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> pulumi.Output[str]:
        """
        The timestamp of when the featurestore was created in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter(name="encryptionSpec")
    def encryption_spec(self) -> pulumi.Output[Optional['outputs.AiFeatureStoreEncryptionSpec']]:
        """
        If set, both of the online and offline data storage will be secured by this key.
        Structure is documented below.
        """
        return pulumi.get(self, "encryption_spec")

    @property
    @pulumi.getter
    def etag(self) -> pulumi.Output[str]:
        """
        Used to perform consistent read-modify-write updates.
        """
        return pulumi.get(self, "etag")

    @property
    @pulumi.getter(name="forceDestroy")
    def force_destroy(self) -> pulumi.Output[Optional[bool]]:
        """
        If set to true, any EntityTypes and Features for this Featurestore will also be deleted
        """
        return pulumi.get(self, "force_destroy")

    @property
    @pulumi.getter
    def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        A set of key/value label pairs to assign to this Featurestore.
        """
        return pulumi.get(self, "labels")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The name of the Featurestore. This value may be up to 60 characters, and valid characters are [a-z0-9_]. The first character cannot be a number.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="onlineServingConfig")
    def online_serving_config(self) -> pulumi.Output[Optional['outputs.AiFeatureStoreOnlineServingConfig']]:
        """
        Config for online serving resources.
        Structure is documented below.
        """
        return pulumi.get(self, "online_serving_config")

    @property
    @pulumi.getter(name="onlineStorageTtlDays")
    def online_storage_ttl_days(self) -> pulumi.Output[Optional[int]]:
        """
        TTL in days for feature values that will be stored in online serving storage. The Feature Store online storage
        periodically removes obsolete feature values older than onlineStorageTtlDays since the feature generation time. Note
        that onlineStorageTtlDays should be less than or equal to offlineStorageTtlDays for each EntityType under a
        featurestore. If not set, default to 4000 days
        """
        return pulumi.get(self, "online_storage_ttl_days")

    @property
    @pulumi.getter
    def project(self) -> pulumi.Output[str]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @property
    @pulumi.getter
    def region(self) -> pulumi.Output[str]:
        """
        The region of the dataset. eg us-central1
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="updateTime")
    def update_time(self) -> pulumi.Output[str]:
        """
        The timestamp of when the featurestore was last updated in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits.
        """
        return pulumi.get(self, "update_time")

