%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc When you create a VPC using Amazon VPC, you automatically get DNS %% resolution within the VPC from Route 53 Resolver. %% %% By default, Resolver answers DNS queries for VPC domain names such as %% domain names for EC2 instances or ELB load balancers. Resolver performs %% recursive lookups against public name servers for all other domain names. %% %% You can also configure DNS resolution between your VPC and your network %% over a Direct Connect or VPN connection: %% %% Forward DNS queries from resolvers on your network to Route 53 Resolver %% %% DNS resolvers on your network can forward DNS queries to Resolver in a %% specified VPC. This allows your DNS resolvers to easily resolve domain %% names for AWS resources such as EC2 instances or records in a Route 53 %% private hosted zone. For more information, see How DNS Resolvers on Your %% Network Forward DNS Queries to Route 53 Resolver in the Amazon Route 53 %% Developer Guide. %% %% Conditionally forward queries from a VPC to resolvers on your network %% %% You can configure Resolver to forward queries that it receives from EC2 %% instances in your VPCs to DNS resolvers on your network. To forward %% selected queries, you create Resolver rules that specify the domain names %% for the DNS queries that you want to forward (such as example.com), and %% the IP addresses of the DNS resolvers on your network that you want to %% forward the queries to. If a query matches multiple rules (example.com, %% acme.example.com), Resolver chooses the rule with the most specific match %% (acme.example.com) and forwards the query to the IP addresses that you %% specified in that rule. For more information, see How Route 53 Resolver %% Forwards DNS Queries from Your VPCs to Your Network in the Amazon Route 53 %% Developer Guide. %% %% Like Amazon VPC, Resolver is regional. In each region where you have VPCs, %% you can choose whether to forward queries from your VPCs to your network %% (outbound queries), from your network to your VPCs (inbound queries), or %% both. -module(aws_route53resolver). -export([associate_resolver_endpoint_ip_address/2, associate_resolver_endpoint_ip_address/3, associate_resolver_query_log_config/2, associate_resolver_query_log_config/3, associate_resolver_rule/2, associate_resolver_rule/3, create_resolver_endpoint/2, create_resolver_endpoint/3, create_resolver_query_log_config/2, create_resolver_query_log_config/3, create_resolver_rule/2, create_resolver_rule/3, delete_resolver_endpoint/2, delete_resolver_endpoint/3, delete_resolver_query_log_config/2, delete_resolver_query_log_config/3, delete_resolver_rule/2, delete_resolver_rule/3, disassociate_resolver_endpoint_ip_address/2, disassociate_resolver_endpoint_ip_address/3, disassociate_resolver_query_log_config/2, disassociate_resolver_query_log_config/3, disassociate_resolver_rule/2, disassociate_resolver_rule/3, get_resolver_dnssec_config/2, get_resolver_dnssec_config/3, get_resolver_endpoint/2, get_resolver_endpoint/3, get_resolver_query_log_config/2, get_resolver_query_log_config/3, get_resolver_query_log_config_association/2, get_resolver_query_log_config_association/3, get_resolver_query_log_config_policy/2, get_resolver_query_log_config_policy/3, get_resolver_rule/2, get_resolver_rule/3, get_resolver_rule_association/2, get_resolver_rule_association/3, get_resolver_rule_policy/2, get_resolver_rule_policy/3, list_resolver_dnssec_configs/2, list_resolver_dnssec_configs/3, list_resolver_endpoint_ip_addresses/2, list_resolver_endpoint_ip_addresses/3, list_resolver_endpoints/2, list_resolver_endpoints/3, list_resolver_query_log_config_associations/2, list_resolver_query_log_config_associations/3, list_resolver_query_log_configs/2, list_resolver_query_log_configs/3, list_resolver_rule_associations/2, list_resolver_rule_associations/3, list_resolver_rules/2, list_resolver_rules/3, list_tags_for_resource/2, list_tags_for_resource/3, put_resolver_query_log_config_policy/2, put_resolver_query_log_config_policy/3, put_resolver_rule_policy/2, put_resolver_rule_policy/3, tag_resource/2, tag_resource/3, untag_resource/2, untag_resource/3, update_resolver_dnssec_config/2, update_resolver_dnssec_config/3, update_resolver_endpoint/2, update_resolver_endpoint/3, update_resolver_rule/2, update_resolver_rule/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Adds IP addresses to an inbound or an outbound Resolver endpoint. %% %% If you want to add more than one IP address, submit one %% `AssociateResolverEndpointIpAddress' request for each IP address. %% %% To remove an IP address from an endpoint, see %% DisassociateResolverEndpointIpAddress. associate_resolver_endpoint_ip_address(Client, Input) when is_map(Client), is_map(Input) -> associate_resolver_endpoint_ip_address(Client, Input, []). associate_resolver_endpoint_ip_address(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AssociateResolverEndpointIpAddress">>, Input, Options). %% @doc Associates an Amazon VPC with a specified query logging %% configuration. %% %% Route 53 Resolver logs DNS queries that originate in all of the Amazon %% VPCs that are associated with a specified query logging configuration. To %% associate more than one VPC with a configuration, submit one %% `AssociateResolverQueryLogConfig' request for each VPC. %% %% The VPCs that you associate with a query logging configuration must be in %% the same Region as the configuration. %% %% To remove a VPC from a query logging configuration, see %% DisassociateResolverQueryLogConfig. associate_resolver_query_log_config(Client, Input) when is_map(Client), is_map(Input) -> associate_resolver_query_log_config(Client, Input, []). associate_resolver_query_log_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AssociateResolverQueryLogConfig">>, Input, Options). %% @doc Associates a Resolver rule with a VPC. %% %% When you associate a rule with a VPC, Resolver forwards all DNS queries %% for the domain name that is specified in the rule and that originate in %% the VPC. The queries are forwarded to the IP addresses for the DNS %% resolvers that are specified in the rule. For more information about %% rules, see CreateResolverRule. associate_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> associate_resolver_rule(Client, Input, []). associate_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AssociateResolverRule">>, Input, Options). %% @doc Creates a Resolver endpoint. %% %% There are two types of Resolver endpoints, inbound and outbound: %% %% create_resolver_endpoint(Client, Input) when is_map(Client), is_map(Input) -> create_resolver_endpoint(Client, Input, []). create_resolver_endpoint(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateResolverEndpoint">>, Input, Options). %% @doc Creates a Resolver query logging configuration, which defines where %% you want Resolver to save DNS query logs that originate in your VPCs. %% %% Resolver can log queries only for VPCs that are in the same Region as the %% query logging configuration. %% %% To specify which VPCs you want to log queries for, you use %% `AssociateResolverQueryLogConfig'. For more information, see %% AssociateResolverQueryLogConfig. %% %% You can optionally use AWS Resource Access Manager (AWS RAM) to share a %% query logging configuration with other AWS accounts. The other accounts %% can then associate VPCs with the configuration. The query logs that %% Resolver creates for a configuration include all DNS queries that %% originate in all VPCs that are associated with the configuration. create_resolver_query_log_config(Client, Input) when is_map(Client), is_map(Input) -> create_resolver_query_log_config(Client, Input, []). create_resolver_query_log_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateResolverQueryLogConfig">>, Input, Options). %% @doc For DNS queries that originate in your VPCs, specifies which Resolver %% endpoint the queries pass through, one domain name that you want to %% forward to your network, and the IP addresses of the DNS resolvers in your %% network. create_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> create_resolver_rule(Client, Input, []). create_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateResolverRule">>, Input, Options). %% @doc Deletes a Resolver endpoint. %% %% The effect of deleting a Resolver endpoint depends on whether it's an %% inbound or an outbound Resolver endpoint: %% %% delete_resolver_endpoint(Client, Input) when is_map(Client), is_map(Input) -> delete_resolver_endpoint(Client, Input, []). delete_resolver_endpoint(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteResolverEndpoint">>, Input, Options). %% @doc Deletes a query logging configuration. %% %% When you delete a configuration, Resolver stops logging DNS queries for %% all of the Amazon VPCs that are associated with the configuration. This %% also applies if the query logging configuration is shared with other AWS %% accounts, and the other accounts have associated VPCs with the shared %% configuration. %% %% Before you can delete a query logging configuration, you must first %% disassociate all VPCs from the configuration. See %% DisassociateResolverQueryLogConfig. %% %% If you used Resource Access Manager (RAM) to share a query logging %% configuration with other accounts, you must stop sharing the configuration %% before you can delete a configuration. The accounts that you shared the %% configuration with can first disassociate VPCs that they associated with %% the configuration, but that's not necessary. If you stop sharing the %% configuration, those VPCs are automatically disassociated from the %% configuration. delete_resolver_query_log_config(Client, Input) when is_map(Client), is_map(Input) -> delete_resolver_query_log_config(Client, Input, []). delete_resolver_query_log_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteResolverQueryLogConfig">>, Input, Options). %% @doc Deletes a Resolver rule. %% %% Before you can delete a Resolver rule, you must disassociate it from all %% the VPCs that you associated the Resolver rule with. For more information, %% see DisassociateResolverRule. delete_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> delete_resolver_rule(Client, Input, []). delete_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteResolverRule">>, Input, Options). %% @doc Removes IP addresses from an inbound or an outbound Resolver %% endpoint. %% %% If you want to remove more than one IP address, submit one %% `DisassociateResolverEndpointIpAddress' request for each IP address. %% %% To add an IP address to an endpoint, see %% AssociateResolverEndpointIpAddress. disassociate_resolver_endpoint_ip_address(Client, Input) when is_map(Client), is_map(Input) -> disassociate_resolver_endpoint_ip_address(Client, Input, []). disassociate_resolver_endpoint_ip_address(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DisassociateResolverEndpointIpAddress">>, Input, Options). %% @doc Disassociates a VPC from a query logging configuration. %% %% Before you can delete a query logging configuration, you must first %% disassociate all VPCs from the configuration. If you used Resource Access %% Manager (RAM) to share a query logging configuration with other accounts, %% VPCs can be disassociated from the configuration in the following ways: %% %% The accounts that you shared the configuration with can disassociate VPCs %% from the configuration. %% %% You can stop sharing the configuration. disassociate_resolver_query_log_config(Client, Input) when is_map(Client), is_map(Input) -> disassociate_resolver_query_log_config(Client, Input, []). disassociate_resolver_query_log_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DisassociateResolverQueryLogConfig">>, Input, Options). %% @doc Removes the association between a specified Resolver rule and a %% specified VPC. %% %% If you disassociate a Resolver rule from a VPC, Resolver stops forwarding %% DNS queries for the domain name that you specified in the Resolver rule. disassociate_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> disassociate_resolver_rule(Client, Input, []). disassociate_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DisassociateResolverRule">>, Input, Options). %% @doc Gets DNSSEC validation information for a specified resource. get_resolver_dnssec_config(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_dnssec_config(Client, Input, []). get_resolver_dnssec_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverDnssecConfig">>, Input, Options). %% @doc Gets information about a specified Resolver endpoint, such as whether %% it's an inbound or an outbound Resolver endpoint, and the current status %% of the endpoint. get_resolver_endpoint(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_endpoint(Client, Input, []). get_resolver_endpoint(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverEndpoint">>, Input, Options). %% @doc Gets information about a specified Resolver query logging %% configuration, such as the number of VPCs that the configuration is %% logging queries for and the location that logs are sent to. get_resolver_query_log_config(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_query_log_config(Client, Input, []). get_resolver_query_log_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverQueryLogConfig">>, Input, Options). %% @doc Gets information about a specified association between a Resolver %% query logging configuration and an Amazon VPC. %% %% When you associate a VPC with a query logging configuration, Resolver logs %% DNS queries that originate in that VPC. get_resolver_query_log_config_association(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_query_log_config_association(Client, Input, []). get_resolver_query_log_config_association(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverQueryLogConfigAssociation">>, Input, Options). %% @doc Gets information about a query logging policy. %% %% A query logging policy specifies the Resolver query logging operations and %% resources that you want to allow another AWS account to be able to use. get_resolver_query_log_config_policy(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_query_log_config_policy(Client, Input, []). get_resolver_query_log_config_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverQueryLogConfigPolicy">>, Input, Options). %% @doc Gets information about a specified Resolver rule, such as the domain %% name that the rule forwards DNS queries for and the ID of the outbound %% Resolver endpoint that the rule is associated with. get_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_rule(Client, Input, []). get_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverRule">>, Input, Options). %% @doc Gets information about an association between a specified Resolver %% rule and a VPC. %% %% You associate a Resolver rule and a VPC using AssociateResolverRule. get_resolver_rule_association(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_rule_association(Client, Input, []). get_resolver_rule_association(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverRuleAssociation">>, Input, Options). %% @doc Gets information about the Resolver rule policy for a specified rule. %% %% A Resolver rule policy includes the rule that you want to share with %% another account, the account that you want to share the rule with, and the %% Resolver operations that you want to allow the account to use. get_resolver_rule_policy(Client, Input) when is_map(Client), is_map(Input) -> get_resolver_rule_policy(Client, Input, []). get_resolver_rule_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResolverRulePolicy">>, Input, Options). %% @doc Lists the configurations for DNSSEC validation that are associated %% with the current AWS account. list_resolver_dnssec_configs(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_dnssec_configs(Client, Input, []). list_resolver_dnssec_configs(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverDnssecConfigs">>, Input, Options). %% @doc Gets the IP addresses for a specified Resolver endpoint. list_resolver_endpoint_ip_addresses(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_endpoint_ip_addresses(Client, Input, []). list_resolver_endpoint_ip_addresses(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverEndpointIpAddresses">>, Input, Options). %% @doc Lists all the Resolver endpoints that were created using the current %% AWS account. list_resolver_endpoints(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_endpoints(Client, Input, []). list_resolver_endpoints(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverEndpoints">>, Input, Options). %% @doc Lists information about associations between Amazon VPCs and query %% logging configurations. list_resolver_query_log_config_associations(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_query_log_config_associations(Client, Input, []). list_resolver_query_log_config_associations(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverQueryLogConfigAssociations">>, Input, Options). %% @doc Lists information about the specified query logging configurations. %% %% Each configuration defines where you want Resolver to save DNS query logs %% and specifies the VPCs that you want to log queries for. list_resolver_query_log_configs(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_query_log_configs(Client, Input, []). list_resolver_query_log_configs(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverQueryLogConfigs">>, Input, Options). %% @doc Lists the associations that were created between Resolver rules and %% VPCs using the current AWS account. list_resolver_rule_associations(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_rule_associations(Client, Input, []). list_resolver_rule_associations(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverRuleAssociations">>, Input, Options). %% @doc Lists the Resolver rules that were created using the current AWS %% account. list_resolver_rules(Client, Input) when is_map(Client), is_map(Input) -> list_resolver_rules(Client, Input, []). list_resolver_rules(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListResolverRules">>, Input, Options). %% @doc Lists the tags that you associated with the specified resource. list_tags_for_resource(Client, Input) when is_map(Client), is_map(Input) -> list_tags_for_resource(Client, Input, []). list_tags_for_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListTagsForResource">>, Input, Options). %% @doc Specifies an AWS account that you want to share a query logging %% configuration with, the query logging configuration that you want to %% share, and the operations that you want the account to be able to perform %% on the configuration. put_resolver_query_log_config_policy(Client, Input) when is_map(Client), is_map(Input) -> put_resolver_query_log_config_policy(Client, Input, []). put_resolver_query_log_config_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutResolverQueryLogConfigPolicy">>, Input, Options). %% @doc Specifies an AWS rule that you want to share with another account, %% the account that you want to share the rule with, and the operations that %% you want the account to be able to perform on the rule. put_resolver_rule_policy(Client, Input) when is_map(Client), is_map(Input) -> put_resolver_rule_policy(Client, Input, []). put_resolver_rule_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutResolverRulePolicy">>, Input, Options). %% @doc Adds one or more tags to a specified resource. tag_resource(Client, Input) when is_map(Client), is_map(Input) -> tag_resource(Client, Input, []). tag_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"TagResource">>, Input, Options). %% @doc Removes one or more tags from a specified resource. untag_resource(Client, Input) when is_map(Client), is_map(Input) -> untag_resource(Client, Input, []). untag_resource(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UntagResource">>, Input, Options). %% @doc Updates an existing DNSSEC validation configuration. %% %% If there is no existing DNSSEC validation configuration, one is created. update_resolver_dnssec_config(Client, Input) when is_map(Client), is_map(Input) -> update_resolver_dnssec_config(Client, Input, []). update_resolver_dnssec_config(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateResolverDnssecConfig">>, Input, Options). %% @doc Updates the name of an inbound or an outbound Resolver endpoint. update_resolver_endpoint(Client, Input) when is_map(Client), is_map(Input) -> update_resolver_endpoint(Client, Input, []). update_resolver_endpoint(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateResolverEndpoint">>, Input, Options). %% @doc Updates settings for a specified Resolver rule. %% %% `ResolverRuleId' is required, and all other parameters are optional. If %% you don't specify a parameter, it retains its current value. update_resolver_rule(Client, Input) when is_map(Client), is_map(Input) -> update_resolver_rule(Client, Input, []). update_resolver_rule(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateResolverRule">>, Input, Options). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), binary(), map(), list()) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: map(). request(Client, Action, Input0, Options) -> Client1 = Client#{service => <<"route53resolver">>}, Host = build_host(<<"route53resolver">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, <<"Route53Resolver.", Action/binary>>} ], Input = Input0, Payload = jsx:encode(Input), SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), Response = hackney:request(post, URL, SignedHeaders, Payload, Options), handle_response(Response). handle_response({ok, 200, ResponseHeaders, Client}) -> case hackney:body(Client) of {ok, <<>>} -> {ok, undefined, {200, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body), {ok, Result, {200, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body), {error, Error, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}) -> {error, Reason}. build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}) -> Endpoint; build_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, Region, Endpoint], <<".">>). build_url(Host, Client) -> Proto = maps:get(proto, Client), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).