packages feed

amazonka-config-2.0: gen/Amazonka/Config/Types/ConfigSnapshotDeliveryProperties.hs

{-# 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.Config.Types.ConfigSnapshotDeliveryProperties
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Config.Types.ConfigSnapshotDeliveryProperties where

import Amazonka.Config.Types.MaximumExecutionFrequency
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Provides options for how often Config delivers configuration snapshots
-- to the Amazon S3 bucket in your delivery channel.
--
-- The frequency for a rule that triggers evaluations for your resources
-- when Config delivers the configuration snapshot is set by one of two
-- values, depending on which is less frequent:
--
-- -   The value for the @deliveryFrequency@ parameter within the delivery
--     channel configuration, which sets how often Config delivers
--     configuration snapshots. This value also sets how often Config
--     invokes evaluations for Config rules.
--
-- -   The value for the @MaximumExecutionFrequency@ parameter, which sets
--     the maximum frequency with which Config invokes evaluations for the
--     rule. For more information, see ConfigRule.
--
-- If the @deliveryFrequency@ value is less frequent than the
-- @MaximumExecutionFrequency@ value for a rule, Config invokes the rule
-- only as often as the @deliveryFrequency@ value.
--
-- 1.  For example, you want your rule to run evaluations when Config
--     delivers the configuration snapshot.
--
-- 2.  You specify the @MaximumExecutionFrequency@ value for @Six_Hours@.
--
-- 3.  You then specify the delivery channel @deliveryFrequency@ value for
--     @TwentyFour_Hours@.
--
-- 4.  Because the value for @deliveryFrequency@ is less frequent than
--     @MaximumExecutionFrequency@, Config invokes evaluations for the rule
--     every 24 hours.
--
-- You should set the @MaximumExecutionFrequency@ value to be at least as
-- frequent as the @deliveryFrequency@ value. You can view the
-- @deliveryFrequency@ value by using the @DescribeDeliveryChannnels@
-- action.
--
-- To update the @deliveryFrequency@ with which Config delivers your
-- configuration snapshots, use the @PutDeliveryChannel@ action.
--
-- /See:/ 'newConfigSnapshotDeliveryProperties' smart constructor.
data ConfigSnapshotDeliveryProperties = ConfigSnapshotDeliveryProperties'
  { -- | The frequency with which Config delivers configuration snapshots.
    deliveryFrequency :: Prelude.Maybe MaximumExecutionFrequency
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ConfigSnapshotDeliveryProperties' 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:
--
-- 'deliveryFrequency', 'configSnapshotDeliveryProperties_deliveryFrequency' - The frequency with which Config delivers configuration snapshots.
newConfigSnapshotDeliveryProperties ::
  ConfigSnapshotDeliveryProperties
newConfigSnapshotDeliveryProperties =
  ConfigSnapshotDeliveryProperties'
    { deliveryFrequency =
        Prelude.Nothing
    }

-- | The frequency with which Config delivers configuration snapshots.
configSnapshotDeliveryProperties_deliveryFrequency :: Lens.Lens' ConfigSnapshotDeliveryProperties (Prelude.Maybe MaximumExecutionFrequency)
configSnapshotDeliveryProperties_deliveryFrequency = Lens.lens (\ConfigSnapshotDeliveryProperties' {deliveryFrequency} -> deliveryFrequency) (\s@ConfigSnapshotDeliveryProperties' {} a -> s {deliveryFrequency = a} :: ConfigSnapshotDeliveryProperties)

instance
  Data.FromJSON
    ConfigSnapshotDeliveryProperties
  where
  parseJSON =
    Data.withObject
      "ConfigSnapshotDeliveryProperties"
      ( \x ->
          ConfigSnapshotDeliveryProperties'
            Prelude.<$> (x Data..:? "deliveryFrequency")
      )

instance
  Prelude.Hashable
    ConfigSnapshotDeliveryProperties
  where
  hashWithSalt
    _salt
    ConfigSnapshotDeliveryProperties' {..} =
      _salt `Prelude.hashWithSalt` deliveryFrequency

instance
  Prelude.NFData
    ConfigSnapshotDeliveryProperties
  where
  rnf ConfigSnapshotDeliveryProperties' {..} =
    Prelude.rnf deliveryFrequency

instance Data.ToJSON ConfigSnapshotDeliveryProperties where
  toJSON ConfigSnapshotDeliveryProperties' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("deliveryFrequency" Data..=)
              Prelude.<$> deliveryFrequency
          ]
      )