<filename>sdk/dotnet/Inputs/BucketArgs.cs// *** WARNING: this file was generated by Pulumi SDK Generator. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.AwsxGo.Inputs
{

    /// <summary>
    /// The set of arguments for constructing a Bucket resource.
    /// </summary>
    public sealed class BucketArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Sets the accelerate configuration of an existing bucket. Can be `Enabled` or `Suspended`.
        /// </summary>
        [Input("accelerationStatus")]
        public Input<string>? AccelerationStatus { get; set; }

        /// <summary>
        /// The [canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) to apply. Valid values are `private`, `public-read`, `public-read-write`, `aws-exec-read`, `authenticated-read`, and `log-delivery-write`. Defaults to `private`.  Conflicts with `grant`.
        /// </summary>
        [Input("acl")]
        public Input<string>? Acl { get; set; }

        /// <summary>
        /// The ARN of the bucket. Will be of format `arn:aws:s3:::bucketname`.
        /// </summary>
        [Input("arn")]
        public Input<string>? Arn { get; set; }

        /// <summary>
        /// The name of the bucket. If omitted, this provider will assign a random, unique name. Must be lowercase and less than or equal to 63 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
        /// </summary>
        [Input("bucket")]
        public Input<string>? BucketName { get; set; }

        /// <summary>
        /// Creates a unique bucket name beginning with the specified prefix. Conflicts with `bucket`. Must be lowercase and less than or equal to 37 characters in length. A full list of bucket naming rules [may be found here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
        /// </summary>
        [Input("bucketPrefix")]
        public Input<string>? BucketPrefix { get; set; }

        [Input("corsRules")]
        private InputList<Pulumi.Aws.S3.Inputs.BucketCorsRuleArgs>? _corsRules;

        /// <summary>
        /// A rule of [Cross-Origin Resource Sharing](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) (documented below).
        /// </summary>
        public InputList<Pulumi.Aws.S3.Inputs.BucketCorsRuleArgs> CorsRules
        {
            get => _corsRules ?? (_corsRules = new InputList<Pulumi.Aws.S3.Inputs.BucketCorsRuleArgs>());
            set => _corsRules = value;
        }

        /// <summary>
        /// A boolean that indicates all objects (including any [locked objects](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html)) should be deleted from the bucket so that the bucket can be destroyed without error. These objects are *not* recoverable.
        /// </summary>
        [Input("forceDestroy")]
        public Input<bool>? ForceDestroy { get; set; }

        [Input("grants")]
        private InputList<Pulumi.Aws.S3.Inputs.BucketGrantArgs>? _grants;

        /// <summary>
        /// An [ACL policy grant](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#sample-acl) (documented below). Conflicts with `acl`.
        /// </summary>
        public InputList<Pulumi.Aws.S3.Inputs.BucketGrantArgs> Grants
        {
            get => _grants ?? (_grants = new InputList<Pulumi.Aws.S3.Inputs.BucketGrantArgs>());
            set => _grants = value;
        }

        /// <summary>
        /// The [Route 53 Hosted Zone ID](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_website_region_endpoints) for this bucket's region.
        /// </summary>
        [Input("hostedZoneId")]
        public Input<string>? HostedZoneId { get; set; }

        [Input("lifecycleRules")]
        private InputList<Pulumi.Aws.S3.Inputs.BucketLifecycleRuleArgs>? _lifecycleRules;

        /// <summary>
        /// A configuration of [object lifecycle management](http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) (documented below).
        /// </summary>
        public InputList<Pulumi.Aws.S3.Inputs.BucketLifecycleRuleArgs> LifecycleRules
        {
            get => _lifecycleRules ?? (_lifecycleRules = new InputList<Pulumi.Aws.S3.Inputs.BucketLifecycleRuleArgs>());
            set => _lifecycleRules = value;
        }

        [Input("loggings")]
        private InputList<Pulumi.Aws.S3.Inputs.BucketLoggingArgs>? _loggings;

        /// <summary>
        /// A settings of [bucket logging](https://docs.aws.amazon.com/AmazonS3/latest/UG/ManagingBucketLogging.html) (documented below).
        /// </summary>
        public InputList<Pulumi.Aws.S3.Inputs.BucketLoggingArgs> Loggings
        {
            get => _loggings ?? (_loggings = new InputList<Pulumi.Aws.S3.Inputs.BucketLoggingArgs>());
            set => _loggings = value;
        }

        /// <summary>
        /// A configuration of [S3 object locking](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html) (documented below)
        /// </summary>
        [Input("objectLockConfiguration")]
        public Input<Pulumi.Aws.S3.Inputs.BucketObjectLockConfigurationArgs>? ObjectLockConfiguration { get; set; }

        /// <summary>
        /// A valid [bucket policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html) JSON document. Note that if the policy document is not specific enough (but still valid), this provider may view the policy as constantly changing in a `pulumi preview`. In this case, please make sure you use the verbose/specific version of the policy.
        /// </summary>
        [Input("policy")]
        public Input<string>? Policy { get; set; }

        /// <summary>
        /// A configuration of [replication configuration](http://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html) (documented below).
        /// </summary>
        [Input("replicationConfiguration")]
        public Input<Pulumi.Aws.S3.Inputs.BucketReplicationConfigurationArgs>? ReplicationConfiguration { get; set; }

        /// <summary>
        /// Specifies who should bear the cost of Amazon S3 data transfer.
        /// Can be either `BucketOwner` or `Requester`. By default, the owner of the S3 bucket would incur
        /// the costs of any data transfer. See [Requester Pays Buckets](http://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html)
        /// developer guide for more information.
        /// </summary>
        [Input("requestPayer")]
        public Input<string>? RequestPayer { get; set; }

        /// <summary>
        /// A configuration of [server-side encryption configuration](http://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html) (documented below)
        /// </summary>
        [Input("serverSideEncryptionConfiguration")]
        public Input<Pulumi.Aws.S3.Inputs.BucketServerSideEncryptionConfigurationArgs>? ServerSideEncryptionConfiguration { get; set; }

        [Input("tags")]
        private InputMap<string>? _tags;

        /// <summary>
        /// A map of tags to assign to the bucket. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
        /// </summary>
        public InputMap<string> Tags
        {
            get => _tags ?? (_tags = new InputMap<string>());
            set => _tags = value;
        }

        /// <summary>
        /// A state of [versioning](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html) (documented below)
        /// </summary>
        [Input("versioning")]
        public Input<Pulumi.Aws.S3.Inputs.BucketVersioningArgs>? Versioning { get; set; }

        /// <summary>
        /// A website object (documented below).
        /// </summary>
        [Input("website")]
        public Input<Pulumi.Aws.S3.Inputs.BucketWebsiteArgs>? Website { get; set; }

        /// <summary>
        /// The domain of the website endpoint, if the bucket is configured with a website. If not, this will be an empty string. This is used to create Route 53 alias records.
        /// </summary>
        [Input("websiteDomain")]
        public Input<string>? WebsiteDomain { get; set; }

        /// <summary>
        /// The website endpoint, if the bucket is configured with a website. If not, this will be an empty string.
        /// </summary>
        [Input("websiteEndpoint")]
        public Input<string>? WebsiteEndpoint { get; set; }

        public BucketArgs()
        {
        }
    }
}
