{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- |
-- Module      : Amazonka.AppConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Derived from API version @2019-10-09@ of the AWS service descriptions, licensed under Apache 2.0.
--
-- Use AppConfig, a capability of Amazon Web Services Systems Manager, to
-- create, manage, and quickly deploy application configurations. AppConfig
-- supports controlled deployments to applications of any size and includes
-- built-in validation checks and monitoring. You can use AppConfig with
-- applications hosted on Amazon EC2 instances, Lambda, containers, mobile
-- applications, or IoT devices.
--
-- To prevent errors when deploying application configurations, especially
-- for production systems where a simple typo could cause an unexpected
-- outage, AppConfig includes validators. A validator provides a syntactic
-- or semantic check to ensure that the configuration you want to deploy
-- works as intended. To validate your application configuration data, you
-- provide a schema or an Amazon Web Services Lambda function that runs
-- against the configuration. The configuration deployment or update can
-- only proceed when the configuration data is valid.
--
-- During a configuration deployment, AppConfig monitors the application to
-- ensure that the deployment is successful. If the system encounters an
-- error, AppConfig rolls back the change to minimize impact for your
-- application users. You can configure a deployment strategy for each
-- application or environment that includes deployment criteria, including
-- velocity, bake time, and alarms to monitor. Similar to error monitoring,
-- if a deployment triggers an alarm, AppConfig automatically rolls back to
-- the previous version.
--
-- AppConfig supports multiple use cases. Here are some examples:
--
-- -   __Feature flags__: Use AppConfig to turn on new features that
--     require a timely deployment, such as a product launch or
--     announcement.
--
-- -   __Application tuning__: Use AppConfig to carefully introduce changes
--     to your application that can only be tested with production traffic.
--
-- -   __Allow list__: Use AppConfig to allow premium subscribers to access
--     paid content.
--
-- -   __Operational issues__: Use AppConfig to reduce stress on your
--     application when a dependency or other external factor impacts the
--     system.
--
-- This reference is intended to be used with the
-- <http://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html AppConfig User Guide>.
module Amazonka.AppConfig
  ( -- * Service Configuration
    defaultService,

    -- * Errors
    -- $errors

    -- ** BadRequestException
    _BadRequestException,

    -- ** ConflictException
    _ConflictException,

    -- ** InternalServerException
    _InternalServerException,

    -- ** PayloadTooLargeException
    _PayloadTooLargeException,

    -- ** ResourceNotFoundException
    _ResourceNotFoundException,

    -- ** ServiceQuotaExceededException
    _ServiceQuotaExceededException,

    -- * Waiters
    -- $waiters

    -- * Operations
    -- $operations

    -- ** CreateApplication
    CreateApplication (CreateApplication'),
    newCreateApplication,
    Application (Application'),
    newApplication,

    -- ** CreateConfigurationProfile
    CreateConfigurationProfile (CreateConfigurationProfile'),
    newCreateConfigurationProfile,
    ConfigurationProfile (ConfigurationProfile'),
    newConfigurationProfile,

    -- ** CreateDeploymentStrategy
    CreateDeploymentStrategy (CreateDeploymentStrategy'),
    newCreateDeploymentStrategy,
    DeploymentStrategy (DeploymentStrategy'),
    newDeploymentStrategy,

    -- ** CreateEnvironment
    CreateEnvironment (CreateEnvironment'),
    newCreateEnvironment,
    Environment (Environment'),
    newEnvironment,

    -- ** CreateExtension
    CreateExtension (CreateExtension'),
    newCreateExtension,
    Extension (Extension'),
    newExtension,

    -- ** CreateExtensionAssociation
    CreateExtensionAssociation (CreateExtensionAssociation'),
    newCreateExtensionAssociation,
    ExtensionAssociation (ExtensionAssociation'),
    newExtensionAssociation,

    -- ** CreateHostedConfigurationVersion
    CreateHostedConfigurationVersion (CreateHostedConfigurationVersion'),
    newCreateHostedConfigurationVersion,
    HostedConfigurationVersion (HostedConfigurationVersion'),
    newHostedConfigurationVersion,

    -- ** DeleteApplication
    DeleteApplication (DeleteApplication'),
    newDeleteApplication,
    DeleteApplicationResponse (DeleteApplicationResponse'),
    newDeleteApplicationResponse,

    -- ** DeleteConfigurationProfile
    DeleteConfigurationProfile (DeleteConfigurationProfile'),
    newDeleteConfigurationProfile,
    DeleteConfigurationProfileResponse (DeleteConfigurationProfileResponse'),
    newDeleteConfigurationProfileResponse,

    -- ** DeleteDeploymentStrategy
    DeleteDeploymentStrategy (DeleteDeploymentStrategy'),
    newDeleteDeploymentStrategy,
    DeleteDeploymentStrategyResponse (DeleteDeploymentStrategyResponse'),
    newDeleteDeploymentStrategyResponse,

    -- ** DeleteEnvironment
    DeleteEnvironment (DeleteEnvironment'),
    newDeleteEnvironment,
    DeleteEnvironmentResponse (DeleteEnvironmentResponse'),
    newDeleteEnvironmentResponse,

    -- ** DeleteExtension
    DeleteExtension (DeleteExtension'),
    newDeleteExtension,
    DeleteExtensionResponse (DeleteExtensionResponse'),
    newDeleteExtensionResponse,

    -- ** DeleteExtensionAssociation
    DeleteExtensionAssociation (DeleteExtensionAssociation'),
    newDeleteExtensionAssociation,
    DeleteExtensionAssociationResponse (DeleteExtensionAssociationResponse'),
    newDeleteExtensionAssociationResponse,

    -- ** DeleteHostedConfigurationVersion
    DeleteHostedConfigurationVersion (DeleteHostedConfigurationVersion'),
    newDeleteHostedConfigurationVersion,
    DeleteHostedConfigurationVersionResponse (DeleteHostedConfigurationVersionResponse'),
    newDeleteHostedConfigurationVersionResponse,

    -- ** GetApplication
    GetApplication (GetApplication'),
    newGetApplication,
    Application (Application'),
    newApplication,

    -- ** GetConfigurationProfile
    GetConfigurationProfile (GetConfigurationProfile'),
    newGetConfigurationProfile,
    ConfigurationProfile (ConfigurationProfile'),
    newConfigurationProfile,

    -- ** GetDeployment
    GetDeployment (GetDeployment'),
    newGetDeployment,
    Deployment (Deployment'),
    newDeployment,

    -- ** GetDeploymentStrategy
    GetDeploymentStrategy (GetDeploymentStrategy'),
    newGetDeploymentStrategy,
    DeploymentStrategy (DeploymentStrategy'),
    newDeploymentStrategy,

    -- ** GetEnvironment
    GetEnvironment (GetEnvironment'),
    newGetEnvironment,
    Environment (Environment'),
    newEnvironment,

    -- ** GetExtension
    GetExtension (GetExtension'),
    newGetExtension,
    Extension (Extension'),
    newExtension,

    -- ** GetExtensionAssociation
    GetExtensionAssociation (GetExtensionAssociation'),
    newGetExtensionAssociation,
    ExtensionAssociation (ExtensionAssociation'),
    newExtensionAssociation,

    -- ** GetHostedConfigurationVersion
    GetHostedConfigurationVersion (GetHostedConfigurationVersion'),
    newGetHostedConfigurationVersion,
    HostedConfigurationVersion (HostedConfigurationVersion'),
    newHostedConfigurationVersion,

    -- ** ListApplications
    ListApplications (ListApplications'),
    newListApplications,
    ListApplicationsResponse (ListApplicationsResponse'),
    newListApplicationsResponse,

    -- ** ListConfigurationProfiles
    ListConfigurationProfiles (ListConfigurationProfiles'),
    newListConfigurationProfiles,
    ListConfigurationProfilesResponse (ListConfigurationProfilesResponse'),
    newListConfigurationProfilesResponse,

    -- ** ListDeploymentStrategies
    ListDeploymentStrategies (ListDeploymentStrategies'),
    newListDeploymentStrategies,
    ListDeploymentStrategiesResponse (ListDeploymentStrategiesResponse'),
    newListDeploymentStrategiesResponse,

    -- ** ListDeployments
    ListDeployments (ListDeployments'),
    newListDeployments,
    ListDeploymentsResponse (ListDeploymentsResponse'),
    newListDeploymentsResponse,

    -- ** ListEnvironments
    ListEnvironments (ListEnvironments'),
    newListEnvironments,
    ListEnvironmentsResponse (ListEnvironmentsResponse'),
    newListEnvironmentsResponse,

    -- ** ListExtensionAssociations
    ListExtensionAssociations (ListExtensionAssociations'),
    newListExtensionAssociations,
    ListExtensionAssociationsResponse (ListExtensionAssociationsResponse'),
    newListExtensionAssociationsResponse,

    -- ** ListExtensions
    ListExtensions (ListExtensions'),
    newListExtensions,
    ListExtensionsResponse (ListExtensionsResponse'),
    newListExtensionsResponse,

    -- ** ListHostedConfigurationVersions
    ListHostedConfigurationVersions (ListHostedConfigurationVersions'),
    newListHostedConfigurationVersions,
    ListHostedConfigurationVersionsResponse (ListHostedConfigurationVersionsResponse'),
    newListHostedConfigurationVersionsResponse,

    -- ** ListTagsForResource
    ListTagsForResource (ListTagsForResource'),
    newListTagsForResource,
    ListTagsForResourceResponse (ListTagsForResourceResponse'),
    newListTagsForResourceResponse,

    -- ** StartDeployment
    StartDeployment (StartDeployment'),
    newStartDeployment,
    Deployment (Deployment'),
    newDeployment,

    -- ** StopDeployment
    StopDeployment (StopDeployment'),
    newStopDeployment,
    Deployment (Deployment'),
    newDeployment,

    -- ** TagResource
    TagResource (TagResource'),
    newTagResource,
    TagResourceResponse (TagResourceResponse'),
    newTagResourceResponse,

    -- ** UntagResource
    UntagResource (UntagResource'),
    newUntagResource,
    UntagResourceResponse (UntagResourceResponse'),
    newUntagResourceResponse,

    -- ** UpdateApplication
    UpdateApplication (UpdateApplication'),
    newUpdateApplication,
    Application (Application'),
    newApplication,

    -- ** UpdateConfigurationProfile
    UpdateConfigurationProfile (UpdateConfigurationProfile'),
    newUpdateConfigurationProfile,
    ConfigurationProfile (ConfigurationProfile'),
    newConfigurationProfile,

    -- ** UpdateDeploymentStrategy
    UpdateDeploymentStrategy (UpdateDeploymentStrategy'),
    newUpdateDeploymentStrategy,
    DeploymentStrategy (DeploymentStrategy'),
    newDeploymentStrategy,

    -- ** UpdateEnvironment
    UpdateEnvironment (UpdateEnvironment'),
    newUpdateEnvironment,
    Environment (Environment'),
    newEnvironment,

    -- ** UpdateExtension
    UpdateExtension (UpdateExtension'),
    newUpdateExtension,
    Extension (Extension'),
    newExtension,

    -- ** UpdateExtensionAssociation
    UpdateExtensionAssociation (UpdateExtensionAssociation'),
    newUpdateExtensionAssociation,
    ExtensionAssociation (ExtensionAssociation'),
    newExtensionAssociation,

    -- ** ValidateConfiguration
    ValidateConfiguration (ValidateConfiguration'),
    newValidateConfiguration,
    ValidateConfigurationResponse (ValidateConfigurationResponse'),
    newValidateConfigurationResponse,

    -- * Types

    -- ** ActionPoint
    ActionPoint (..),

    -- ** DeploymentEventType
    DeploymentEventType (..),

    -- ** DeploymentState
    DeploymentState (..),

    -- ** EnvironmentState
    EnvironmentState (..),

    -- ** GrowthType
    GrowthType (..),

    -- ** ReplicateTo
    ReplicateTo (..),

    -- ** TriggeredBy
    TriggeredBy (..),

    -- ** ValidatorType
    ValidatorType (..),

    -- ** Action
    Action (Action'),
    newAction,

    -- ** ActionInvocation
    ActionInvocation (ActionInvocation'),
    newActionInvocation,

    -- ** Application
    Application (Application'),
    newApplication,

    -- ** AppliedExtension
    AppliedExtension (AppliedExtension'),
    newAppliedExtension,

    -- ** ConfigurationProfile
    ConfigurationProfile (ConfigurationProfile'),
    newConfigurationProfile,

    -- ** ConfigurationProfileSummary
    ConfigurationProfileSummary (ConfigurationProfileSummary'),
    newConfigurationProfileSummary,

    -- ** Deployment
    Deployment (Deployment'),
    newDeployment,

    -- ** DeploymentEvent
    DeploymentEvent (DeploymentEvent'),
    newDeploymentEvent,

    -- ** DeploymentStrategy
    DeploymentStrategy (DeploymentStrategy'),
    newDeploymentStrategy,

    -- ** DeploymentSummary
    DeploymentSummary (DeploymentSummary'),
    newDeploymentSummary,

    -- ** Environment
    Environment (Environment'),
    newEnvironment,

    -- ** Extension
    Extension (Extension'),
    newExtension,

    -- ** ExtensionAssociation
    ExtensionAssociation (ExtensionAssociation'),
    newExtensionAssociation,

    -- ** ExtensionAssociationSummary
    ExtensionAssociationSummary (ExtensionAssociationSummary'),
    newExtensionAssociationSummary,

    -- ** ExtensionSummary
    ExtensionSummary (ExtensionSummary'),
    newExtensionSummary,

    -- ** HostedConfigurationVersion
    HostedConfigurationVersion (HostedConfigurationVersion'),
    newHostedConfigurationVersion,

    -- ** HostedConfigurationVersionSummary
    HostedConfigurationVersionSummary (HostedConfigurationVersionSummary'),
    newHostedConfigurationVersionSummary,

    -- ** Monitor
    Monitor (Monitor'),
    newMonitor,

    -- ** Parameter
    Parameter (Parameter'),
    newParameter,

    -- ** Validator
    Validator (Validator'),
    newValidator,
  )
where

import Amazonka.AppConfig.CreateApplication
import Amazonka.AppConfig.CreateConfigurationProfile
import Amazonka.AppConfig.CreateDeploymentStrategy
import Amazonka.AppConfig.CreateEnvironment
import Amazonka.AppConfig.CreateExtension
import Amazonka.AppConfig.CreateExtensionAssociation
import Amazonka.AppConfig.CreateHostedConfigurationVersion
import Amazonka.AppConfig.DeleteApplication
import Amazonka.AppConfig.DeleteConfigurationProfile
import Amazonka.AppConfig.DeleteDeploymentStrategy
import Amazonka.AppConfig.DeleteEnvironment
import Amazonka.AppConfig.DeleteExtension
import Amazonka.AppConfig.DeleteExtensionAssociation
import Amazonka.AppConfig.DeleteHostedConfigurationVersion
import Amazonka.AppConfig.GetApplication
import Amazonka.AppConfig.GetConfigurationProfile
import Amazonka.AppConfig.GetDeployment
import Amazonka.AppConfig.GetDeploymentStrategy
import Amazonka.AppConfig.GetEnvironment
import Amazonka.AppConfig.GetExtension
import Amazonka.AppConfig.GetExtensionAssociation
import Amazonka.AppConfig.GetHostedConfigurationVersion
import Amazonka.AppConfig.Lens
import Amazonka.AppConfig.ListApplications
import Amazonka.AppConfig.ListConfigurationProfiles
import Amazonka.AppConfig.ListDeploymentStrategies
import Amazonka.AppConfig.ListDeployments
import Amazonka.AppConfig.ListEnvironments
import Amazonka.AppConfig.ListExtensionAssociations
import Amazonka.AppConfig.ListExtensions
import Amazonka.AppConfig.ListHostedConfigurationVersions
import Amazonka.AppConfig.ListTagsForResource
import Amazonka.AppConfig.StartDeployment
import Amazonka.AppConfig.StopDeployment
import Amazonka.AppConfig.TagResource
import Amazonka.AppConfig.Types
import Amazonka.AppConfig.UntagResource
import Amazonka.AppConfig.UpdateApplication
import Amazonka.AppConfig.UpdateConfigurationProfile
import Amazonka.AppConfig.UpdateDeploymentStrategy
import Amazonka.AppConfig.UpdateEnvironment
import Amazonka.AppConfig.UpdateExtension
import Amazonka.AppConfig.UpdateExtensionAssociation
import Amazonka.AppConfig.ValidateConfiguration
import Amazonka.AppConfig.Waiters

-- $errors
-- Error matchers are designed for use with the functions provided by
-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-- This allows catching (and rethrowing) service specific errors returned
-- by 'AppConfig'.

-- $operations
-- Some AWS operations return results that are incomplete and require subsequent
-- requests in order to obtain the entire result set. The process of sending
-- subsequent requests to continue where a previous request left off is called
-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-- 1000 objects at a time, and you must send subsequent requests with the
-- appropriate Marker in order to retrieve the next page of results.
--
-- Operations that have an 'AWSPager' instance can transparently perform subsequent
-- requests, correctly setting Markers and other request facets to iterate through
-- the entire result set of a truncated API operation. Operations which support
-- this have an additional note in the documentation.
--
-- Many operations have the ability to filter results on the server side. See the
-- individual operation parameters for details.

-- $waiters
-- Waiters poll by repeatedly sending a request until some remote success condition
-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-- determines how many attempts should be made, in addition to delay and retry strategies.