{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Route53.Types.AliasTarget
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Route53.Types.AliasTarget where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import Amazonka.Route53.Internal

-- | /Alias resource record sets only:/ Information about the Amazon Web
-- Services resource, such as a CloudFront distribution or an Amazon S3
-- bucket, that you want to route traffic to.
--
-- When creating resource record sets for a private hosted zone, note the
-- following:
--
-- -   Creating geolocation alias resource record sets or latency alias
--     resource record sets in a private hosted zone is unsupported.
--
-- -   For information about creating failover resource record sets in a
--     private hosted zone, see
--     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-private-hosted-zones.html Configuring Failover in a Private Hosted Zone>.
--
-- /See:/ 'newAliasTarget' smart constructor.
data AliasTarget = AliasTarget'
  { -- | /Alias resource records sets only/: The value used depends on where you
    -- want to route traffic:
    --
    -- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
    --     Specify the hosted zone ID for your API. You can get the applicable
    --     value using the CLI command
    --     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
    --
    --     -   For regional APIs, specify the value of @regionalHostedZoneId@.
    --
    --     -   For edge-optimized APIs, specify the value of
    --         @distributionHostedZoneId@.
    --
    -- [Amazon Virtual Private Cloud interface VPC endpoint]
    --     Specify the hosted zone ID for your interface endpoint. You can get
    --     the value of @HostedZoneId@ using the CLI command
    --     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
    --
    -- [CloudFront distribution]
    --     Specify @Z2FDTNDATAQYW2@.
    --
    --     Alias resource record sets for CloudFront can\'t be created in a
    --     private zone.
    --
    -- [Elastic Beanstalk environment]
    --     Specify the hosted zone ID for the region that you created the
    --     environment in. The environment must have a regionalized subdomain.
    --     For a list of regions and the corresponding hosted zone IDs, see
    --     <https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html Elastic Beanstalk endpoints and quotas>
    --     in the the /Amazon Web Services General Reference/.
    --
    -- [ELB load balancer]
    --     Specify the value of the hosted zone ID for the load balancer. Use
    --     the following methods to get the hosted zone ID:
    --
    --     -   <https://docs.aws.amazon.com/general/latest/gr/elb.html Elastic Load Balancing endpoints and quotas>
    --         topic in the /Amazon Web Services General Reference/: Use the
    --         value that corresponds with the region that you created your
    --         load balancer in. Note that there are separate columns for
    --         Application and Classic Load Balancers and for Network Load
    --         Balancers.
    --
    --     -   __Amazon Web Services Management Console__: Go to the Amazon EC2
    --         page, choose __Load Balancers__ in the navigation pane, select
    --         the load balancer, and get the value of the __Hosted zone__
    --         field on the __Description__ tab.
    --
    --     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
    --         get the applicable value. For more information, see the
    --         applicable guide:
    --
    --         -   Classic Load Balancers: Use
    --             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
    --             to get the value of @CanonicalHostedZoneNameId@.
    --
    --         -   Application and Network Load Balancers: Use
    --             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
    --             to get the value of @CanonicalHostedZoneId@.
    --
    --     -   __CLI__: Use @describe-load-balancers@ to get the applicable
    --         value. For more information, see the applicable guide:
    --
    --         -   Classic Load Balancers: Use
    --             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
    --             to get the value of @CanonicalHostedZoneNameId@.
    --
    --         -   Application and Network Load Balancers: Use
    --             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
    --             to get the value of @CanonicalHostedZoneId@.
    --
    -- [Global Accelerator accelerator]
    --     Specify @Z2BJ6XQ5FK7U4H@.
    --
    -- [An Amazon S3 bucket configured as a static website]
    --     Specify the hosted zone ID for the region that you created the
    --     bucket in. For more information about valid values, see the table
    --     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
    --     in the /Amazon Web Services General Reference/.
    --
    -- [Another Route 53 resource record set in your hosted zone]
    --     Specify the hosted zone ID of your hosted zone. (An alias resource
    --     record set can\'t reference a resource record set in a different
    --     hosted zone.)
    AliasTarget -> ResourceId
hostedZoneId :: ResourceId,
    -- | /Alias resource record sets only:/ The value that you specify depends on
    -- where you want to route queries:
    --
    -- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
    --     Specify the applicable domain name for your API. You can get the
    --     applicable value using the CLI command
    --     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
    --
    --     -   For regional APIs, specify the value of @regionalDomainName@.
    --
    --     -   For edge-optimized APIs, specify the value of
    --         @distributionDomainName@. This is the name of the associated
    --         CloudFront distribution, such as @da1b2c3d4e5.cloudfront.net@.
    --
    --     The name of the record that you\'re creating must match a custom
    --     domain name for your API, such as @api.example.com@.
    --
    -- [Amazon Virtual Private Cloud interface VPC endpoint]
    --     Enter the API endpoint for the interface endpoint, such as
    --     @vpce-123456789abcdef01-example-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com@.
    --     For edge-optimized APIs, this is the domain name for the
    --     corresponding CloudFront distribution. You can get the value of
    --     @DnsName@ using the CLI command
    --     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
    --
    -- [CloudFront distribution]
    --     Specify the domain name that CloudFront assigned when you created
    --     your distribution.
    --
    --     Your CloudFront distribution must include an alternate domain name
    --     that matches the name of the resource record set. For example, if
    --     the name of the resource record set is /acme.example.com/, your
    --     CloudFront distribution must include /acme.example.com/ as one of
    --     the alternate domain names. For more information, see
    --     <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html Using Alternate Domain Names (CNAMEs)>
    --     in the /Amazon CloudFront Developer Guide/.
    --
    --     You can\'t create a resource record set in a private hosted zone to
    --     route traffic to a CloudFront distribution.
    --
    --     For failover alias records, you can\'t specify a CloudFront
    --     distribution for both the primary and secondary records. A
    --     distribution must include an alternate domain name that matches the
    --     name of the record. However, the primary and secondary records have
    --     the same name, and you can\'t include the same alternate domain name
    --     in more than one distribution.
    --
    -- [Elastic Beanstalk environment]
    --     If the domain name for your Elastic Beanstalk environment includes
    --     the region that you deployed the environment in, you can create an
    --     alias record that routes traffic to the environment. For example,
    --     the domain name @my-environment.us-west-2.elasticbeanstalk.com@ is a
    --     regionalized domain name.
    --
    --     For environments that were created before early 2016, the domain
    --     name doesn\'t include the region. To route traffic to these
    --     environments, you must create a CNAME record instead of an alias
    --     record. Note that you can\'t create a CNAME record for the root
    --     domain name. For example, if your domain name is example.com, you
    --     can create a record that routes traffic for acme.example.com to your
    --     Elastic Beanstalk environment, but you can\'t create a record that
    --     routes traffic for example.com to your Elastic Beanstalk
    --     environment.
    --
    --     For Elastic Beanstalk environments that have regionalized
    --     subdomains, specify the @CNAME@ attribute for the environment. You
    --     can use the following methods to get the value of the CNAME
    --     attribute:
    --
    --     -   /Amazon Web Services Management Console/: For information about
    --         how to get the value by using the console, see
    --         <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customdomains.html Using Custom Domains with Elastic Beanstalk>
    --         in the /Elastic Beanstalk Developer Guide/.
    --
    --     -   /Elastic Beanstalk API/: Use the @DescribeEnvironments@ action
    --         to get the value of the @CNAME@ attribute. For more information,
    --         see
    --         <https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_DescribeEnvironments.html DescribeEnvironments>
    --         in the /Elastic Beanstalk API Reference/.
    --
    --     -   /CLI/: Use the @describe-environments@ command to get the value
    --         of the @CNAME@ attribute. For more information, see
    --         <https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-environments.html describe-environments>
    --         in the /CLI Command Reference/.
    --
    -- [ELB load balancer]
    --     Specify the DNS name that is associated with the load balancer. Get
    --     the DNS name by using the Amazon Web Services Management Console,
    --     the ELB API, or the CLI.
    --
    --     -   __Amazon Web Services Management Console__: Go to the EC2 page,
    --         choose __Load Balancers__ in the navigation pane, choose the
    --         load balancer, choose the __Description__ tab, and get the value
    --         of the __DNS name__ field.
    --
    --         If you\'re routing traffic to a Classic Load Balancer, get the
    --         value that begins with __dualstack__. If you\'re routing traffic
    --         to another type of load balancer, get the value that applies to
    --         the record type, A or AAAA.
    --
    --     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
    --         get the value of @DNSName@. For more information, see the
    --         applicable guide:
    --
    --         -   Classic Load Balancers:
    --             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
    --
    --         -   Application and Network Load Balancers:
    --             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
    --
    --     -   __CLI__: Use @describe-load-balancers@ to get the value of
    --         @DNSName@. For more information, see the applicable guide:
    --
    --         -   Classic Load Balancers:
    --             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
    --
    --         -   Application and Network Load Balancers:
    --             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
    --
    -- [Global Accelerator accelerator]
    --     Specify the DNS name for your accelerator:
    --
    --     -   __Global Accelerator API:__ To get the DNS name, use
    --         <https://docs.aws.amazon.com/global-accelerator/latest/api/API_DescribeAccelerator.html DescribeAccelerator>.
    --
    --     -   __CLI:__ To get the DNS name, use
    --         <https://docs.aws.amazon.com/cli/latest/reference/globalaccelerator/describe-accelerator.html describe-accelerator>.
    --
    -- [Amazon S3 bucket that is configured as a static website]
    --     Specify the domain name of the Amazon S3 website endpoint that you
    --     created the bucket in, for example,
    --     @s3-website.us-east-2.amazonaws.com@. For more information about
    --     valid values, see the table
    --     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
    --     in the /Amazon Web Services General Reference/. For more information
    --     about using S3 buckets for websites, see
    --     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html Getting Started with Amazon Route 53>
    --     in the /Amazon Route 53 Developer Guide./
    --
    -- [Another Route 53 resource record set]
    --     Specify the value of the @Name@ element for a resource record set in
    --     the current hosted zone.
    --
    --     If you\'re creating an alias record that has the same name as the
    --     hosted zone (known as the zone apex), you can\'t specify the domain
    --     name for a record for which the value of @Type@ is @CNAME@. This is
    --     because the alias record must have the same type as the record that
    --     you\'re routing traffic to, and creating a CNAME record for the zone
    --     apex isn\'t supported even for an alias record.
    AliasTarget -> Text
dNSName :: Prelude.Text,
    -- | /Applies only to alias, failover alias, geolocation alias, latency
    -- alias, and weighted alias resource record sets:/ When
    -- @EvaluateTargetHealth@ is @true@, an alias resource record set inherits
    -- the health of the referenced Amazon Web Services resource, such as an
    -- ELB load balancer or another resource record set in the hosted zone.
    --
    -- Note the following:
    --
    -- [CloudFront distributions]
    --     You can\'t set @EvaluateTargetHealth@ to @true@ when the alias
    --     target is a CloudFront distribution.
    --
    -- [Elastic Beanstalk environments that have regionalized subdomains]
    --     If you specify an Elastic Beanstalk environment in @DNSName@ and the
    --     environment contains an ELB load balancer, Elastic Load Balancing
    --     routes queries only to the healthy Amazon EC2 instances that are
    --     registered with the load balancer. (An environment automatically
    --     contains an ELB load balancer if it includes more than one Amazon
    --     EC2 instance.) If you set @EvaluateTargetHealth@ to @true@ and
    --     either no Amazon EC2 instances are healthy or the load balancer
    --     itself is unhealthy, Route 53 routes queries to other available
    --     resources that are healthy, if any.
    --
    --     If the environment contains a single Amazon EC2 instance, there are
    --     no special requirements.
    --
    -- [ELB load balancers]
    --     Health checking behavior depends on the type of load balancer:
    --
    --     -   __Classic Load Balancers__: If you specify an ELB Classic Load
    --         Balancer in @DNSName@, Elastic Load Balancing routes queries
    --         only to the healthy Amazon EC2 instances that are registered
    --         with the load balancer. If you set @EvaluateTargetHealth@ to
    --         @true@ and either no EC2 instances are healthy or the load
    --         balancer itself is unhealthy, Route 53 routes queries to other
    --         resources.
    --
    --     -   __Application and Network Load Balancers__: If you specify an
    --         ELB Application or Network Load Balancer and you set
    --         @EvaluateTargetHealth@ to @true@, Route 53 routes queries to the
    --         load balancer based on the health of the target groups that are
    --         associated with the load balancer:
    --
    --         -   For an Application or Network Load Balancer to be considered
    --             healthy, every target group that contains targets must
    --             contain at least one healthy target. If any target group
    --             contains only unhealthy targets, the load balancer is
    --             considered unhealthy, and Route 53 routes queries to other
    --             resources.
    --
    --         -   A target group that has no registered targets is considered
    --             unhealthy.
    --
    --     When you create a load balancer, you configure settings for Elastic
    --     Load Balancing health checks; they\'re not Route 53 health checks,
    --     but they perform a similar function. Do not create Route 53 health
    --     checks for the EC2 instances that you register with an ELB load
    --     balancer.
    --
    -- [S3 buckets]
    --     There are no special requirements for setting @EvaluateTargetHealth@
    --     to @true@ when the alias target is an S3 bucket.
    --
    -- [Other records in the same hosted zone]
    --     If the Amazon Web Services resource that you specify in @DNSName@ is
    --     a record or a group of records (for example, a group of weighted
    --     records) but is not another alias record, we recommend that you
    --     associate a health check with all of the records in the alias
    --     target. For more information, see
    --     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting What Happens When You Omit Health Checks?>
    --     in the /Amazon Route 53 Developer Guide/.
    --
    -- For more information and examples, see
    -- <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html Amazon Route 53 Health Checks and DNS Failover>
    -- in the /Amazon Route 53 Developer Guide/.
    AliasTarget -> Bool
evaluateTargetHealth :: Prelude.Bool
  }
  deriving (AliasTarget -> AliasTarget -> Bool
(AliasTarget -> AliasTarget -> Bool)
-> (AliasTarget -> AliasTarget -> Bool) -> Eq AliasTarget
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AliasTarget -> AliasTarget -> Bool
$c/= :: AliasTarget -> AliasTarget -> Bool
== :: AliasTarget -> AliasTarget -> Bool
$c== :: AliasTarget -> AliasTarget -> Bool
Prelude.Eq, ReadPrec [AliasTarget]
ReadPrec AliasTarget
Int -> ReadS AliasTarget
ReadS [AliasTarget]
(Int -> ReadS AliasTarget)
-> ReadS [AliasTarget]
-> ReadPrec AliasTarget
-> ReadPrec [AliasTarget]
-> Read AliasTarget
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AliasTarget]
$creadListPrec :: ReadPrec [AliasTarget]
readPrec :: ReadPrec AliasTarget
$creadPrec :: ReadPrec AliasTarget
readList :: ReadS [AliasTarget]
$creadList :: ReadS [AliasTarget]
readsPrec :: Int -> ReadS AliasTarget
$creadsPrec :: Int -> ReadS AliasTarget
Prelude.Read, Int -> AliasTarget -> ShowS
[AliasTarget] -> ShowS
AliasTarget -> String
(Int -> AliasTarget -> ShowS)
-> (AliasTarget -> String)
-> ([AliasTarget] -> ShowS)
-> Show AliasTarget
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AliasTarget] -> ShowS
$cshowList :: [AliasTarget] -> ShowS
show :: AliasTarget -> String
$cshow :: AliasTarget -> String
showsPrec :: Int -> AliasTarget -> ShowS
$cshowsPrec :: Int -> AliasTarget -> ShowS
Prelude.Show, (forall x. AliasTarget -> Rep AliasTarget x)
-> (forall x. Rep AliasTarget x -> AliasTarget)
-> Generic AliasTarget
forall x. Rep AliasTarget x -> AliasTarget
forall x. AliasTarget -> Rep AliasTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AliasTarget x -> AliasTarget
$cfrom :: forall x. AliasTarget -> Rep AliasTarget x
Prelude.Generic)

-- |
-- Create a value of 'AliasTarget' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'hostedZoneId', 'aliasTarget_hostedZoneId' - /Alias resource records sets only/: The value used depends on where you
-- want to route traffic:
--
-- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
--     Specify the hosted zone ID for your API. You can get the applicable
--     value using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
--
--     -   For regional APIs, specify the value of @regionalHostedZoneId@.
--
--     -   For edge-optimized APIs, specify the value of
--         @distributionHostedZoneId@.
--
-- [Amazon Virtual Private Cloud interface VPC endpoint]
--     Specify the hosted zone ID for your interface endpoint. You can get
--     the value of @HostedZoneId@ using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
--
-- [CloudFront distribution]
--     Specify @Z2FDTNDATAQYW2@.
--
--     Alias resource record sets for CloudFront can\'t be created in a
--     private zone.
--
-- [Elastic Beanstalk environment]
--     Specify the hosted zone ID for the region that you created the
--     environment in. The environment must have a regionalized subdomain.
--     For a list of regions and the corresponding hosted zone IDs, see
--     <https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html Elastic Beanstalk endpoints and quotas>
--     in the the /Amazon Web Services General Reference/.
--
-- [ELB load balancer]
--     Specify the value of the hosted zone ID for the load balancer. Use
--     the following methods to get the hosted zone ID:
--
--     -   <https://docs.aws.amazon.com/general/latest/gr/elb.html Elastic Load Balancing endpoints and quotas>
--         topic in the /Amazon Web Services General Reference/: Use the
--         value that corresponds with the region that you created your
--         load balancer in. Note that there are separate columns for
--         Application and Classic Load Balancers and for Network Load
--         Balancers.
--
--     -   __Amazon Web Services Management Console__: Go to the Amazon EC2
--         page, choose __Load Balancers__ in the navigation pane, select
--         the load balancer, and get the value of the __Hosted zone__
--         field on the __Description__ tab.
--
--     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
--         get the applicable value. For more information, see the
--         applicable guide:
--
--         -   Classic Load Balancers: Use
--             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--             to get the value of @CanonicalHostedZoneNameId@.
--
--         -   Application and Network Load Balancers: Use
--             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--             to get the value of @CanonicalHostedZoneId@.
--
--     -   __CLI__: Use @describe-load-balancers@ to get the applicable
--         value. For more information, see the applicable guide:
--
--         -   Classic Load Balancers: Use
--             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
--             to get the value of @CanonicalHostedZoneNameId@.
--
--         -   Application and Network Load Balancers: Use
--             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
--             to get the value of @CanonicalHostedZoneId@.
--
-- [Global Accelerator accelerator]
--     Specify @Z2BJ6XQ5FK7U4H@.
--
-- [An Amazon S3 bucket configured as a static website]
--     Specify the hosted zone ID for the region that you created the
--     bucket in. For more information about valid values, see the table
--     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
--     in the /Amazon Web Services General Reference/.
--
-- [Another Route 53 resource record set in your hosted zone]
--     Specify the hosted zone ID of your hosted zone. (An alias resource
--     record set can\'t reference a resource record set in a different
--     hosted zone.)
--
-- 'dNSName', 'aliasTarget_dNSName' - /Alias resource record sets only:/ The value that you specify depends on
-- where you want to route queries:
--
-- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
--     Specify the applicable domain name for your API. You can get the
--     applicable value using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
--
--     -   For regional APIs, specify the value of @regionalDomainName@.
--
--     -   For edge-optimized APIs, specify the value of
--         @distributionDomainName@. This is the name of the associated
--         CloudFront distribution, such as @da1b2c3d4e5.cloudfront.net@.
--
--     The name of the record that you\'re creating must match a custom
--     domain name for your API, such as @api.example.com@.
--
-- [Amazon Virtual Private Cloud interface VPC endpoint]
--     Enter the API endpoint for the interface endpoint, such as
--     @vpce-123456789abcdef01-example-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com@.
--     For edge-optimized APIs, this is the domain name for the
--     corresponding CloudFront distribution. You can get the value of
--     @DnsName@ using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
--
-- [CloudFront distribution]
--     Specify the domain name that CloudFront assigned when you created
--     your distribution.
--
--     Your CloudFront distribution must include an alternate domain name
--     that matches the name of the resource record set. For example, if
--     the name of the resource record set is /acme.example.com/, your
--     CloudFront distribution must include /acme.example.com/ as one of
--     the alternate domain names. For more information, see
--     <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html Using Alternate Domain Names (CNAMEs)>
--     in the /Amazon CloudFront Developer Guide/.
--
--     You can\'t create a resource record set in a private hosted zone to
--     route traffic to a CloudFront distribution.
--
--     For failover alias records, you can\'t specify a CloudFront
--     distribution for both the primary and secondary records. A
--     distribution must include an alternate domain name that matches the
--     name of the record. However, the primary and secondary records have
--     the same name, and you can\'t include the same alternate domain name
--     in more than one distribution.
--
-- [Elastic Beanstalk environment]
--     If the domain name for your Elastic Beanstalk environment includes
--     the region that you deployed the environment in, you can create an
--     alias record that routes traffic to the environment. For example,
--     the domain name @my-environment.us-west-2.elasticbeanstalk.com@ is a
--     regionalized domain name.
--
--     For environments that were created before early 2016, the domain
--     name doesn\'t include the region. To route traffic to these
--     environments, you must create a CNAME record instead of an alias
--     record. Note that you can\'t create a CNAME record for the root
--     domain name. For example, if your domain name is example.com, you
--     can create a record that routes traffic for acme.example.com to your
--     Elastic Beanstalk environment, but you can\'t create a record that
--     routes traffic for example.com to your Elastic Beanstalk
--     environment.
--
--     For Elastic Beanstalk environments that have regionalized
--     subdomains, specify the @CNAME@ attribute for the environment. You
--     can use the following methods to get the value of the CNAME
--     attribute:
--
--     -   /Amazon Web Services Management Console/: For information about
--         how to get the value by using the console, see
--         <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customdomains.html Using Custom Domains with Elastic Beanstalk>
--         in the /Elastic Beanstalk Developer Guide/.
--
--     -   /Elastic Beanstalk API/: Use the @DescribeEnvironments@ action
--         to get the value of the @CNAME@ attribute. For more information,
--         see
--         <https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_DescribeEnvironments.html DescribeEnvironments>
--         in the /Elastic Beanstalk API Reference/.
--
--     -   /CLI/: Use the @describe-environments@ command to get the value
--         of the @CNAME@ attribute. For more information, see
--         <https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-environments.html describe-environments>
--         in the /CLI Command Reference/.
--
-- [ELB load balancer]
--     Specify the DNS name that is associated with the load balancer. Get
--     the DNS name by using the Amazon Web Services Management Console,
--     the ELB API, or the CLI.
--
--     -   __Amazon Web Services Management Console__: Go to the EC2 page,
--         choose __Load Balancers__ in the navigation pane, choose the
--         load balancer, choose the __Description__ tab, and get the value
--         of the __DNS name__ field.
--
--         If you\'re routing traffic to a Classic Load Balancer, get the
--         value that begins with __dualstack__. If you\'re routing traffic
--         to another type of load balancer, get the value that applies to
--         the record type, A or AAAA.
--
--     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
--         get the value of @DNSName@. For more information, see the
--         applicable guide:
--
--         -   Classic Load Balancers:
--             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--
--         -   Application and Network Load Balancers:
--             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--
--     -   __CLI__: Use @describe-load-balancers@ to get the value of
--         @DNSName@. For more information, see the applicable guide:
--
--         -   Classic Load Balancers:
--             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
--
--         -   Application and Network Load Balancers:
--             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
--
-- [Global Accelerator accelerator]
--     Specify the DNS name for your accelerator:
--
--     -   __Global Accelerator API:__ To get the DNS name, use
--         <https://docs.aws.amazon.com/global-accelerator/latest/api/API_DescribeAccelerator.html DescribeAccelerator>.
--
--     -   __CLI:__ To get the DNS name, use
--         <https://docs.aws.amazon.com/cli/latest/reference/globalaccelerator/describe-accelerator.html describe-accelerator>.
--
-- [Amazon S3 bucket that is configured as a static website]
--     Specify the domain name of the Amazon S3 website endpoint that you
--     created the bucket in, for example,
--     @s3-website.us-east-2.amazonaws.com@. For more information about
--     valid values, see the table
--     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
--     in the /Amazon Web Services General Reference/. For more information
--     about using S3 buckets for websites, see
--     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html Getting Started with Amazon Route 53>
--     in the /Amazon Route 53 Developer Guide./
--
-- [Another Route 53 resource record set]
--     Specify the value of the @Name@ element for a resource record set in
--     the current hosted zone.
--
--     If you\'re creating an alias record that has the same name as the
--     hosted zone (known as the zone apex), you can\'t specify the domain
--     name for a record for which the value of @Type@ is @CNAME@. This is
--     because the alias record must have the same type as the record that
--     you\'re routing traffic to, and creating a CNAME record for the zone
--     apex isn\'t supported even for an alias record.
--
-- 'evaluateTargetHealth', 'aliasTarget_evaluateTargetHealth' - /Applies only to alias, failover alias, geolocation alias, latency
-- alias, and weighted alias resource record sets:/ When
-- @EvaluateTargetHealth@ is @true@, an alias resource record set inherits
-- the health of the referenced Amazon Web Services resource, such as an
-- ELB load balancer or another resource record set in the hosted zone.
--
-- Note the following:
--
-- [CloudFront distributions]
--     You can\'t set @EvaluateTargetHealth@ to @true@ when the alias
--     target is a CloudFront distribution.
--
-- [Elastic Beanstalk environments that have regionalized subdomains]
--     If you specify an Elastic Beanstalk environment in @DNSName@ and the
--     environment contains an ELB load balancer, Elastic Load Balancing
--     routes queries only to the healthy Amazon EC2 instances that are
--     registered with the load balancer. (An environment automatically
--     contains an ELB load balancer if it includes more than one Amazon
--     EC2 instance.) If you set @EvaluateTargetHealth@ to @true@ and
--     either no Amazon EC2 instances are healthy or the load balancer
--     itself is unhealthy, Route 53 routes queries to other available
--     resources that are healthy, if any.
--
--     If the environment contains a single Amazon EC2 instance, there are
--     no special requirements.
--
-- [ELB load balancers]
--     Health checking behavior depends on the type of load balancer:
--
--     -   __Classic Load Balancers__: If you specify an ELB Classic Load
--         Balancer in @DNSName@, Elastic Load Balancing routes queries
--         only to the healthy Amazon EC2 instances that are registered
--         with the load balancer. If you set @EvaluateTargetHealth@ to
--         @true@ and either no EC2 instances are healthy or the load
--         balancer itself is unhealthy, Route 53 routes queries to other
--         resources.
--
--     -   __Application and Network Load Balancers__: If you specify an
--         ELB Application or Network Load Balancer and you set
--         @EvaluateTargetHealth@ to @true@, Route 53 routes queries to the
--         load balancer based on the health of the target groups that are
--         associated with the load balancer:
--
--         -   For an Application or Network Load Balancer to be considered
--             healthy, every target group that contains targets must
--             contain at least one healthy target. If any target group
--             contains only unhealthy targets, the load balancer is
--             considered unhealthy, and Route 53 routes queries to other
--             resources.
--
--         -   A target group that has no registered targets is considered
--             unhealthy.
--
--     When you create a load balancer, you configure settings for Elastic
--     Load Balancing health checks; they\'re not Route 53 health checks,
--     but they perform a similar function. Do not create Route 53 health
--     checks for the EC2 instances that you register with an ELB load
--     balancer.
--
-- [S3 buckets]
--     There are no special requirements for setting @EvaluateTargetHealth@
--     to @true@ when the alias target is an S3 bucket.
--
-- [Other records in the same hosted zone]
--     If the Amazon Web Services resource that you specify in @DNSName@ is
--     a record or a group of records (for example, a group of weighted
--     records) but is not another alias record, we recommend that you
--     associate a health check with all of the records in the alias
--     target. For more information, see
--     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting What Happens When You Omit Health Checks?>
--     in the /Amazon Route 53 Developer Guide/.
--
-- For more information and examples, see
-- <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html Amazon Route 53 Health Checks and DNS Failover>
-- in the /Amazon Route 53 Developer Guide/.
newAliasTarget ::
  -- | 'hostedZoneId'
  ResourceId ->
  -- | 'dNSName'
  Prelude.Text ->
  -- | 'evaluateTargetHealth'
  Prelude.Bool ->
  AliasTarget
newAliasTarget :: ResourceId -> Text -> Bool -> AliasTarget
newAliasTarget
  ResourceId
pHostedZoneId_
  Text
pDNSName_
  Bool
pEvaluateTargetHealth_ =
    AliasTarget' :: ResourceId -> Text -> Bool -> AliasTarget
AliasTarget'
      { $sel:hostedZoneId:AliasTarget' :: ResourceId
hostedZoneId = ResourceId
pHostedZoneId_,
        $sel:dNSName:AliasTarget' :: Text
dNSName = Text
pDNSName_,
        $sel:evaluateTargetHealth:AliasTarget' :: Bool
evaluateTargetHealth = Bool
pEvaluateTargetHealth_
      }

-- | /Alias resource records sets only/: The value used depends on where you
-- want to route traffic:
--
-- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
--     Specify the hosted zone ID for your API. You can get the applicable
--     value using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
--
--     -   For regional APIs, specify the value of @regionalHostedZoneId@.
--
--     -   For edge-optimized APIs, specify the value of
--         @distributionHostedZoneId@.
--
-- [Amazon Virtual Private Cloud interface VPC endpoint]
--     Specify the hosted zone ID for your interface endpoint. You can get
--     the value of @HostedZoneId@ using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
--
-- [CloudFront distribution]
--     Specify @Z2FDTNDATAQYW2@.
--
--     Alias resource record sets for CloudFront can\'t be created in a
--     private zone.
--
-- [Elastic Beanstalk environment]
--     Specify the hosted zone ID for the region that you created the
--     environment in. The environment must have a regionalized subdomain.
--     For a list of regions and the corresponding hosted zone IDs, see
--     <https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html Elastic Beanstalk endpoints and quotas>
--     in the the /Amazon Web Services General Reference/.
--
-- [ELB load balancer]
--     Specify the value of the hosted zone ID for the load balancer. Use
--     the following methods to get the hosted zone ID:
--
--     -   <https://docs.aws.amazon.com/general/latest/gr/elb.html Elastic Load Balancing endpoints and quotas>
--         topic in the /Amazon Web Services General Reference/: Use the
--         value that corresponds with the region that you created your
--         load balancer in. Note that there are separate columns for
--         Application and Classic Load Balancers and for Network Load
--         Balancers.
--
--     -   __Amazon Web Services Management Console__: Go to the Amazon EC2
--         page, choose __Load Balancers__ in the navigation pane, select
--         the load balancer, and get the value of the __Hosted zone__
--         field on the __Description__ tab.
--
--     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
--         get the applicable value. For more information, see the
--         applicable guide:
--
--         -   Classic Load Balancers: Use
--             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--             to get the value of @CanonicalHostedZoneNameId@.
--
--         -   Application and Network Load Balancers: Use
--             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--             to get the value of @CanonicalHostedZoneId@.
--
--     -   __CLI__: Use @describe-load-balancers@ to get the applicable
--         value. For more information, see the applicable guide:
--
--         -   Classic Load Balancers: Use
--             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
--             to get the value of @CanonicalHostedZoneNameId@.
--
--         -   Application and Network Load Balancers: Use
--             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
--             to get the value of @CanonicalHostedZoneId@.
--
-- [Global Accelerator accelerator]
--     Specify @Z2BJ6XQ5FK7U4H@.
--
-- [An Amazon S3 bucket configured as a static website]
--     Specify the hosted zone ID for the region that you created the
--     bucket in. For more information about valid values, see the table
--     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
--     in the /Amazon Web Services General Reference/.
--
-- [Another Route 53 resource record set in your hosted zone]
--     Specify the hosted zone ID of your hosted zone. (An alias resource
--     record set can\'t reference a resource record set in a different
--     hosted zone.)
aliasTarget_hostedZoneId :: Lens.Lens' AliasTarget ResourceId
aliasTarget_hostedZoneId :: (ResourceId -> f ResourceId) -> AliasTarget -> f AliasTarget
aliasTarget_hostedZoneId = (AliasTarget -> ResourceId)
-> (AliasTarget -> ResourceId -> AliasTarget)
-> Lens AliasTarget AliasTarget ResourceId ResourceId
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AliasTarget' {ResourceId
hostedZoneId :: ResourceId
$sel:hostedZoneId:AliasTarget' :: AliasTarget -> ResourceId
hostedZoneId} -> ResourceId
hostedZoneId) (\s :: AliasTarget
s@AliasTarget' {} ResourceId
a -> AliasTarget
s {$sel:hostedZoneId:AliasTarget' :: ResourceId
hostedZoneId = ResourceId
a} :: AliasTarget)

-- | /Alias resource record sets only:/ The value that you specify depends on
-- where you want to route queries:
--
-- [Amazon API Gateway custom regional APIs and edge-optimized APIs]
--     Specify the applicable domain name for your API. You can get the
--     applicable value using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-domain-names.html get-domain-names>:
--
--     -   For regional APIs, specify the value of @regionalDomainName@.
--
--     -   For edge-optimized APIs, specify the value of
--         @distributionDomainName@. This is the name of the associated
--         CloudFront distribution, such as @da1b2c3d4e5.cloudfront.net@.
--
--     The name of the record that you\'re creating must match a custom
--     domain name for your API, such as @api.example.com@.
--
-- [Amazon Virtual Private Cloud interface VPC endpoint]
--     Enter the API endpoint for the interface endpoint, such as
--     @vpce-123456789abcdef01-example-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com@.
--     For edge-optimized APIs, this is the domain name for the
--     corresponding CloudFront distribution. You can get the value of
--     @DnsName@ using the CLI command
--     <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html describe-vpc-endpoints>.
--
-- [CloudFront distribution]
--     Specify the domain name that CloudFront assigned when you created
--     your distribution.
--
--     Your CloudFront distribution must include an alternate domain name
--     that matches the name of the resource record set. For example, if
--     the name of the resource record set is /acme.example.com/, your
--     CloudFront distribution must include /acme.example.com/ as one of
--     the alternate domain names. For more information, see
--     <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html Using Alternate Domain Names (CNAMEs)>
--     in the /Amazon CloudFront Developer Guide/.
--
--     You can\'t create a resource record set in a private hosted zone to
--     route traffic to a CloudFront distribution.
--
--     For failover alias records, you can\'t specify a CloudFront
--     distribution for both the primary and secondary records. A
--     distribution must include an alternate domain name that matches the
--     name of the record. However, the primary and secondary records have
--     the same name, and you can\'t include the same alternate domain name
--     in more than one distribution.
--
-- [Elastic Beanstalk environment]
--     If the domain name for your Elastic Beanstalk environment includes
--     the region that you deployed the environment in, you can create an
--     alias record that routes traffic to the environment. For example,
--     the domain name @my-environment.us-west-2.elasticbeanstalk.com@ is a
--     regionalized domain name.
--
--     For environments that were created before early 2016, the domain
--     name doesn\'t include the region. To route traffic to these
--     environments, you must create a CNAME record instead of an alias
--     record. Note that you can\'t create a CNAME record for the root
--     domain name. For example, if your domain name is example.com, you
--     can create a record that routes traffic for acme.example.com to your
--     Elastic Beanstalk environment, but you can\'t create a record that
--     routes traffic for example.com to your Elastic Beanstalk
--     environment.
--
--     For Elastic Beanstalk environments that have regionalized
--     subdomains, specify the @CNAME@ attribute for the environment. You
--     can use the following methods to get the value of the CNAME
--     attribute:
--
--     -   /Amazon Web Services Management Console/: For information about
--         how to get the value by using the console, see
--         <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customdomains.html Using Custom Domains with Elastic Beanstalk>
--         in the /Elastic Beanstalk Developer Guide/.
--
--     -   /Elastic Beanstalk API/: Use the @DescribeEnvironments@ action
--         to get the value of the @CNAME@ attribute. For more information,
--         see
--         <https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_DescribeEnvironments.html DescribeEnvironments>
--         in the /Elastic Beanstalk API Reference/.
--
--     -   /CLI/: Use the @describe-environments@ command to get the value
--         of the @CNAME@ attribute. For more information, see
--         <https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-environments.html describe-environments>
--         in the /CLI Command Reference/.
--
-- [ELB load balancer]
--     Specify the DNS name that is associated with the load balancer. Get
--     the DNS name by using the Amazon Web Services Management Console,
--     the ELB API, or the CLI.
--
--     -   __Amazon Web Services Management Console__: Go to the EC2 page,
--         choose __Load Balancers__ in the navigation pane, choose the
--         load balancer, choose the __Description__ tab, and get the value
--         of the __DNS name__ field.
--
--         If you\'re routing traffic to a Classic Load Balancer, get the
--         value that begins with __dualstack__. If you\'re routing traffic
--         to another type of load balancer, get the value that applies to
--         the record type, A or AAAA.
--
--     -   __Elastic Load Balancing API__: Use @DescribeLoadBalancers@ to
--         get the value of @DNSName@. For more information, see the
--         applicable guide:
--
--         -   Classic Load Balancers:
--             <https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--
--         -   Application and Network Load Balancers:
--             <https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html DescribeLoadBalancers>
--
--     -   __CLI__: Use @describe-load-balancers@ to get the value of
--         @DNSName@. For more information, see the applicable guide:
--
--         -   Classic Load Balancers:
--             <http://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html describe-load-balancers>
--
--         -   Application and Network Load Balancers:
--             <http://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html describe-load-balancers>
--
-- [Global Accelerator accelerator]
--     Specify the DNS name for your accelerator:
--
--     -   __Global Accelerator API:__ To get the DNS name, use
--         <https://docs.aws.amazon.com/global-accelerator/latest/api/API_DescribeAccelerator.html DescribeAccelerator>.
--
--     -   __CLI:__ To get the DNS name, use
--         <https://docs.aws.amazon.com/cli/latest/reference/globalaccelerator/describe-accelerator.html describe-accelerator>.
--
-- [Amazon S3 bucket that is configured as a static website]
--     Specify the domain name of the Amazon S3 website endpoint that you
--     created the bucket in, for example,
--     @s3-website.us-east-2.amazonaws.com@. For more information about
--     valid values, see the table
--     <https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints Amazon S3 Website Endpoints>
--     in the /Amazon Web Services General Reference/. For more information
--     about using S3 buckets for websites, see
--     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html Getting Started with Amazon Route 53>
--     in the /Amazon Route 53 Developer Guide./
--
-- [Another Route 53 resource record set]
--     Specify the value of the @Name@ element for a resource record set in
--     the current hosted zone.
--
--     If you\'re creating an alias record that has the same name as the
--     hosted zone (known as the zone apex), you can\'t specify the domain
--     name for a record for which the value of @Type@ is @CNAME@. This is
--     because the alias record must have the same type as the record that
--     you\'re routing traffic to, and creating a CNAME record for the zone
--     apex isn\'t supported even for an alias record.
aliasTarget_dNSName :: Lens.Lens' AliasTarget Prelude.Text
aliasTarget_dNSName :: (Text -> f Text) -> AliasTarget -> f AliasTarget
aliasTarget_dNSName = (AliasTarget -> Text)
-> (AliasTarget -> Text -> AliasTarget)
-> Lens AliasTarget AliasTarget Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AliasTarget' {Text
dNSName :: Text
$sel:dNSName:AliasTarget' :: AliasTarget -> Text
dNSName} -> Text
dNSName) (\s :: AliasTarget
s@AliasTarget' {} Text
a -> AliasTarget
s {$sel:dNSName:AliasTarget' :: Text
dNSName = Text
a} :: AliasTarget)

-- | /Applies only to alias, failover alias, geolocation alias, latency
-- alias, and weighted alias resource record sets:/ When
-- @EvaluateTargetHealth@ is @true@, an alias resource record set inherits
-- the health of the referenced Amazon Web Services resource, such as an
-- ELB load balancer or another resource record set in the hosted zone.
--
-- Note the following:
--
-- [CloudFront distributions]
--     You can\'t set @EvaluateTargetHealth@ to @true@ when the alias
--     target is a CloudFront distribution.
--
-- [Elastic Beanstalk environments that have regionalized subdomains]
--     If you specify an Elastic Beanstalk environment in @DNSName@ and the
--     environment contains an ELB load balancer, Elastic Load Balancing
--     routes queries only to the healthy Amazon EC2 instances that are
--     registered with the load balancer. (An environment automatically
--     contains an ELB load balancer if it includes more than one Amazon
--     EC2 instance.) If you set @EvaluateTargetHealth@ to @true@ and
--     either no Amazon EC2 instances are healthy or the load balancer
--     itself is unhealthy, Route 53 routes queries to other available
--     resources that are healthy, if any.
--
--     If the environment contains a single Amazon EC2 instance, there are
--     no special requirements.
--
-- [ELB load balancers]
--     Health checking behavior depends on the type of load balancer:
--
--     -   __Classic Load Balancers__: If you specify an ELB Classic Load
--         Balancer in @DNSName@, Elastic Load Balancing routes queries
--         only to the healthy Amazon EC2 instances that are registered
--         with the load balancer. If you set @EvaluateTargetHealth@ to
--         @true@ and either no EC2 instances are healthy or the load
--         balancer itself is unhealthy, Route 53 routes queries to other
--         resources.
--
--     -   __Application and Network Load Balancers__: If you specify an
--         ELB Application or Network Load Balancer and you set
--         @EvaluateTargetHealth@ to @true@, Route 53 routes queries to the
--         load balancer based on the health of the target groups that are
--         associated with the load balancer:
--
--         -   For an Application or Network Load Balancer to be considered
--             healthy, every target group that contains targets must
--             contain at least one healthy target. If any target group
--             contains only unhealthy targets, the load balancer is
--             considered unhealthy, and Route 53 routes queries to other
--             resources.
--
--         -   A target group that has no registered targets is considered
--             unhealthy.
--
--     When you create a load balancer, you configure settings for Elastic
--     Load Balancing health checks; they\'re not Route 53 health checks,
--     but they perform a similar function. Do not create Route 53 health
--     checks for the EC2 instances that you register with an ELB load
--     balancer.
--
-- [S3 buckets]
--     There are no special requirements for setting @EvaluateTargetHealth@
--     to @true@ when the alias target is an S3 bucket.
--
-- [Other records in the same hosted zone]
--     If the Amazon Web Services resource that you specify in @DNSName@ is
--     a record or a group of records (for example, a group of weighted
--     records) but is not another alias record, we recommend that you
--     associate a health check with all of the records in the alias
--     target. For more information, see
--     <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting What Happens When You Omit Health Checks?>
--     in the /Amazon Route 53 Developer Guide/.
--
-- For more information and examples, see
-- <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html Amazon Route 53 Health Checks and DNS Failover>
-- in the /Amazon Route 53 Developer Guide/.
aliasTarget_evaluateTargetHealth :: Lens.Lens' AliasTarget Prelude.Bool
aliasTarget_evaluateTargetHealth :: (Bool -> f Bool) -> AliasTarget -> f AliasTarget
aliasTarget_evaluateTargetHealth = (AliasTarget -> Bool)
-> (AliasTarget -> Bool -> AliasTarget)
-> Lens AliasTarget AliasTarget Bool Bool
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AliasTarget' {Bool
evaluateTargetHealth :: Bool
$sel:evaluateTargetHealth:AliasTarget' :: AliasTarget -> Bool
evaluateTargetHealth} -> Bool
evaluateTargetHealth) (\s :: AliasTarget
s@AliasTarget' {} Bool
a -> AliasTarget
s {$sel:evaluateTargetHealth:AliasTarget' :: Bool
evaluateTargetHealth = Bool
a} :: AliasTarget)

instance Core.FromXML AliasTarget where
  parseXML :: [Node] -> Either String AliasTarget
parseXML [Node]
x =
    ResourceId -> Text -> Bool -> AliasTarget
AliasTarget'
      (ResourceId -> Text -> Bool -> AliasTarget)
-> Either String ResourceId
-> Either String (Text -> Bool -> AliasTarget)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String ResourceId
forall a. FromXML a => [Node] -> Text -> Either String a
Core..@ Text
"HostedZoneId")
      Either String (Text -> Bool -> AliasTarget)
-> Either String Text -> Either String (Bool -> AliasTarget)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String Text
forall a. FromXML a => [Node] -> Text -> Either String a
Core..@ Text
"DNSName")
      Either String (Bool -> AliasTarget)
-> Either String Bool -> Either String AliasTarget
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String Bool
forall a. FromXML a => [Node] -> Text -> Either String a
Core..@ Text
"EvaluateTargetHealth")

instance Prelude.Hashable AliasTarget

instance Prelude.NFData AliasTarget

instance Core.ToXML AliasTarget where
  toXML :: AliasTarget -> XML
toXML AliasTarget' {Bool
Text
ResourceId
evaluateTargetHealth :: Bool
dNSName :: Text
hostedZoneId :: ResourceId
$sel:evaluateTargetHealth:AliasTarget' :: AliasTarget -> Bool
$sel:dNSName:AliasTarget' :: AliasTarget -> Text
$sel:hostedZoneId:AliasTarget' :: AliasTarget -> ResourceId
..} =
    [XML] -> XML
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ Name
"HostedZoneId" Name -> ResourceId -> XML
forall a. ToXML a => Name -> a -> XML
Core.@= ResourceId
hostedZoneId,
        Name
"DNSName" Name -> Text -> XML
forall a. ToXML a => Name -> a -> XML
Core.@= Text
dNSName,
        Name
"EvaluateTargetHealth" Name -> Bool -> XML
forall a. ToXML a => Name -> a -> XML
Core.@= Bool
evaluateTargetHealth
      ]