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

cloudshift.awscdk.dsl.services.route53.CfnHostedZonePropsDsl.kt Maven / Gradle / Ivy

There is a newer version: 0.7.0
Show newest version
@file:Suppress("RedundantVisibilityModifier","RedundantUnitReturnType","RemoveRedundantQualifierName","unused","UnusedImport","ClassName","REDUNDANT_PROJECTION","DEPRECATION")

package cloudshift.awscdk.dsl.services.route53

import cloudshift.awscdk.common.CdkDslMarker
import kotlin.Any
import kotlin.String
import kotlin.Unit
import kotlin.collections.Collection
import kotlin.collections.MutableList
import software.amazon.awscdk.IResolvable
import software.amazon.awscdk.services.route53.CfnHostedZone
import software.amazon.awscdk.services.route53.CfnHostedZoneProps

/**
 * Properties for defining a `CfnHostedZone`.
 *
 * Example:
 *
 * ```
 * // The code below shows an example of how to instantiate this type.
 * // The values are placeholders you should change.
 * import software.amazon.awscdk.services.route53.*;
 * CfnHostedZoneProps cfnHostedZoneProps = CfnHostedZoneProps.builder()
 * .hostedZoneConfig(HostedZoneConfigProperty.builder()
 * .comment("comment")
 * .build())
 * .hostedZoneTags(List.of(HostedZoneTagProperty.builder()
 * .key("key")
 * .value("value")
 * .build()))
 * .name("name")
 * .queryLoggingConfig(QueryLoggingConfigProperty.builder()
 * .cloudWatchLogsLogGroupArn("cloudWatchLogsLogGroupArn")
 * .build())
 * .vpcs(List.of(VPCProperty.builder()
 * .vpcId("vpcId")
 * .vpcRegion("vpcRegion")
 * .build()))
 * .build();
 * ```
 *
 * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-hostedzone.html)
 */
@CdkDslMarker
public class CfnHostedZonePropsDsl {
  private val cdkBuilder: CfnHostedZoneProps.Builder = CfnHostedZoneProps.builder()

  private val _hostedZoneTags: MutableList = mutableListOf()

  private val _vpcs: MutableList = mutableListOf()

  /**
   * @param hostedZoneConfig A complex type that contains an optional comment.
   * If you don't want to specify a comment, omit the `HostedZoneConfig` and `Comment` elements.
   */
  public fun hostedZoneConfig(hostedZoneConfig: IResolvable) {
    cdkBuilder.hostedZoneConfig(hostedZoneConfig)
  }

  /**
   * @param hostedZoneConfig A complex type that contains an optional comment.
   * If you don't want to specify a comment, omit the `HostedZoneConfig` and `Comment` elements.
   */
  public fun hostedZoneConfig(hostedZoneConfig: CfnHostedZone.HostedZoneConfigProperty) {
    cdkBuilder.hostedZoneConfig(hostedZoneConfig)
  }

  /**
   * @param hostedZoneTags Adds, edits, or deletes tags for a health check or a hosted zone.
   * For information about using tags for cost allocation, see [Using Cost Allocation
   * Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) in the
   * *AWS Billing and Cost Management User Guide* .
   */
  public fun hostedZoneTags(hostedZoneTags: CfnHostedZoneHostedZoneTagPropertyDsl.() -> Unit) {
    _hostedZoneTags.add(CfnHostedZoneHostedZoneTagPropertyDsl().apply(hostedZoneTags).build())
  }

  /**
   * @param hostedZoneTags Adds, edits, or deletes tags for a health check or a hosted zone.
   * For information about using tags for cost allocation, see [Using Cost Allocation
   * Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) in the
   * *AWS Billing and Cost Management User Guide* .
   */
  public fun hostedZoneTags(hostedZoneTags: Collection) {
    _hostedZoneTags.addAll(hostedZoneTags)
  }

  /**
   * @param name The name of the domain.
   * Specify a fully qualified domain name, for example, *www.example.com* . The trailing dot is
   * optional; Amazon Route 53 assumes that the domain name is fully qualified. This means that Route
   * 53 treats *www.example.com* (without a trailing dot) and *www.example.com.* (with a trailing dot)
   * as identical.
   *
   * If you're creating a public hosted zone, this is the name you have registered with your DNS
   * registrar. If your domain name is registered with a registrar other than Route 53, change the name
   * servers for your domain to the set of `NameServers` that are returned by the `Fn::GetAtt`
   * intrinsic function.
   */
  public fun name(name: String) {
    cdkBuilder.name(name)
  }

  /**
   * @param queryLoggingConfig Creates a configuration for DNS query logging.
   * After you create a query logging configuration, Amazon Route 53 begins to publish log data to
   * an Amazon CloudWatch Logs log group.
   *
   * DNS query logs contain information about the queries that Route 53 receives for a specified
   * public hosted zone, such as the following:
   *
   * * Route 53 edge location that responded to the DNS query
   * * Domain or subdomain that was requested
   * * DNS record type, such as A or AAAA
   * * DNS response code, such as `NoError` or `ServFail`
   * * **Log Group and Resource Policy** - Before you create a query logging configuration, perform
   * the following operations.
   *
   *
   * If you create a query logging configuration using the Route 53 console, Route 53 performs these
   * operations automatically.
   *
   *
   * * Create a CloudWatch Logs log group, and make note of the ARN, which you specify when you
   * create a query logging configuration. Note the following:
   * * You must create the log group in the us-east-1 region.
   * * You must use the same AWS account to create the log group and the hosted zone that you want
   * to configure query logging for.
   * * When you create log groups for query logging, we recommend that you use a consistent prefix,
   * for example:
   *
   * `/aws/route53/ *hosted zone name*`
   *
   * In the next step, you'll create a resource policy, which controls access to one or more log
   * groups and the associated AWS resources, such as Route 53 hosted zones. There's a limit on the
   * number of resource policies that you can create, so we recommend that you use a consistent prefix
   * so you can use the same resource policy for all the log groups that you create for query logging.
   *
   * * Create a CloudWatch Logs resource policy, and give it the permissions that Route 53 needs to
   * create log streams and to send query logs to log streams. For the value of `Resource` , specify
   * the ARN for the log group that you created in the previous step. To use the same resource policy
   * for all the CloudWatch Logs log groups that you created for query logging configurations, replace
   * the hosted zone name with `*` , for example:
   *
   * `arn:aws:logs:us-east-1:123412341234:log-group:/aws/route53/ *`
   *
   * To avoid the confused deputy problem, a security issue where an entity without a permission for
   * an action can coerce a more-privileged entity to perform it, you can optionally limit the
   * permissions that a service has to a resource in a resource-based policy by supplying the following
   * values:
   *
   * * For `aws:SourceArn` , supply the hosted zone ARN used in creating the query logging
   * configuration. For example, `aws:SourceArn: arn:aws:route53:::hostedzone/hosted zone ID` .
   * * For `aws:SourceAccount` , supply the account ID for the account that creates the query
   * logging configuration. For example, `aws:SourceAccount:111111111111` .
   *
   * For more information, see [The confused deputy
   * problem](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) in the *AWS IAM
   * User Guide* .
   *
   *
   * You can't use the CloudWatch console to create or edit a resource policy. You must use the
   * CloudWatch API, one of the AWS SDKs, or the AWS CLI .
   *
   *
   * * **Log Streams and Edge Locations** - When Route 53 finishes creating the configuration for
   * DNS query logging, it does the following:
   * * Creates a log stream for an edge location the first time that the edge location responds to
   * DNS queries for the specified hosted zone. That log stream is used to log all queries that Route
   * 53 responds to for that edge location.
   * * Begins to send query logs to the applicable log stream.
   *
   * The name of each log stream is in the following format:
   *
   * `*hosted zone ID* / *edge location code*`
   *
   * The edge location code is a three-letter code and an arbitrarily assigned number, for example,
   * DFW3. The three-letter code typically corresponds with the International Air Transport Association
   * airport code for an airport near the edge location. (These abbreviations might change in the
   * future.) For a list of edge locations, see "The Route 53 Global Network" on the [Route 53 Product
   * Details](https://docs.aws.amazon.com/route53/details/) page.
   *
   * * **Queries That Are Logged** - Query logs contain only the queries that DNS resolvers forward
   * to Route 53. If a DNS resolver has already cached the response to a query (such as the IP address
   * for a load balancer for example.com), the resolver will continue to return the cached response. It
   * doesn't forward another query to Route 53 until the TTL for the corresponding resource record set
   * expires. Depending on how many DNS queries are submitted for a resource record set, and depending
   * on the TTL for that resource record set, query logs might contain information about only one query
   * out of every several thousand queries that are submitted to DNS. For more information about how
   * DNS works, see [Routing Internet Traffic to Your Website or Web
   * Application](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/welcome-dns-service.html)
   * in the *Amazon Route 53 Developer Guide* .
   * * **Log File Format** - For a list of the values in each query log and the format of each
   * value, see [Logging DNS
   * Queries](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html) in the *Amazon
   * Route 53 Developer Guide* .
   * * **Pricing** - For information about charges for query logs, see [Amazon CloudWatch
   * Pricing](https://docs.aws.amazon.com/cloudwatch/pricing/) .
   * * **How to Stop Logging** - If you want Route 53 to stop sending query logs to CloudWatch Logs,
   * delete the query logging configuration. For more information, see
   * [DeleteQueryLoggingConfig](https://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteQueryLoggingConfig.html)
   * .
   */
  public fun queryLoggingConfig(queryLoggingConfig: IResolvable) {
    cdkBuilder.queryLoggingConfig(queryLoggingConfig)
  }

  /**
   * @param queryLoggingConfig Creates a configuration for DNS query logging.
   * After you create a query logging configuration, Amazon Route 53 begins to publish log data to
   * an Amazon CloudWatch Logs log group.
   *
   * DNS query logs contain information about the queries that Route 53 receives for a specified
   * public hosted zone, such as the following:
   *
   * * Route 53 edge location that responded to the DNS query
   * * Domain or subdomain that was requested
   * * DNS record type, such as A or AAAA
   * * DNS response code, such as `NoError` or `ServFail`
   * * **Log Group and Resource Policy** - Before you create a query logging configuration, perform
   * the following operations.
   *
   *
   * If you create a query logging configuration using the Route 53 console, Route 53 performs these
   * operations automatically.
   *
   *
   * * Create a CloudWatch Logs log group, and make note of the ARN, which you specify when you
   * create a query logging configuration. Note the following:
   * * You must create the log group in the us-east-1 region.
   * * You must use the same AWS account to create the log group and the hosted zone that you want
   * to configure query logging for.
   * * When you create log groups for query logging, we recommend that you use a consistent prefix,
   * for example:
   *
   * `/aws/route53/ *hosted zone name*`
   *
   * In the next step, you'll create a resource policy, which controls access to one or more log
   * groups and the associated AWS resources, such as Route 53 hosted zones. There's a limit on the
   * number of resource policies that you can create, so we recommend that you use a consistent prefix
   * so you can use the same resource policy for all the log groups that you create for query logging.
   *
   * * Create a CloudWatch Logs resource policy, and give it the permissions that Route 53 needs to
   * create log streams and to send query logs to log streams. For the value of `Resource` , specify
   * the ARN for the log group that you created in the previous step. To use the same resource policy
   * for all the CloudWatch Logs log groups that you created for query logging configurations, replace
   * the hosted zone name with `*` , for example:
   *
   * `arn:aws:logs:us-east-1:123412341234:log-group:/aws/route53/ *`
   *
   * To avoid the confused deputy problem, a security issue where an entity without a permission for
   * an action can coerce a more-privileged entity to perform it, you can optionally limit the
   * permissions that a service has to a resource in a resource-based policy by supplying the following
   * values:
   *
   * * For `aws:SourceArn` , supply the hosted zone ARN used in creating the query logging
   * configuration. For example, `aws:SourceArn: arn:aws:route53:::hostedzone/hosted zone ID` .
   * * For `aws:SourceAccount` , supply the account ID for the account that creates the query
   * logging configuration. For example, `aws:SourceAccount:111111111111` .
   *
   * For more information, see [The confused deputy
   * problem](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) in the *AWS IAM
   * User Guide* .
   *
   *
   * You can't use the CloudWatch console to create or edit a resource policy. You must use the
   * CloudWatch API, one of the AWS SDKs, or the AWS CLI .
   *
   *
   * * **Log Streams and Edge Locations** - When Route 53 finishes creating the configuration for
   * DNS query logging, it does the following:
   * * Creates a log stream for an edge location the first time that the edge location responds to
   * DNS queries for the specified hosted zone. That log stream is used to log all queries that Route
   * 53 responds to for that edge location.
   * * Begins to send query logs to the applicable log stream.
   *
   * The name of each log stream is in the following format:
   *
   * `*hosted zone ID* / *edge location code*`
   *
   * The edge location code is a three-letter code and an arbitrarily assigned number, for example,
   * DFW3. The three-letter code typically corresponds with the International Air Transport Association
   * airport code for an airport near the edge location. (These abbreviations might change in the
   * future.) For a list of edge locations, see "The Route 53 Global Network" on the [Route 53 Product
   * Details](https://docs.aws.amazon.com/route53/details/) page.
   *
   * * **Queries That Are Logged** - Query logs contain only the queries that DNS resolvers forward
   * to Route 53. If a DNS resolver has already cached the response to a query (such as the IP address
   * for a load balancer for example.com), the resolver will continue to return the cached response. It
   * doesn't forward another query to Route 53 until the TTL for the corresponding resource record set
   * expires. Depending on how many DNS queries are submitted for a resource record set, and depending
   * on the TTL for that resource record set, query logs might contain information about only one query
   * out of every several thousand queries that are submitted to DNS. For more information about how
   * DNS works, see [Routing Internet Traffic to Your Website or Web
   * Application](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/welcome-dns-service.html)
   * in the *Amazon Route 53 Developer Guide* .
   * * **Log File Format** - For a list of the values in each query log and the format of each
   * value, see [Logging DNS
   * Queries](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html) in the *Amazon
   * Route 53 Developer Guide* .
   * * **Pricing** - For information about charges for query logs, see [Amazon CloudWatch
   * Pricing](https://docs.aws.amazon.com/cloudwatch/pricing/) .
   * * **How to Stop Logging** - If you want Route 53 to stop sending query logs to CloudWatch Logs,
   * delete the query logging configuration. For more information, see
   * [DeleteQueryLoggingConfig](https://docs.aws.amazon.com/Route53/latest/APIReference/API_DeleteQueryLoggingConfig.html)
   * .
   */
  public fun queryLoggingConfig(queryLoggingConfig: CfnHostedZone.QueryLoggingConfigProperty) {
    cdkBuilder.queryLoggingConfig(queryLoggingConfig)
  }

  /**
   * @param vpcs *Private hosted zones:* A complex type that contains information about the VPCs
   * that are associated with the specified hosted zone.
   *
   * For public hosted zones, omit `VPCs` , `VPCId` , and `VPCRegion` .
   */
  public fun vpcs(vararg vpcs: Any) {
    _vpcs.addAll(listOf(*vpcs))
  }

  /**
   * @param vpcs *Private hosted zones:* A complex type that contains information about the VPCs
   * that are associated with the specified hosted zone.
   *
   * For public hosted zones, omit `VPCs` , `VPCId` , and `VPCRegion` .
   */
  public fun vpcs(vpcs: Collection) {
    _vpcs.addAll(vpcs)
  }

  /**
   * @param vpcs *Private hosted zones:* A complex type that contains information about the VPCs
   * that are associated with the specified hosted zone.
   *
   * For public hosted zones, omit `VPCs` , `VPCId` , and `VPCRegion` .
   */
  public fun vpcs(vpcs: IResolvable) {
    cdkBuilder.vpcs(vpcs)
  }

  public fun build(): CfnHostedZoneProps {
    if(_hostedZoneTags.isNotEmpty()) cdkBuilder.hostedZoneTags(_hostedZoneTags)
    if(_vpcs.isNotEmpty()) cdkBuilder.vpcs(_vpcs)
    return cdkBuilder.build()
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy