All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cloudshiftdev.awscdk.services.dynamodb.CfnTableProps.kt Maven / Gradle / Ivy

The newest version!
@file:Suppress("RedundantVisibilityModifier","RedundantUnitReturnType","RemoveRedundantQualifierName","unused","UnusedImport","ClassName","REDUNDANT_PROJECTION","DEPRECATION")

package io.cloudshiftdev.awscdk.services.dynamodb

import io.cloudshiftdev.awscdk.CfnTag
import io.cloudshiftdev.awscdk.IResolvable
import io.cloudshiftdev.awscdk.common.CdkDslMarker
import io.cloudshiftdev.awscdk.common.CdkObject
import io.cloudshiftdev.awscdk.common.CdkObjectWrappers
import kotlin.Any
import kotlin.Boolean
import kotlin.String
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName

/**
 * Properties for defining a `CfnTable`.
 *
 * Example:
 *
 * ```
 * // The code below shows an example of how to instantiate this type.
 * // The values are placeholders you should change.
 * import io.cloudshiftdev.awscdk.services.dynamodb.*;
 * Object policyDocument;
 * CfnTableProps cfnTableProps = CfnTableProps.builder()
 * .keySchema(List.of(KeySchemaProperty.builder()
 * .attributeName("attributeName")
 * .keyType("keyType")
 * .build()))
 * // the properties below are optional
 * .attributeDefinitions(List.of(AttributeDefinitionProperty.builder()
 * .attributeName("attributeName")
 * .attributeType("attributeType")
 * .build()))
 * .billingMode("billingMode")
 * .contributorInsightsSpecification(ContributorInsightsSpecificationProperty.builder()
 * .enabled(false)
 * .build())
 * .deletionProtectionEnabled(false)
 * .globalSecondaryIndexes(List.of(GlobalSecondaryIndexProperty.builder()
 * .indexName("indexName")
 * .keySchema(List.of(KeySchemaProperty.builder()
 * .attributeName("attributeName")
 * .keyType("keyType")
 * .build()))
 * .projection(ProjectionProperty.builder()
 * .nonKeyAttributes(List.of("nonKeyAttributes"))
 * .projectionType("projectionType")
 * .build())
 * // the properties below are optional
 * .contributorInsightsSpecification(ContributorInsightsSpecificationProperty.builder()
 * .enabled(false)
 * .build())
 * .onDemandThroughput(OnDemandThroughputProperty.builder()
 * .maxReadRequestUnits(123)
 * .maxWriteRequestUnits(123)
 * .build())
 * .provisionedThroughput(ProvisionedThroughputProperty.builder()
 * .readCapacityUnits(123)
 * .writeCapacityUnits(123)
 * .build())
 * .build()))
 * .importSourceSpecification(ImportSourceSpecificationProperty.builder()
 * .inputFormat("inputFormat")
 * .s3BucketSource(S3BucketSourceProperty.builder()
 * .s3Bucket("s3Bucket")
 * // the properties below are optional
 * .s3BucketOwner("s3BucketOwner")
 * .s3KeyPrefix("s3KeyPrefix")
 * .build())
 * // the properties below are optional
 * .inputCompressionType("inputCompressionType")
 * .inputFormatOptions(InputFormatOptionsProperty.builder()
 * .csv(CsvProperty.builder()
 * .delimiter("delimiter")
 * .headerList(List.of("headerList"))
 * .build())
 * .build())
 * .build())
 * .kinesisStreamSpecification(KinesisStreamSpecificationProperty.builder()
 * .streamArn("streamArn")
 * // the properties below are optional
 * .approximateCreationDateTimePrecision("approximateCreationDateTimePrecision")
 * .build())
 * .localSecondaryIndexes(List.of(LocalSecondaryIndexProperty.builder()
 * .indexName("indexName")
 * .keySchema(List.of(KeySchemaProperty.builder()
 * .attributeName("attributeName")
 * .keyType("keyType")
 * .build()))
 * .projection(ProjectionProperty.builder()
 * .nonKeyAttributes(List.of("nonKeyAttributes"))
 * .projectionType("projectionType")
 * .build())
 * .build()))
 * .onDemandThroughput(OnDemandThroughputProperty.builder()
 * .maxReadRequestUnits(123)
 * .maxWriteRequestUnits(123)
 * .build())
 * .pointInTimeRecoverySpecification(PointInTimeRecoverySpecificationProperty.builder()
 * .pointInTimeRecoveryEnabled(false)
 * .build())
 * .provisionedThroughput(ProvisionedThroughputProperty.builder()
 * .readCapacityUnits(123)
 * .writeCapacityUnits(123)
 * .build())
 * .resourcePolicy(ResourcePolicyProperty.builder()
 * .policyDocument(policyDocument)
 * .build())
 * .sseSpecification(SSESpecificationProperty.builder()
 * .sseEnabled(false)
 * // the properties below are optional
 * .kmsMasterKeyId("kmsMasterKeyId")
 * .sseType("sseType")
 * .build())
 * .streamSpecification(StreamSpecificationProperty.builder()
 * .streamViewType("streamViewType")
 * // the properties below are optional
 * .resourcePolicy(ResourcePolicyProperty.builder()
 * .policyDocument(policyDocument)
 * .build())
 * .build())
 * .tableClass("tableClass")
 * .tableName("tableName")
 * .tags(List.of(CfnTag.builder()
 * .key("key")
 * .value("value")
 * .build()))
 * .timeToLiveSpecification(TimeToLiveSpecificationProperty.builder()
 * .enabled(false)
 * // the properties below are optional
 * .attributeName("attributeName")
 * .build())
 * .build();
 * ```
 *
 * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)
 */
public interface CfnTableProps {
  /**
   * A list of attributes that describe the key schema for the table and indexes.
   *
   * This property is required to create a DynamoDB table.
   *
   * Update requires: [Some
   * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
   * . Replacement if you edit an existing AttributeDefinition.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-attributedefinitions)
   */
  public fun attributeDefinitions(): Any? = unwrap(this).getAttributeDefinitions()

  /**
   * Specify how you are charged for read and write throughput and how you manage capacity.
   *
   * Valid values include:
   *
   * * `PROVISIONED` - We recommend using `PROVISIONED` for predictable workloads. `PROVISIONED`
   * sets the billing mode to [Provisioned
   * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)
   * .
   * * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for unpredictable workloads.
   * `PAY_PER_REQUEST` sets the billing mode to [On-Demand
   * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)
   * .
   *
   * If not specified, the default is `PROVISIONED` .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-billingmode)
   */
  public fun billingMode(): String? = unwrap(this).getBillingMode()

  /**
   * The settings used to enable or disable CloudWatch Contributor Insights for the specified table.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-contributorinsightsspecification)
   */
  public fun contributorInsightsSpecification(): Any? =
      unwrap(this).getContributorInsightsSpecification()

  /**
   * Determines if a table is protected from deletion.
   *
   * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
   * default. For more information, see [Using deletion
   * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
   * in the *Amazon DynamoDB Developer Guide* .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-deletionprotectionenabled)
   */
  public fun deletionProtectionEnabled(): Any? = unwrap(this).getDeletionProtectionEnabled()

  /**
   * Global secondary indexes to be created on the table. You can create up to 20 global secondary
   * indexes.
   *
   *
   * If you update a table to include a new global secondary index, AWS CloudFormation initiates the
   * index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for the
   * index to complete creation because the backfilling phase can take a long time, depending on the
   * size of the table. You can't use the index or update the table until the index's status is
   * `ACTIVE` . You can track its status by using the DynamoDB
   * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
   * command.
   *
   * If you add or delete an index during an update, we recommend that you don't update any other
   * resources. If your stack fails to update and is rolled back while adding a new index, you must
   * manually delete the index.
   *
   * Updates are not supported. The following are exceptions:
   *
   * * If you update either the contributor insights specification or the provisioned throughput
   * values of global secondary indexes, you can update the table without interruption.
   * * You can delete or add one global secondary index without interruption. If you do both in the
   * same update (for example, by changing the index's logical ID), the update fails.
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-globalsecondaryindexes)
   */
  public fun globalSecondaryIndexes(): Any? = unwrap(this).getGlobalSecondaryIndexes()

  /**
   * Specifies the properties of data being imported from the S3 bucket source to the table.
   *
   *
   * If you specify the `ImportSourceSpecification` property, and also specify either the
   * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
   * the IAM entity creating/updating stack must have `UpdateTable` permission.
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-importsourcespecification)
   */
  public fun importSourceSpecification(): Any? = unwrap(this).getImportSourceSpecification()

  /**
   * Specifies the attributes that make up the primary key for the table.
   *
   * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
   * property.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-keyschema)
   */
  public fun keySchema(): Any

  /**
   * The Kinesis Data Streams configuration for the specified table.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-kinesisstreamspecification)
   */
  public fun kinesisStreamSpecification(): Any? = unwrap(this).getKinesisStreamSpecification()

  /**
   * Local secondary indexes to be created on the table.
   *
   * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key value.
   * The size of each hash key can be up to 10 gigabytes.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-localsecondaryindexes)
   */
  public fun localSecondaryIndexes(): Any? = unwrap(this).getLocalSecondaryIndexes()

  /**
   * Sets the maximum number of read and write units for the specified on-demand table.
   *
   * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` , or
   * both.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ondemandthroughput)
   */
  public fun onDemandThroughput(): Any? = unwrap(this).getOnDemandThroughput()

  /**
   * The settings used to enable point in time recovery.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-pointintimerecoveryspecification)
   */
  public fun pointInTimeRecoverySpecification(): Any? =
      unwrap(this).getPointInTimeRecoverySpecification()

  /**
   * Throughput for the specified table, which consists of values for `ReadCapacityUnits` and
   * `WriteCapacityUnits` .
   *
   * For more information about the contents of a provisioned throughput structure, see [Amazon
   * DynamoDB Table
   * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
   * .
   *
   * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
   * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-provisionedthroughput)
   */
  public fun provisionedThroughput(): Any? = unwrap(this).getProvisionedThroughput()

  /**
   * A resource-based policy document that contains permissions to add to the specified table.
   *
   * In a CloudFormation template, you can provide the policy in JSON or YAML format because
   * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information about
   * resource-based policies, see [Using resource-based policies for
   * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
   * and [Resource-based policy
   * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
   *
   * When you attach a resource-based policy while creating a table, the policy creation is
   * *strongly consistent* . For information about the considerations that you should keep in mind
   * while attaching a resource-based policy, see [Resource-based policy
   * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
   * .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-resourcepolicy)
   */
  public fun resourcePolicy(): Any? = unwrap(this).getResourcePolicy()

  /**
   * Specifies the settings to enable server-side encryption.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ssespecification)
   */
  public fun sseSpecification(): Any? = unwrap(this).getSseSpecification()

  /**
   * The settings for the DynamoDB table stream, which capture changes to items stored in the table.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-streamspecification)
   */
  public fun streamSpecification(): Any? = unwrap(this).getStreamSpecification()

  /**
   * The table class of the new table.
   *
   * Valid values are `STANDARD` and `STANDARD_INFREQUENT_ACCESS` .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tableclass)
   */
  public fun tableClass(): String? = unwrap(this).getTableClass()

  /**
   * A name for the table.
   *
   * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID
   * for the table name. For more information, see [Name
   * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
   *
   *
   * If you specify a name, you cannot perform updates that require replacement of this resource.
   * You can perform updates that require no or some interruption. If you must replace the resource,
   * specify a new name.
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tablename)
   */
  public fun tableName(): String? = unwrap(this).getTableName()

  /**
   * An array of key-value pairs to apply to this resource.
   *
   * For more information, see
   * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
   * .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tags)
   */
  public fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

  /**
   * Specifies the Time to Live (TTL) settings for the table.
   *
   *
   * For detailed information about the limits in DynamoDB, see [Limits in Amazon
   * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
   * Amazon DynamoDB Developer Guide.
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-timetolivespecification)
   */
  public fun timeToLiveSpecification(): Any? = unwrap(this).getTimeToLiveSpecification()

  /**
   * A builder for [CfnTableProps]
   */
  @CdkDslMarker
  public interface Builder {
    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    public fun attributeDefinitions(attributeDefinitions: IResolvable)

    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    public fun attributeDefinitions(attributeDefinitions: List)

    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    public fun attributeDefinitions(vararg attributeDefinitions: Any)

    /**
     * @param billingMode Specify how you are charged for read and write throughput and how you
     * manage capacity.
     * Valid values include:
     *
     * * `PROVISIONED` - We recommend using `PROVISIONED` for predictable workloads. `PROVISIONED`
     * sets the billing mode to [Provisioned
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)
     * .
     * * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for unpredictable workloads.
     * `PAY_PER_REQUEST` sets the billing mode to [On-Demand
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)
     * .
     *
     * If not specified, the default is `PROVISIONED` .
     */
    public fun billingMode(billingMode: String)

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    public fun contributorInsightsSpecification(contributorInsightsSpecification: IResolvable)

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    public
        fun contributorInsightsSpecification(contributorInsightsSpecification: CfnTable.ContributorInsightsSpecificationProperty)

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c1644175a1c61b50768b3c763c697b7e8547a4ca008ed780d5a622061281063d")
    public
        fun contributorInsightsSpecification(contributorInsightsSpecification: CfnTable.ContributorInsightsSpecificationProperty.Builder.() -> Unit)

    /**
     * @param deletionProtectionEnabled Determines if a table is protected from deletion.
     * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
     * default. For more information, see [Using deletion
     * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
     * in the *Amazon DynamoDB Developer Guide* .
     */
    public fun deletionProtectionEnabled(deletionProtectionEnabled: Boolean)

    /**
     * @param deletionProtectionEnabled Determines if a table is protected from deletion.
     * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
     * default. For more information, see [Using deletion
     * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
     * in the *Amazon DynamoDB Developer Guide* .
     */
    public fun deletionProtectionEnabled(deletionProtectionEnabled: IResolvable)

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    public fun globalSecondaryIndexes(globalSecondaryIndexes: IResolvable)

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    public fun globalSecondaryIndexes(globalSecondaryIndexes: List)

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    public fun globalSecondaryIndexes(vararg globalSecondaryIndexes: Any)

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    public fun importSourceSpecification(importSourceSpecification: IResolvable)

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    public
        fun importSourceSpecification(importSourceSpecification: CfnTable.ImportSourceSpecificationProperty)

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("fcfa4b8b3fb01671f8a472422d5bd789be1593d7487e0f98b1d617e0645a214e")
    public
        fun importSourceSpecification(importSourceSpecification: CfnTable.ImportSourceSpecificationProperty.Builder.() -> Unit)

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    public fun keySchema(keySchema: IResolvable)

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    public fun keySchema(keySchema: List)

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    public fun keySchema(vararg keySchema: Any)

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    public fun kinesisStreamSpecification(kinesisStreamSpecification: IResolvable)

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    public
        fun kinesisStreamSpecification(kinesisStreamSpecification: CfnTable.KinesisStreamSpecificationProperty)

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("70d5545f2eff26e32d19027ab689ca7eaf9191a4441f9db3ea3cb083a8c2f56d")
    public
        fun kinesisStreamSpecification(kinesisStreamSpecification: CfnTable.KinesisStreamSpecificationProperty.Builder.() -> Unit)

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    public fun localSecondaryIndexes(localSecondaryIndexes: IResolvable)

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    public fun localSecondaryIndexes(localSecondaryIndexes: List)

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    public fun localSecondaryIndexes(vararg localSecondaryIndexes: Any)

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    public fun onDemandThroughput(onDemandThroughput: IResolvable)

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    public fun onDemandThroughput(onDemandThroughput: CfnTable.OnDemandThroughputProperty)

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("cc718963042c53d725537d46f01dd6981e8cf3c1c5ce260b1ef47d116d832b4e")
    public
        fun onDemandThroughput(onDemandThroughput: CfnTable.OnDemandThroughputProperty.Builder.() -> Unit)

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    public fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: IResolvable)

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    public
        fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: CfnTable.PointInTimeRecoverySpecificationProperty)

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c2250375551145bd7288d51c1502890121e3bcf6df7830522d1458980b0ebe40")
    public
        fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: CfnTable.PointInTimeRecoverySpecificationProperty.Builder.() -> Unit)

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    public fun provisionedThroughput(provisionedThroughput: IResolvable)

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    public fun provisionedThroughput(provisionedThroughput: CfnTable.ProvisionedThroughputProperty)

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c9a9a02708658c9ae241699a945ae841cd09bf4fe303863b1431bdcfc7edcf5c")
    public
        fun provisionedThroughput(provisionedThroughput: CfnTable.ProvisionedThroughputProperty.Builder.() -> Unit)

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    public fun resourcePolicy(resourcePolicy: IResolvable)

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    public fun resourcePolicy(resourcePolicy: CfnTable.ResourcePolicyProperty)

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("10e80221d99cc74afc329f0fd4a910679ebd3c01b9d358a32301040ee1b08a26")
    public fun resourcePolicy(resourcePolicy: CfnTable.ResourcePolicyProperty.Builder.() -> Unit)

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    public fun sseSpecification(sseSpecification: IResolvable)

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    public fun sseSpecification(sseSpecification: CfnTable.SSESpecificationProperty)

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("71a481891b9640fd468b95afe711468471315e15742dd89b43ecfd37efbf8554")
    public
        fun sseSpecification(sseSpecification: CfnTable.SSESpecificationProperty.Builder.() -> Unit)

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    public fun streamSpecification(streamSpecification: IResolvable)

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    public fun streamSpecification(streamSpecification: CfnTable.StreamSpecificationProperty)

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("82d2f865f7c33aa163d77d7474b75c0a467e6d3e662eef7765229b5c6e8d8951")
    public
        fun streamSpecification(streamSpecification: CfnTable.StreamSpecificationProperty.Builder.() -> Unit)

    /**
     * @param tableClass The table class of the new table.
     * Valid values are `STANDARD` and `STANDARD_INFREQUENT_ACCESS` .
     */
    public fun tableClass(tableClass: String)

    /**
     * @param tableName A name for the table.
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the table name. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     *
     * If you specify a name, you cannot perform updates that require replacement of this resource.
     * You can perform updates that require no or some interruption. If you must replace the resource,
     * specify a new name.
     */
    public fun tableName(tableName: String)

    /**
     * @param tags An array of key-value pairs to apply to this resource.
     * For more information, see
     * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
     * .
     */
    public fun tags(tags: List)

    /**
     * @param tags An array of key-value pairs to apply to this resource.
     * For more information, see
     * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
     * .
     */
    public fun tags(vararg tags: CfnTag)

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    public fun timeToLiveSpecification(timeToLiveSpecification: IResolvable)

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    public
        fun timeToLiveSpecification(timeToLiveSpecification: CfnTable.TimeToLiveSpecificationProperty)

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("538d06314b2d8f6c9f1ad9a4139ade75fa91cbf0137fb6283ebc5f4aabeae1d6")
    public
        fun timeToLiveSpecification(timeToLiveSpecification: CfnTable.TimeToLiveSpecificationProperty.Builder.() -> Unit)
  }

  private class BuilderImpl : Builder {
    private val cdkBuilder: software.amazon.awscdk.services.dynamodb.CfnTableProps.Builder =
        software.amazon.awscdk.services.dynamodb.CfnTableProps.builder()

    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    override fun attributeDefinitions(attributeDefinitions: IResolvable) {
      cdkBuilder.attributeDefinitions(attributeDefinitions.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    override fun attributeDefinitions(attributeDefinitions: List) {
      cdkBuilder.attributeDefinitions(attributeDefinitions.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param attributeDefinitions A list of attributes that describe the key schema for the table
     * and indexes.
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     */
    override fun attributeDefinitions(vararg attributeDefinitions: Any): Unit =
        attributeDefinitions(attributeDefinitions.toList())

    /**
     * @param billingMode Specify how you are charged for read and write throughput and how you
     * manage capacity.
     * Valid values include:
     *
     * * `PROVISIONED` - We recommend using `PROVISIONED` for predictable workloads. `PROVISIONED`
     * sets the billing mode to [Provisioned
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)
     * .
     * * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for unpredictable workloads.
     * `PAY_PER_REQUEST` sets the billing mode to [On-Demand
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)
     * .
     *
     * If not specified, the default is `PROVISIONED` .
     */
    override fun billingMode(billingMode: String) {
      cdkBuilder.billingMode(billingMode)
    }

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    override fun contributorInsightsSpecification(contributorInsightsSpecification: IResolvable) {
      cdkBuilder.contributorInsightsSpecification(contributorInsightsSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    override
        fun contributorInsightsSpecification(contributorInsightsSpecification: CfnTable.ContributorInsightsSpecificationProperty) {
      cdkBuilder.contributorInsightsSpecification(contributorInsightsSpecification.let(CfnTable.ContributorInsightsSpecificationProperty.Companion::unwrap))
    }

    /**
     * @param contributorInsightsSpecification The settings used to enable or disable CloudWatch
     * Contributor Insights for the specified table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c1644175a1c61b50768b3c763c697b7e8547a4ca008ed780d5a622061281063d")
    override
        fun contributorInsightsSpecification(contributorInsightsSpecification: CfnTable.ContributorInsightsSpecificationProperty.Builder.() -> Unit):
        Unit =
        contributorInsightsSpecification(CfnTable.ContributorInsightsSpecificationProperty(contributorInsightsSpecification))

    /**
     * @param deletionProtectionEnabled Determines if a table is protected from deletion.
     * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
     * default. For more information, see [Using deletion
     * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
     * in the *Amazon DynamoDB Developer Guide* .
     */
    override fun deletionProtectionEnabled(deletionProtectionEnabled: Boolean) {
      cdkBuilder.deletionProtectionEnabled(deletionProtectionEnabled)
    }

    /**
     * @param deletionProtectionEnabled Determines if a table is protected from deletion.
     * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
     * default. For more information, see [Using deletion
     * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
     * in the *Amazon DynamoDB Developer Guide* .
     */
    override fun deletionProtectionEnabled(deletionProtectionEnabled: IResolvable) {
      cdkBuilder.deletionProtectionEnabled(deletionProtectionEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    override fun globalSecondaryIndexes(globalSecondaryIndexes: IResolvable) {
      cdkBuilder.globalSecondaryIndexes(globalSecondaryIndexes.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    override fun globalSecondaryIndexes(globalSecondaryIndexes: List) {
      cdkBuilder.globalSecondaryIndexes(globalSecondaryIndexes.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param globalSecondaryIndexes Global secondary indexes to be created on the table. You can
     * create up to 20 global secondary indexes.
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     */
    override fun globalSecondaryIndexes(vararg globalSecondaryIndexes: Any): Unit =
        globalSecondaryIndexes(globalSecondaryIndexes.toList())

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    override fun importSourceSpecification(importSourceSpecification: IResolvable) {
      cdkBuilder.importSourceSpecification(importSourceSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    override
        fun importSourceSpecification(importSourceSpecification: CfnTable.ImportSourceSpecificationProperty) {
      cdkBuilder.importSourceSpecification(importSourceSpecification.let(CfnTable.ImportSourceSpecificationProperty.Companion::unwrap))
    }

    /**
     * @param importSourceSpecification Specifies the properties of data being imported from the S3
     * bucket source to the table.
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("fcfa4b8b3fb01671f8a472422d5bd789be1593d7487e0f98b1d617e0645a214e")
    override
        fun importSourceSpecification(importSourceSpecification: CfnTable.ImportSourceSpecificationProperty.Builder.() -> Unit):
        Unit =
        importSourceSpecification(CfnTable.ImportSourceSpecificationProperty(importSourceSpecification))

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    override fun keySchema(keySchema: IResolvable) {
      cdkBuilder.keySchema(keySchema.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    override fun keySchema(keySchema: List) {
      cdkBuilder.keySchema(keySchema.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param keySchema Specifies the attributes that make up the primary key for the table. 
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     */
    override fun keySchema(vararg keySchema: Any): Unit = keySchema(keySchema.toList())

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    override fun kinesisStreamSpecification(kinesisStreamSpecification: IResolvable) {
      cdkBuilder.kinesisStreamSpecification(kinesisStreamSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    override
        fun kinesisStreamSpecification(kinesisStreamSpecification: CfnTable.KinesisStreamSpecificationProperty) {
      cdkBuilder.kinesisStreamSpecification(kinesisStreamSpecification.let(CfnTable.KinesisStreamSpecificationProperty.Companion::unwrap))
    }

    /**
     * @param kinesisStreamSpecification The Kinesis Data Streams configuration for the specified
     * table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("70d5545f2eff26e32d19027ab689ca7eaf9191a4441f9db3ea3cb083a8c2f56d")
    override
        fun kinesisStreamSpecification(kinesisStreamSpecification: CfnTable.KinesisStreamSpecificationProperty.Builder.() -> Unit):
        Unit =
        kinesisStreamSpecification(CfnTable.KinesisStreamSpecificationProperty(kinesisStreamSpecification))

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    override fun localSecondaryIndexes(localSecondaryIndexes: IResolvable) {
      cdkBuilder.localSecondaryIndexes(localSecondaryIndexes.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    override fun localSecondaryIndexes(localSecondaryIndexes: List) {
      cdkBuilder.localSecondaryIndexes(localSecondaryIndexes.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param localSecondaryIndexes Local secondary indexes to be created on the table.
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     */
    override fun localSecondaryIndexes(vararg localSecondaryIndexes: Any): Unit =
        localSecondaryIndexes(localSecondaryIndexes.toList())

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    override fun onDemandThroughput(onDemandThroughput: IResolvable) {
      cdkBuilder.onDemandThroughput(onDemandThroughput.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    override fun onDemandThroughput(onDemandThroughput: CfnTable.OnDemandThroughputProperty) {
      cdkBuilder.onDemandThroughput(onDemandThroughput.let(CfnTable.OnDemandThroughputProperty.Companion::unwrap))
    }

    /**
     * @param onDemandThroughput Sets the maximum number of read and write units for the specified
     * on-demand table.
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("cc718963042c53d725537d46f01dd6981e8cf3c1c5ce260b1ef47d116d832b4e")
    override
        fun onDemandThroughput(onDemandThroughput: CfnTable.OnDemandThroughputProperty.Builder.() -> Unit):
        Unit = onDemandThroughput(CfnTable.OnDemandThroughputProperty(onDemandThroughput))

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    override fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: IResolvable) {
      cdkBuilder.pointInTimeRecoverySpecification(pointInTimeRecoverySpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    override
        fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: CfnTable.PointInTimeRecoverySpecificationProperty) {
      cdkBuilder.pointInTimeRecoverySpecification(pointInTimeRecoverySpecification.let(CfnTable.PointInTimeRecoverySpecificationProperty.Companion::unwrap))
    }

    /**
     * @param pointInTimeRecoverySpecification The settings used to enable point in time recovery.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c2250375551145bd7288d51c1502890121e3bcf6df7830522d1458980b0ebe40")
    override
        fun pointInTimeRecoverySpecification(pointInTimeRecoverySpecification: CfnTable.PointInTimeRecoverySpecificationProperty.Builder.() -> Unit):
        Unit =
        pointInTimeRecoverySpecification(CfnTable.PointInTimeRecoverySpecificationProperty(pointInTimeRecoverySpecification))

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    override fun provisionedThroughput(provisionedThroughput: IResolvable) {
      cdkBuilder.provisionedThroughput(provisionedThroughput.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    override
        fun provisionedThroughput(provisionedThroughput: CfnTable.ProvisionedThroughputProperty) {
      cdkBuilder.provisionedThroughput(provisionedThroughput.let(CfnTable.ProvisionedThroughputProperty.Companion::unwrap))
    }

    /**
     * @param provisionedThroughput Throughput for the specified table, which consists of values for
     * `ReadCapacityUnits` and `WriteCapacityUnits` .
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("c9a9a02708658c9ae241699a945ae841cd09bf4fe303863b1431bdcfc7edcf5c")
    override
        fun provisionedThroughput(provisionedThroughput: CfnTable.ProvisionedThroughputProperty.Builder.() -> Unit):
        Unit = provisionedThroughput(CfnTable.ProvisionedThroughputProperty(provisionedThroughput))

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    override fun resourcePolicy(resourcePolicy: IResolvable) {
      cdkBuilder.resourcePolicy(resourcePolicy.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    override fun resourcePolicy(resourcePolicy: CfnTable.ResourcePolicyProperty) {
      cdkBuilder.resourcePolicy(resourcePolicy.let(CfnTable.ResourcePolicyProperty.Companion::unwrap))
    }

    /**
     * @param resourcePolicy A resource-based policy document that contains permissions to add to
     * the specified table.
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("10e80221d99cc74afc329f0fd4a910679ebd3c01b9d358a32301040ee1b08a26")
    override fun resourcePolicy(resourcePolicy: CfnTable.ResourcePolicyProperty.Builder.() -> Unit):
        Unit = resourcePolicy(CfnTable.ResourcePolicyProperty(resourcePolicy))

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    override fun sseSpecification(sseSpecification: IResolvable) {
      cdkBuilder.sseSpecification(sseSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    override fun sseSpecification(sseSpecification: CfnTable.SSESpecificationProperty) {
      cdkBuilder.sseSpecification(sseSpecification.let(CfnTable.SSESpecificationProperty.Companion::unwrap))
    }

    /**
     * @param sseSpecification Specifies the settings to enable server-side encryption.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("71a481891b9640fd468b95afe711468471315e15742dd89b43ecfd37efbf8554")
    override
        fun sseSpecification(sseSpecification: CfnTable.SSESpecificationProperty.Builder.() -> Unit):
        Unit = sseSpecification(CfnTable.SSESpecificationProperty(sseSpecification))

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    override fun streamSpecification(streamSpecification: IResolvable) {
      cdkBuilder.streamSpecification(streamSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    override fun streamSpecification(streamSpecification: CfnTable.StreamSpecificationProperty) {
      cdkBuilder.streamSpecification(streamSpecification.let(CfnTable.StreamSpecificationProperty.Companion::unwrap))
    }

    /**
     * @param streamSpecification The settings for the DynamoDB table stream, which capture changes
     * to items stored in the table.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("82d2f865f7c33aa163d77d7474b75c0a467e6d3e662eef7765229b5c6e8d8951")
    override
        fun streamSpecification(streamSpecification: CfnTable.StreamSpecificationProperty.Builder.() -> Unit):
        Unit = streamSpecification(CfnTable.StreamSpecificationProperty(streamSpecification))

    /**
     * @param tableClass The table class of the new table.
     * Valid values are `STANDARD` and `STANDARD_INFREQUENT_ACCESS` .
     */
    override fun tableClass(tableClass: String) {
      cdkBuilder.tableClass(tableClass)
    }

    /**
     * @param tableName A name for the table.
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the table name. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     *
     * If you specify a name, you cannot perform updates that require replacement of this resource.
     * You can perform updates that require no or some interruption. If you must replace the resource,
     * specify a new name.
     */
    override fun tableName(tableName: String) {
      cdkBuilder.tableName(tableName)
    }

    /**
     * @param tags An array of key-value pairs to apply to this resource.
     * For more information, see
     * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
     * .
     */
    override fun tags(tags: List) {
      cdkBuilder.tags(tags.map(CfnTag.Companion::unwrap))
    }

    /**
     * @param tags An array of key-value pairs to apply to this resource.
     * For more information, see
     * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
     * .
     */
    override fun tags(vararg tags: CfnTag): Unit = tags(tags.toList())

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    override fun timeToLiveSpecification(timeToLiveSpecification: IResolvable) {
      cdkBuilder.timeToLiveSpecification(timeToLiveSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    override
        fun timeToLiveSpecification(timeToLiveSpecification: CfnTable.TimeToLiveSpecificationProperty) {
      cdkBuilder.timeToLiveSpecification(timeToLiveSpecification.let(CfnTable.TimeToLiveSpecificationProperty.Companion::unwrap))
    }

    /**
     * @param timeToLiveSpecification Specifies the Time to Live (TTL) settings for the table.
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("538d06314b2d8f6c9f1ad9a4139ade75fa91cbf0137fb6283ebc5f4aabeae1d6")
    override
        fun timeToLiveSpecification(timeToLiveSpecification: CfnTable.TimeToLiveSpecificationProperty.Builder.() -> Unit):
        Unit =
        timeToLiveSpecification(CfnTable.TimeToLiveSpecificationProperty(timeToLiveSpecification))

    public fun build(): software.amazon.awscdk.services.dynamodb.CfnTableProps = cdkBuilder.build()
  }

  private class Wrapper(
    cdkObject: software.amazon.awscdk.services.dynamodb.CfnTableProps,
  ) : CdkObject(cdkObject),
      CfnTableProps {
    /**
     * A list of attributes that describe the key schema for the table and indexes.
     *
     * This property is required to create a DynamoDB table.
     *
     * Update requires: [Some
     * interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt)
     * . Replacement if you edit an existing AttributeDefinition.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-attributedefinitions)
     */
    override fun attributeDefinitions(): Any? = unwrap(this).getAttributeDefinitions()

    /**
     * Specify how you are charged for read and write throughput and how you manage capacity.
     *
     * Valid values include:
     *
     * * `PROVISIONED` - We recommend using `PROVISIONED` for predictable workloads. `PROVISIONED`
     * sets the billing mode to [Provisioned
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)
     * .
     * * `PAY_PER_REQUEST` - We recommend using `PAY_PER_REQUEST` for unpredictable workloads.
     * `PAY_PER_REQUEST` sets the billing mode to [On-Demand
     * Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)
     * .
     *
     * If not specified, the default is `PROVISIONED` .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-billingmode)
     */
    override fun billingMode(): String? = unwrap(this).getBillingMode()

    /**
     * The settings used to enable or disable CloudWatch Contributor Insights for the specified
     * table.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-contributorinsightsspecification)
     */
    override fun contributorInsightsSpecification(): Any? =
        unwrap(this).getContributorInsightsSpecification()

    /**
     * Determines if a table is protected from deletion.
     *
     * When enabled, the table cannot be deleted by any user or process. This setting is disabled by
     * default. For more information, see [Using deletion
     * protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection)
     * in the *Amazon DynamoDB Developer Guide* .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-deletionprotectionenabled)
     */
    override fun deletionProtectionEnabled(): Any? = unwrap(this).getDeletionProtectionEnabled()

    /**
     * Global secondary indexes to be created on the table. You can create up to 20 global secondary
     * indexes.
     *
     *
     * If you update a table to include a new global secondary index, AWS CloudFormation initiates
     * the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for
     * the index to complete creation because the backfilling phase can take a long time, depending on
     * the size of the table. You can't use the index or update the table until the index's status is
     * `ACTIVE` . You can track its status by using the DynamoDB
     * [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)
     * command.
     *
     * If you add or delete an index during an update, we recommend that you don't update any other
     * resources. If your stack fails to update and is rolled back while adding a new index, you must
     * manually delete the index.
     *
     * Updates are not supported. The following are exceptions:
     *
     * * If you update either the contributor insights specification or the provisioned throughput
     * values of global secondary indexes, you can update the table without interruption.
     * * You can delete or add one global secondary index without interruption. If you do both in
     * the same update (for example, by changing the index's logical ID), the update fails.
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-globalsecondaryindexes)
     */
    override fun globalSecondaryIndexes(): Any? = unwrap(this).getGlobalSecondaryIndexes()

    /**
     * Specifies the properties of data being imported from the S3 bucket source to the table.
     *
     *
     * If you specify the `ImportSourceSpecification` property, and also specify either the
     * `StreamSpecification` , the `TableClass` property, or the `DeletionProtectionEnabled` property,
     * the IAM entity creating/updating stack must have `UpdateTable` permission.
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-importsourcespecification)
     */
    override fun importSourceSpecification(): Any? = unwrap(this).getImportSourceSpecification()

    /**
     * Specifies the attributes that make up the primary key for the table.
     *
     * The attributes in the `KeySchema` property must also be defined in the `AttributeDefinitions`
     * property.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-keyschema)
     */
    override fun keySchema(): Any = unwrap(this).getKeySchema()

    /**
     * The Kinesis Data Streams configuration for the specified table.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-kinesisstreamspecification)
     */
    override fun kinesisStreamSpecification(): Any? = unwrap(this).getKinesisStreamSpecification()

    /**
     * Local secondary indexes to be created on the table.
     *
     * You can create up to 5 local secondary indexes. Each index is scoped to a given hash key
     * value. The size of each hash key can be up to 10 gigabytes.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-localsecondaryindexes)
     */
    override fun localSecondaryIndexes(): Any? = unwrap(this).getLocalSecondaryIndexes()

    /**
     * Sets the maximum number of read and write units for the specified on-demand table.
     *
     * If you use this property, you must specify `MaxReadRequestUnits` , `MaxWriteRequestUnits` ,
     * or both.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ondemandthroughput)
     */
    override fun onDemandThroughput(): Any? = unwrap(this).getOnDemandThroughput()

    /**
     * The settings used to enable point in time recovery.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-pointintimerecoveryspecification)
     */
    override fun pointInTimeRecoverySpecification(): Any? =
        unwrap(this).getPointInTimeRecoverySpecification()

    /**
     * Throughput for the specified table, which consists of values for `ReadCapacityUnits` and
     * `WriteCapacityUnits` .
     *
     * For more information about the contents of a provisioned throughput structure, see [Amazon
     * DynamoDB Table
     * ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html)
     * .
     *
     * If you set `BillingMode` as `PROVISIONED` , you must specify this property. If you set
     * `BillingMode` as `PAY_PER_REQUEST` , you cannot specify this property.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-provisionedthroughput)
     */
    override fun provisionedThroughput(): Any? = unwrap(this).getProvisionedThroughput()

    /**
     * A resource-based policy document that contains permissions to add to the specified table.
     *
     * In a CloudFormation template, you can provide the policy in JSON or YAML format because
     * CloudFormation converts YAML to JSON before submitting it to DynamoDB . For more information
     * about resource-based policies, see [Using resource-based policies for
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)
     * and [Resource-based policy
     * examples](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html) .
     *
     * When you attach a resource-based policy while creating a table, the policy creation is
     * *strongly consistent* . For information about the considerations that you should keep in mind
     * while attaching a resource-based policy, see [Resource-based policy
     * considerations](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html)
     * .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-resourcepolicy)
     */
    override fun resourcePolicy(): Any? = unwrap(this).getResourcePolicy()

    /**
     * Specifies the settings to enable server-side encryption.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-ssespecification)
     */
    override fun sseSpecification(): Any? = unwrap(this).getSseSpecification()

    /**
     * The settings for the DynamoDB table stream, which capture changes to items stored in the
     * table.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-streamspecification)
     */
    override fun streamSpecification(): Any? = unwrap(this).getStreamSpecification()

    /**
     * The table class of the new table.
     *
     * Valid values are `STANDARD` and `STANDARD_INFREQUENT_ACCESS` .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tableclass)
     */
    override fun tableClass(): String? = unwrap(this).getTableClass()

    /**
     * A name for the table.
     *
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the table name. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     *
     * If you specify a name, you cannot perform updates that require replacement of this resource.
     * You can perform updates that require no or some interruption. If you must replace the resource,
     * specify a new name.
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tablename)
     */
    override fun tableName(): String? = unwrap(this).getTableName()

    /**
     * An array of key-value pairs to apply to this resource.
     *
     * For more information, see
     * [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)
     * .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-tags)
     */
    override fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

    /**
     * Specifies the Time to Live (TTL) settings for the table.
     *
     *
     * For detailed information about the limits in DynamoDB, see [Limits in Amazon
     * DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the
     * Amazon DynamoDB Developer Guide.
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-timetolivespecification)
     */
    override fun timeToLiveSpecification(): Any? = unwrap(this).getTimeToLiveSpecification()
  }

  public companion object {
    public operator fun invoke(block: Builder.() -> Unit = {}): CfnTableProps {
      val builderImpl = BuilderImpl()
      return Wrapper(builderImpl.apply(block).build())
    }

    internal fun wrap(cdkObject: software.amazon.awscdk.services.dynamodb.CfnTableProps):
        CfnTableProps = CdkObjectWrappers.wrap(cdkObject) as? CfnTableProps ?: Wrapper(cdkObject)

    internal fun unwrap(wrapped: CfnTableProps):
        software.amazon.awscdk.services.dynamodb.CfnTableProps = (wrapped as CdkObject).cdkObject as
        software.amazon.awscdk.services.dynamodb.CfnTableProps
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy