{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# 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.PutConfigRule -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Adds or updates an Config rule to evaluate if your Amazon Web Services -- resources comply with your desired configurations. For information on -- how many Config rules you can have per account, see -- -- in the /Config Developer Guide/. -- -- There are two types of rules: Config Custom Rules and Config Managed -- Rules. You can use @PutConfigRule@ to create both Config custom rules -- and Config managed rules. -- -- Custom rules are rules that you can create using either Guard or Lambda -- functions. Guard -- () -- is a policy-as-code language that allows you to write policies that are -- enforced by Config Custom Policy rules. Lambda uses custom code that you -- upload to evaluate a custom rule. If you are adding a new Custom Lambda -- rule, you first need to create an Lambda function that the rule invokes -- to evaluate your resources. When you use @PutConfigRule@ to add a Custom -- Lambda rule to Config, you must specify the Amazon Resource Name (ARN) -- that Lambda assigns to the function. You specify the ARN in the -- @SourceIdentifier@ key. This key is part of the @Source@ object, which -- is part of the @ConfigRule@ object. -- -- Managed rules are predefined, customizable rules created by Config. For -- a list of managed rules, see -- . -- If you are adding an Config managed rule, you must specify the rule\'s -- identifier for the @SourceIdentifier@ key. -- -- For any new rule that you add, specify the @ConfigRuleName@ in the -- @ConfigRule@ object. Do not specify the @ConfigRuleArn@ or the -- @ConfigRuleId@. These values are generated by Config for new rules. -- -- If you are updating a rule that you added previously, you can specify -- the rule by @ConfigRuleName@, @ConfigRuleId@, or @ConfigRuleArn@ in the -- @ConfigRule@ data type that you use in this request. -- -- For more information about developing and using Config rules, see -- -- in the /Config Developer Guide/. module Amazonka.Config.PutConfigRule ( -- * Creating a Request PutConfigRule (..), newPutConfigRule, -- * Request Lenses putConfigRule_tags, putConfigRule_configRule, -- * Destructuring the Response PutConfigRuleResponse (..), newPutConfigRuleResponse, ) where import Amazonka.Config.Types 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 import qualified Amazonka.Request as Request import qualified Amazonka.Response as Response -- | /See:/ 'newPutConfigRule' smart constructor. data PutConfigRule = PutConfigRule' { -- | An array of tag object. tags :: Prelude.Maybe [Tag], -- | The rule that you want to add to your account. configRule :: ConfigRule } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'PutConfigRule' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'tags', 'putConfigRule_tags' - An array of tag object. -- -- 'configRule', 'putConfigRule_configRule' - The rule that you want to add to your account. newPutConfigRule :: -- | 'configRule' ConfigRule -> PutConfigRule newPutConfigRule pConfigRule_ = PutConfigRule' { tags = Prelude.Nothing, configRule = pConfigRule_ } -- | An array of tag object. putConfigRule_tags :: Lens.Lens' PutConfigRule (Prelude.Maybe [Tag]) putConfigRule_tags = Lens.lens (\PutConfigRule' {tags} -> tags) (\s@PutConfigRule' {} a -> s {tags = a} :: PutConfigRule) Prelude.. Lens.mapping Lens.coerced -- | The rule that you want to add to your account. putConfigRule_configRule :: Lens.Lens' PutConfigRule ConfigRule putConfigRule_configRule = Lens.lens (\PutConfigRule' {configRule} -> configRule) (\s@PutConfigRule' {} a -> s {configRule = a} :: PutConfigRule) instance Core.AWSRequest PutConfigRule where type AWSResponse PutConfigRule = PutConfigRuleResponse request overrides = Request.postJSON (overrides defaultService) response = Response.receiveNull PutConfigRuleResponse' instance Prelude.Hashable PutConfigRule where hashWithSalt _salt PutConfigRule' {..} = _salt `Prelude.hashWithSalt` tags `Prelude.hashWithSalt` configRule instance Prelude.NFData PutConfigRule where rnf PutConfigRule' {..} = Prelude.rnf tags `Prelude.seq` Prelude.rnf configRule instance Data.ToHeaders PutConfigRule where toHeaders = Prelude.const ( Prelude.mconcat [ "X-Amz-Target" Data.=# ( "StarlingDoveService.PutConfigRule" :: Prelude.ByteString ), "Content-Type" Data.=# ( "application/x-amz-json-1.1" :: Prelude.ByteString ) ] ) instance Data.ToJSON PutConfigRule where toJSON PutConfigRule' {..} = Data.object ( Prelude.catMaybes [ ("Tags" Data..=) Prelude.<$> tags, Prelude.Just ("ConfigRule" Data..= configRule) ] ) instance Data.ToPath PutConfigRule where toPath = Prelude.const "/" instance Data.ToQuery PutConfigRule where toQuery = Prelude.const Prelude.mempty -- | /See:/ 'newPutConfigRuleResponse' smart constructor. data PutConfigRuleResponse = PutConfigRuleResponse' { } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'PutConfigRuleResponse' with all optional fields omitted. -- -- Use or to modify other optional fields. newPutConfigRuleResponse :: PutConfigRuleResponse newPutConfigRuleResponse = PutConfigRuleResponse' instance Prelude.NFData PutConfigRuleResponse where rnf _ = ()