%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc Amazon EventBridge helps you to respond to state changes in your AWS %% resources. When your resources change state, they automatically send %% events into an event stream. You can create rules that match selected %% events in the stream and route them to targets to take action. You can %% also use rules to take action on a predetermined schedule. For example, %% you can configure rules to: %% %%
partner_name/event_namespace/event_name
%%
%%
%% partner_name is determined during partner registration and
%% identifies the partner to AWS customers. event_namespace is
%% determined by the partner and is a way for the partner to categorize their
%% events. event_name is determined by the partner, and should
%% uniquely identify an event-generating resource within the partner system.
%% The combination of event_namespace and event_name should
%% help AWS customers decide whether to create an event bus to receive these
%% events.
create_partner_event_source(Client, Input)
when is_map(Client), is_map(Input) ->
create_partner_event_source(Client, Input, []).
create_partner_event_source(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreatePartnerEventSource">>, Input, Options).
%% @doc You can use this operation to temporarily stop receiving events from
%% the specified partner event source. The matching event bus is not deleted.
%%
%% When you deactivate a partner event source, the source goes into PENDING
%% state. If it remains in PENDING state for more than two weeks, it is
%% deleted.
%%
%% To activate a deactivated partner event source, use
%% ActivateEventSource.
deactivate_event_source(Client, Input)
when is_map(Client), is_map(Input) ->
deactivate_event_source(Client, Input, []).
deactivate_event_source(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeactivateEventSource">>, Input, Options).
%% @doc Deletes the specified custom event bus or partner event bus. All
%% rules associated with this event bus need to be deleted. You can't delete
%% your account's default event bus.
delete_event_bus(Client, Input)
when is_map(Client), is_map(Input) ->
delete_event_bus(Client, Input, []).
delete_event_bus(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteEventBus">>, Input, Options).
%% @doc This operation is used by SaaS partners to delete a partner event
%% source. This operation is not used by AWS customers.
%%
%% When you delete an event source, the status of the corresponding partner
%% event bus in the AWS customer account becomes DELETED.
%%
%%
delete_partner_event_source(Client, Input)
when is_map(Client), is_map(Input) ->
delete_partner_event_source(Client, Input, []).
delete_partner_event_source(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeletePartnerEventSource">>, Input, Options).
%% @doc Deletes the specified rule.
%%
%% Before you can delete the rule, you must remove all targets, using
%% RemoveTargets.
%%
%% When you delete a rule, incoming events might continue to match to the
%% deleted rule. Allow a short period of time for changes to take effect.
%%
%% Managed rules are rules created and managed by another AWS service on your
%% behalf. These rules are created by those other AWS services to support
%% functionality in those services. You can delete these rules using the
%% Force option, but you should do so only if you are sure the
%% other service is not still using that rule.
delete_rule(Client, Input)
when is_map(Client), is_map(Input) ->
delete_rule(Client, Input, []).
delete_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteRule">>, Input, Options).
%% @doc Displays details about an event bus in your account. This can include
%% the external AWS accounts that are permitted to write events to your
%% default event bus, and the associated policy. For custom event buses and
%% partner event buses, it displays the name, ARN, policy, state, and
%% creation time.
%%
%% To enable your account to receive events from other accounts on its
%% default event bus, use PutPermission.
%%
%% For more information about partner event buses, see CreateEventBus.
describe_event_bus(Client, Input)
when is_map(Client), is_map(Input) ->
describe_event_bus(Client, Input, []).
describe_event_bus(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeEventBus">>, Input, Options).
%% @doc This operation lists details about a partner event source that is
%% shared with your account.
describe_event_source(Client, Input)
when is_map(Client), is_map(Input) ->
describe_event_source(Client, Input, []).
describe_event_source(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeEventSource">>, Input, Options).
%% @doc An SaaS partner can use this operation to list details about a
%% partner event source that they have created. AWS customers do not use this
%% operation. Instead, AWS customers can use DescribeEventSource to
%% see details about a partner event source that is shared with them.
describe_partner_event_source(Client, Input)
when is_map(Client), is_map(Input) ->
describe_partner_event_source(Client, Input, []).
describe_partner_event_source(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribePartnerEventSource">>, Input, Options).
%% @doc Describes the specified rule.
%%
%% DescribeRule does not list the targets of a rule. To see the targets
%% associated with a rule, use ListTargetsByRule.
describe_rule(Client, Input)
when is_map(Client), is_map(Input) ->
describe_rule(Client, Input, []).
describe_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeRule">>, Input, Options).
%% @doc Disables the specified rule. A disabled rule won't match any events,
%% and won't self-trigger if it has a schedule expression.
%%
%% When you disable a rule, incoming events might continue to match to the
%% disabled rule. Allow a short period of time for changes to take effect.
disable_rule(Client, Input)
when is_map(Client), is_map(Input) ->
disable_rule(Client, Input, []).
disable_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisableRule">>, Input, Options).
%% @doc Enables the specified rule. If the rule does not exist, the operation
%% fails.
%%
%% When you enable a rule, incoming events might not immediately start
%% matching to a newly enabled rule. Allow a short period of time for changes
%% to take effect.
enable_rule(Client, Input)
when is_map(Client), is_map(Input) ->
enable_rule(Client, Input, []).
enable_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"EnableRule">>, Input, Options).
%% @doc Lists all the event buses in your account, including the default
%% event bus, custom event buses, and partner event buses.
list_event_buses(Client, Input)
when is_map(Client), is_map(Input) ->
list_event_buses(Client, Input, []).
list_event_buses(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListEventBuses">>, Input, Options).
%% @doc You can use this to see all the partner event sources that have been
%% shared with your AWS account. For more information about partner event
%% sources, see CreateEventBus.
list_event_sources(Client, Input)
when is_map(Client), is_map(Input) ->
list_event_sources(Client, Input, []).
list_event_sources(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListEventSources">>, Input, Options).
%% @doc An SaaS partner can use this operation to display the AWS account ID
%% that a particular partner event source name is associated with. This
%% operation is not used by AWS customers.
list_partner_event_source_accounts(Client, Input)
when is_map(Client), is_map(Input) ->
list_partner_event_source_accounts(Client, Input, []).
list_partner_event_source_accounts(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListPartnerEventSourceAccounts">>, Input, Options).
%% @doc An SaaS partner can use this operation to list all the partner event
%% source names that they have created. This operation is not used by AWS
%% customers.
list_partner_event_sources(Client, Input)
when is_map(Client), is_map(Input) ->
list_partner_event_sources(Client, Input, []).
list_partner_event_sources(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListPartnerEventSources">>, Input, Options).
%% @doc Lists the rules for the specified target. You can see which of the
%% rules in Amazon EventBridge can invoke a specific target in your account.
list_rule_names_by_target(Client, Input)
when is_map(Client), is_map(Input) ->
list_rule_names_by_target(Client, Input, []).
list_rule_names_by_target(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListRuleNamesByTarget">>, Input, Options).
%% @doc Lists your Amazon EventBridge rules. You can either list all the
%% rules or you can provide a prefix to match to the rule names.
%%
%% ListRules does not list the targets of a rule. To see the targets
%% associated with a rule, use ListTargetsByRule.
list_rules(Client, Input)
when is_map(Client), is_map(Input) ->
list_rules(Client, Input, []).
list_rules(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListRules">>, Input, Options).
%% @doc Displays the tags associated with an EventBridge resource. In
%% EventBridge, rules and event buses can be tagged.
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 Lists the targets assigned to the specified rule.
list_targets_by_rule(Client, Input)
when is_map(Client), is_map(Input) ->
list_targets_by_rule(Client, Input, []).
list_targets_by_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListTargetsByRule">>, Input, Options).
%% @doc Sends custom events to Amazon EventBridge so that they can be matched
%% to rules.
put_events(Client, Input)
when is_map(Client), is_map(Input) ->
put_events(Client, Input, []).
put_events(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutEvents">>, Input, Options).
%% @doc This is used by SaaS partners to write events to a customer's partner
%% event bus. AWS customers do not use this operation.
put_partner_events(Client, Input)
when is_map(Client), is_map(Input) ->
put_partner_events(Client, Input, []).
put_partner_events(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutPartnerEvents">>, Input, Options).
%% @doc Running PutPermission permits the specified AWS account
%% or AWS organization to put events to the specified event bus.
%% Amazon EventBridge (CloudWatch Events) rules in your account are triggered
%% by these events arriving to an event bus in your account.
%%
%% For another account to send events to your account, that external account
%% must have an EventBridge rule with your account's event bus as a target.
%%
%% To enable multiple AWS accounts to put events to your event bus, run
%% PutPermission once for each of these accounts. Or, if all the
%% accounts are members of the same AWS organization, you can run
%% PutPermission once specifying Principal as "*"
%% and specifying the AWS organization ID in Condition, to grant
%% permissions to all accounts in that organization.
%%
%% If you grant permissions using an organization, then accounts in that
%% organization must specify a RoleArn with proper permissions
%% when they use PutTarget to add your account's event bus as a
%% target. For more information, see Sending
%% and Receiving Events Between AWS Accounts in the Amazon EventBridge
%% User Guide.
%%
%% The permission policy on the default event bus cannot exceed 10 KB in
%% size.
put_permission(Client, Input)
when is_map(Client), is_map(Input) ->
put_permission(Client, Input, []).
put_permission(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutPermission">>, Input, Options).
%% @doc Creates or updates the specified rule. Rules are enabled by default,
%% or based on value of the state. You can disable a rule using
%% DisableRule.
%%
%% A single rule watches for events from a single event bus. Events generated
%% by AWS services go to your account's default event bus. Events generated
%% by SaaS partner services or applications go to the matching partner event
%% bus. If you have custom applications or services, you can specify whether
%% their events go to your default event bus or a custom event bus that you
%% have created. For more information, see CreateEventBus.
%%
%% If you are updating an existing rule, the rule is replaced with what you
%% specify in this PutRule command. If you omit arguments in
%% PutRule, the old values for those arguments are not kept.
%% Instead, they are replaced with null values.
%%
%% When you create or update a rule, incoming events might not immediately
%% start matching to new or updated rules. Allow a short period of time for
%% changes to take effect.
%%
%% A rule must contain at least an EventPattern or ScheduleExpression. Rules
%% with EventPatterns are triggered when a matching event is observed. Rules
%% with ScheduleExpressions self-trigger based on the given schedule. A rule
%% can have both an EventPattern and a ScheduleExpression, in which case the
%% rule triggers on matching events as well as on a schedule.
%%
%% When you initially create a rule, you can optionally assign one or more
%% tags to the rule. Tags can help you organize and categorize your
%% resources. You can also use them to scope user permissions, by granting a
%% user permission to access or change only rules with certain tag values. To
%% use the PutRule operation and assign tags, you must have both
%% the events:PutRule and events:TagResource
%% permissions.
%%
%% If you are updating an existing rule, any tags you specify in the
%% PutRule operation are ignored. To update the tags of an
%% existing rule, use TagResource and UntagResource.
%%
%% Most services in AWS treat : or / as the same character in Amazon Resource
%% Names (ARNs). However, EventBridge uses an exact match in event patterns
%% and rules. Be sure to use the correct ARN characters when creating event
%% patterns so that they match the ARN syntax in the event you want to match.
%%
%% In EventBridge, it is possible to create rules that lead to infinite
%% loops, where a rule is fired repeatedly. For example, a rule might detect
%% that ACLs have changed on an S3 bucket, and trigger software to change
%% them to the desired state. If the rule is not written carefully, the
%% subsequent change to the ACLs fires the rule again, creating an infinite
%% loop.
%%
%% To prevent this, write the rules so that the triggered actions do not
%% re-fire the same rule. For example, your rule could fire only if ACLs are
%% found to be in a bad state, instead of after any change.
%%
%% An infinite loop can quickly cause higher than expected charges. We
%% recommend that you use budgeting, which alerts you when charges exceed
%% your specified limit. For more information, see Managing
%% Your Costs with Budgets.
put_rule(Client, Input)
when is_map(Client), is_map(Input) ->
put_rule(Client, Input, []).
put_rule(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutRule">>, Input, Options).
%% @doc Adds the specified targets to the specified rule, or updates the
%% targets if they are already associated with the rule.
%%
%% Targets are the resources that are invoked when a rule is triggered.
%%
%% You can configure the following as targets for Events:
%%
%% EC2 CreateSnapshot
%% API call, EC2 RebootInstances API call, EC2
%% StopInstances API call, and EC2 TerminateInstances API
%% call.
%%
%% For some target types, PutTargets provides target-specific
%% parameters. If the target is a Kinesis data stream, you can optionally
%% specify which shard the event goes to by using the
%% KinesisParameters argument. To invoke a command on multiple
%% EC2 instances with one rule, you can use the
%% RunCommandParameters field.
%%
%% To be able to make API calls against the resources that you own, Amazon
%% EventBridge (CloudWatch Events) needs the appropriate permissions. For AWS
%% Lambda and Amazon SNS resources, EventBridge relies on resource-based
%% policies. For EC2 instances, Kinesis data streams, AWS Step Functions
%% state machines and API Gateway REST APIs, EventBridge relies on IAM roles
%% that you specify in the RoleARN argument in
%% PutTargets. For more information, see Authentication
%% and Access Control in the Amazon EventBridge User Guide.
%%
%% If another AWS account is in the same region and has granted you
%% permission (using PutPermission), you can send events to that
%% account. Set that account's event bus as a target of the rules in your
%% account. To send the matched events to the other account, specify that
%% account's event bus as the Arn value when you run
%% PutTargets. If your account sends events to another account,
%% your account is charged for each sent event. Each event sent to another
%% account is charged as a custom event. The account receiving the event is
%% not charged. For more information, see Amazon EventBridge
%% (CloudWatch Events) Pricing.
%%
%% Input, InputPath, and
%% InputTransformer are not available with
%% PutTarget if the target is an event bus of a different AWS
%% account.
%%
%% RoleArn with proper permissions in the Target
%% structure. For more information, see Sending
%% and Receiving Events Between AWS Accounts in the Amazon EventBridge
%% User Guide.
%%
%% For more information about enabling cross-account events, see
%% PutPermission.
%%
%% Input, InputPath, and InputTransformer are mutually
%% exclusive and optional parameters of a target. When a rule is triggered
%% due to a matched event:
%%
%% $.detail), then only the part of the event specified
%% in the path is passed to the target (for example, only the detail part of
%% the event is passed).
%%
%% InputPath or
%% InputTransformer, you must use JSON dot notation, not bracket
%% notation.
%%
%% When you add targets to a rule and the associated rule triggers soon
%% after, new or updated targets might not be immediately invoked. Allow a
%% short period of time for changes to take effect.
%%
%% This action can partially fail if too many requests are made at the same
%% time. If that happens, FailedEntryCount is non-zero in the
%% response and each entry in FailedEntries provides the ID of
%% the failed target and the error code.
put_targets(Client, Input)
when is_map(Client), is_map(Input) ->
put_targets(Client, Input, []).
put_targets(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"PutTargets">>, Input, Options).
%% @doc Revokes the permission of another AWS account to be able to put
%% events to the specified event bus. Specify the account to revoke by the
%% StatementId value that you associated with the account when
%% you granted it permission with PutPermission. You can find
%% the StatementId by using DescribeEventBus.
remove_permission(Client, Input)
when is_map(Client), is_map(Input) ->
remove_permission(Client, Input, []).
remove_permission(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RemovePermission">>, Input, Options).
%% @doc Removes the specified targets from the specified rule. When the rule
%% is triggered, those targets are no longer be invoked.
%%
%% When you remove a target, when the associated rule triggers, removed
%% targets might continue to be invoked. Allow a short period of time for
%% changes to take effect.
%%
%% This action can partially fail if too many requests are made at the same
%% time. If that happens, FailedEntryCount is non-zero in the
%% response and each entry in FailedEntries provides the ID of
%% the failed target and the error code.
remove_targets(Client, Input)
when is_map(Client), is_map(Input) ->
remove_targets(Client, Input, []).
remove_targets(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RemoveTargets">>, Input, Options).
%% @doc Assigns one or more tags (key-value pairs) to the specified
%% EventBridge resource. Tags can help you organize and categorize your
%% resources. You can also use them to scope user permissions by granting a
%% user permission to access or change only resources with certain tag
%% values. In EventBridge, rules and event buses can be tagged.
%%
%% Tags don't have any semantic meaning to AWS and are interpreted strictly
%% as strings of characters.
%%
%% You can use the TagResource action with a resource that
%% already has tags. If you specify a new tag key, this tag is appended to
%% the list of tags associated with the resource. If you specify a tag key
%% that is already associated with the resource, the new tag value that you
%% specify replaces the previous value for that tag.
%%
%% You can associate as many as 50 tags with a 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 Tests whether the specified event pattern matches the provided event.
%%
%% Most services in AWS treat : or / as the same character in Amazon Resource
%% Names (ARNs). However, EventBridge uses an exact match in event patterns
%% and rules. Be sure to use the correct ARN characters when creating event
%% patterns so that they match the ARN syntax in the event you want to match.
test_event_pattern(Client, Input)
when is_map(Client), is_map(Input) ->
test_event_pattern(Client, Input, []).
test_event_pattern(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"TestEventPattern">>, Input, Options).
%% @doc Removes one or more tags from the specified EventBridge resource. In
%% Amazon EventBridge (CloudWatch Events, rules and event buses can be
%% tagged.
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).
%%====================================================================
%% 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 :: {binary(), binary()}.
request(Client, Action, Input, Options) ->
Client1 = Client#{service => <<"events">>},
Host = get_host(<<"events">>, Client1),
URL = get_url(Host, Client1),
Headers = [
{<<"Host">>, Host},
{<<"Content-Type">>, <<"application/x-amz-json-1.1">>},
{<<"X-Amz-Target">>, << <<"AWSEvents.">>/binary, Action/binary>>}
],
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, [return_maps]),
{ok, Result, {200, ResponseHeaders, Client}}
end;
handle_response({ok, StatusCode, ResponseHeaders, Client}) ->
{ok, Body} = hackney:body(Client),
Error = jsx:decode(Body, [return_maps]),
Exception = maps:get(<<"__type">>, Error, undefined),
Reason = maps:get(<<"message">>, Error, undefined),
{error, {Exception, Reason}, {StatusCode, ResponseHeaders, Client}};
handle_response({error, Reason}) ->
{error, Reason}.
get_host(_EndpointPrefix, #{region := <<"local">>}) ->
<<"localhost">>;
get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) ->
aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>).
get_url(Host, Client) ->
Proto = maps:get(proto, Client),
Port = maps:get(port, Client),
aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).